签到天数: 208 天 [LV.7]常住居民III

♪(^∇^*)
- UID
- 58302
- 僵尸币
- 27935
- 贡献度
- 100
- 注册时间
- 2019-5-8
- 在线时间
- 691 小时
- 最后登录
- 2024-11-4
  
|
不注册个乐园论坛账号能玩??
您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 不科学 于 2021-1-28 14:30 编辑
源文件:
CSGO-puzzle.rar
(496.9 KB, 下载次数: 10)
游戏介绍:开局1秒后拼图会被打乱,你只能移动空白的那一片拼图
啊,发现一个小BUG: 开局机器人打乱的时候会输出提示解密完成解决方案:设置变量flag= 0 在机器人打乱结束后 flag= 1
然后在判断胜利函数里进行flag判断即可:
if(flag == 1){
ScriptPrintMessageChatAll("你成功完成了解密,墓门已开");
}
示意图:
//脚本内容:
puzzle_a <- ["puzzle_brush_0","puzzle_brush_1","puzzle_brush_2","puzzle_brush_3"
,"puzzle_brush_4","puzzle_brush_5","puzzle_brush_6","puzzle_brush_7"
,"puzzle_brush_8","puzzle_brush_9","puzzle_brush_10","puzzle_brush_11"
,"puzzle_brush_12","puzzle_brush_13","puzzle_brush_14","puzzle_brush_15"
];
puzzle_b <- ["puzzle_brush_0","puzzle_brush_1","puzzle_brush_2","puzzle_brush_3"
,"puzzle_brush_4","puzzle_brush_5","puzzle_brush_6","puzzle_brush_7"
,"puzzle_brush_8","puzzle_brush_9","puzzle_brush_10","puzzle_brush_11"
,"puzzle_brush_12","puzzle_brush_13","puzzle_brush_14","puzzle_brush_15"
];
puzzle_target <- 0; //空白拼图的位置,左上角第一个为0
//logic_auto在游戏开始时自动运行start()
function puzzle_start(){
//打乱拼图 num是难度(空白片移动的次数) 如果num = 1 那么空白片只会移动一格
local num = rand() % 40 + 120;
local T1 = 0; //上一次移动的方向 0是上 1是下 2 是左 3是右
local T2 = 0; //这一次移动的方向
//开始移动
while(num>0){
//如果这一次的移动方向和上一次的移动方向不同,就开始移动
while(T1 == T2){
T2 = rand() % 4;
}
puzzle_move(T2); //传入移动的方向,开始移动
num--; //移动次数减1
T1 = T2; //记录这一次的移动方向
}
}
//传入移动方向(游戏中按下按钮后就会触发)
function puzzle_move(n){
local T = null; //T为具体要移动的那一块拼图
//↑↓←→
switch(n){
case 0:
//向上移动,条件为:空白拼图的位置-4后依然大于等于0
//最上方的4个位置为 0 1 2 3 减去4后均小于0
//如果满足条件,可以向上移动,那么就是要交换 (空白拼图) 和 (空白拼图-4) 的位置
if(puzzle_target-4 >= 0){
T = puzzle_target - 4;
puzzle_move_start(T);
}
break;
case 1:
//向下移动,参考向上移动 最下层位置为:12 13 14 15
if(puzzle_target+4 <= 15){
T = puzzle_target + 4;
puzzle_move_start(T);
}
break;
case 2:
//向左移动,条件为空白拼图位置 % 4 不为 0
//最左边那一列的编号为:
// 0
// 4
// 8
// 12
//这4个位置除以4后,余数均为0,所以不能向左移动
//反过来说,如果余数不是0,就可以向左移动
//此时交换 (空白拼图) 和 (空白拼图-1) 的位置
if( (puzzle_target)%4 != 0 ){
T = puzzle_target - 1;
puzzle_move_start(T);
}
break;
case 3:
//向右移动,参考case 2 最右列为:3 7 11 15
if( (puzzle_target)%4 != 3 ){
T = puzzle_target + 1;
puzzle_move_start(T);
}
break;
}
}
//开始移动拼图
function puzzle_move_start(T){
//找到两者句柄
//Tb为空白拼图
//Ta为传入的目标拼图
local Ta = Entities.FindByName(null,puzzle_a[T]);
local Tb = Entities.FindByName(null,puzzle_a[puzzle_target]);
//交换两者在数组a中的位置
local Te = puzzle_a[T];
puzzle_a[T] = puzzle_a[puzzle_target];
puzzle_a[puzzle_target] = Te;
//交换两者在游戏里的位置
local temp = Ta.GetOrigin();
Ta.SetOrigin(Tb.GetOrigin());
Tb.SetOrigin(temp);
//重新定位空白拼图,并且判断是否胜利
puzzle_target = T;
puzzle_win();
}
//判断胜利
function puzzle_win(){
local num = 0;
for(local i = 0 ; i < 16 ; i++){
if(puzzle_a != puzzle_b){
return; //数组b内的拼图是正确位置,如果数组a和数组b有一个位置不相同,就返回
}
}
//如果都相同(胜利),就会执行下面的语句
ScriptPrintMessageChatAll("你成功完成了解密,墓门已开");
}
|
|