📄 fxq.c
字号:
}}int toss(object who,int se){ string r,cmd; string cmd1,cmd2; int i,pid; int c; pid = cur_player; r = build_qi(who); c = 0; for(i=0;i<4;i++) { switch(qizi[pid-1][i][QI_FLAG]) { case QI_SLEEP: if(member_array(se,wake_point)!=-1) { if(cmd1) cmd1 = sprintf("%s|%c",cmd1,'a'+i); else cmd1 = sprintf("出机 move %c",'a'+i); c = 1; } break; case QI_WAIT: case QI_WALK: case QI_BACK: if(cmd2) cmd2 = sprintf("%s|%c",cmd2,'a'+i); else cmd2 = sprintf("移动 move %c",'a'+i); c = 1; break; case QI_END: break; default: msg(0,0,"\n错误飞机状态!!!\n"); break; } } cmd = sprintf("%d点\n",se); if(cmd1)cmd = sprintf("%s%s\n",cmd,cmd1); if(cmd2)cmd = sprintf("%s%s\n",cmd,cmd2); if(c) { tell_object(who,r); tell_object(who,cmd); } else next_one(); return 1;}int do_toss(string arg){ int se,pid; object me; me = this_player(); if(!(pid = is_playing(me))) return notify_fail("你都不玩啊!\n"); if(!has_start) return notify_fail("游戏还没有开始了。\n"); if(cur_se) return notify_fail("不是投色子的时候。\n"); if(!cur_player||me->query("id")!=player[cur_player-1]) return notify_fail("还没有开始到你了。\n"); msg(me,0,"$N拿起色子在手中摇了两摇。\n"); se = random(6)+1; show_se(se); cur_se = se; toss(me,se); return 1;}string extra_long(){ object me; object who; string r,r2; int i; me = this_player(); r = "\n"+build_qi(me); return r;}int do_reset(string arg){ int i; mixed* idx; if(!this_object()->id(arg)) return 0; if(!is_playing(this_player())) { for(i=0;i<sizeof(idx);i++) { if(get_player(player[i])) return notify_fail("你都不玩啊!\n"); } } reset_game(1); msg(this_player(),0,"$N重置了游戏。\n"); return 1;}int do_start(string arg){ int i,c; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); for(i=0;i<sizeof(player);i++) if(!player[i])break; switch(i) { case 2: player[2] = player[0]; player[3] = player[1]; break; case 4: break; default: return notify_fail("游戏人数只能是2人 或者 4人。\n"); break; } reset_game(0); has_start = 1; cur_player = 1; msg(this_player(),0,"$N开始游戏了\n"); msg(get_cur_player(),0,"$N首先投色。\n"); return 1;}int do_view(string arg){ write(build_qi(this_player())); return 1;}int do_join(string arg){ int i; object me; me = this_player(); if(has_start) return notify_fail("游戏已经开始,不能加入了,请使用(reset)命令重置。\n"); if(is_playing(me)) return notify_fail("你已经参加了。\n"); for(i=0;i<sizeof(player);i++) { if(!player[i]) { player[i] = me->query("id"); msg(me,0,"$N加入游戏了。\n"); if(i==3) msg(0,0,"请使用(start)命令开始游戏。\n"); return 1; } } return notify_fail("人数已满\n");}void show_qi(){ string r; r = build_qi(0); msg(0,0,"\n\n"+r);}void put_down(mixed* qi){ mixed* ge; ge = qi2ge(qi); if(ge) { ge[BD_PLAYER] = qi[QI_PLAYER]; ge[BD_QI] = qi[QI_ID]; }}void pick_out(mixed* qi){ mixed* ge; ge = qi2ge(qi); if(ge && ge[BD_PLAYER] == qi[QI_PLAYER] && ge[BD_QI] == qi[QI_ID]) { ge[BD_PLAYER] = 0; ge[BD_QI] = 0; }}int check_finish(){ int i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) if(qizi[i][j][QI_FLAG] != QI_END)return 0; return 1;}int reach(mixed* qi){ mixed* ge; mixed* qi2; ge = qi2ge(qi); if(ge[BD_PLAYER]) { // 有其他棋子? if(ge[BD_PLAYER] == qi[QI_PLAYER]) { // 自己,奖励一步 msg(get_cur_player(),0,"$N和自己的飞机相遇,前进一步。\n"); call_out("jump_to",0,qi,1); return 1; } else { // hit it qi2 = ge2qi(ge); msg(get_cur_player(),qi2player(qi2),BLINK HIR "\n$N击毁了$n的飞机!!!\n\n" NOR); return_base(qi2[QI_PLAYER],qi2[QI_ID]); } } else { switch(ge[BD_FLAG]) { case B_NORMAL: if(qi[QI_PLAYER] == ge[BD_COLOR] && !has_jump) { msg(get_cur_player(),0,"$N的飞机进行跳跃...\n"); call_out("jump_to",0,qi,4); return 1; } break; case B_SJUMP: // 超级跳跃 if(qi[QI_PLAYER] == ge[BD_COLOR] && !has_jump) { msg(get_cur_player(),0,HIY "\n$N的飞机进行超级跳跃!\n"); qi2 = ge2qi(ge); if(qi2) { msg(get_cur_player(),qi2player(qi2),BLINK HIR "\n$N击毁了$n的飞机!!!\n\n" NOR); return_base(qi2[QI_PLAYER],qi2[QI_ID]); } call_out("jump_to",0,qi,12); return 1; } break; case B_END: // 结束 msg(get_cur_player(),0,"$N的一架飞机到终点了。\n"); return_base(qi[QI_PLAYER],qi[QI_ID]); qi[QI_FLAG] = QI_END; if(check_finish()) return 1; next_one(); return 1; default: break; } } put_down(qi); next_one(); return 1;}int jump_to(mixed* qi,int w){ int i; int ox,oy,p; mixed* ge; has_jump = 1; for(i=0;i<w;i++) { ge = qi2ge(qi); p = ge[BD_PATH]; ox = 0; oy = 0; if(p & P_LEFT)ox --; if(p & P_RIGHT)ox ++; if(p & P_UP)oy --; if(p & P_DOWN)oy ++; qi[QI_X]+=ox; qi[QI_Y]+=oy; } show_qi(); reach(qi); return 1;}int move_qi(mixed* qi,int pt){ int i,x,y; int ox,oy,p,q; mixed* ge; switch(qi[0]) { case QI_SLEEP: if(member_array(pt,wake_point)==-1) return notify_fail("不能移动该棋子。\n"); qi[QI_FLAG] = QI_WAIT; pick_out(qi); q = qi[QI_PLAYER]; for(i=0;i<4;i++) { x = player_ready[q-1][i][0]; y = player_ready[q-1][i][1]; if(!board[y][x][BD_PLAYER]) { qi[QI_X] = x; qi[QI_Y] = y; i = 5; } } put_down(qi); msg(get_cur_player(),0,"$N准备出动一架飞机。\n"); next_one(); return 1; case QI_WAIT: pt--; x = player_start[cur_player-1][0]; y = player_start[cur_player-1][1]; pick_out(qi); qi[QI_FLAG] = QI_WALK; qi[QI_X] = x; qi[QI_Y] = y; if(pt==0) { show_qi(); reach(qi); } else { if(!move_qi(qi,pt)) return 0; } break; case QI_WALK: pick_out(qi); pt --; ge = qi2ge(qi); if(ge[BD_FLAG] == B_GATE && qi[QI_PLAYER] == ge[BD_COLOR]) { switch(ge[BD_COLOR]) { case 1: p = 1; break; case 2: p = 4; break; case 3: p = 2; break; case 4: p = 8; break; } } else p = ge[BD_PATH]; ox = 0; oy = 0; if(p & P_LEFT)ox --; if(p & P_RIGHT)ox ++; if(p & P_UP)oy --; if(p & P_DOWN)oy ++; qi[QI_X]+=ox; qi[QI_Y]+=oy; ge = qi2ge(qi); if(pt==0) { show_qi(); reach(qi); } else { if(ge[BD_FLAG] == B_END) qi[QI_FLAG] = QI_BACK; if(!move_qi(qi,pt)) return 0; } break; case QI_BACK: { ge = qi2ge(qi); p = ge[BD_PATH]; ox = 0; oy = 0; if(p & P_LEFT)ox --; if(p & P_RIGHT)ox ++; if(p & P_UP)oy --; if(p & P_DOWN)oy ++; qi[QI_X]-=ox; qi[QI_Y]-=oy; pt--; if(pt==0) { qi[QI_FLAG] = QI_WALK; show_qi(); reach(qi); } else { if(!move_qi(qi,pt)) return 0; } } break; case QI_END: return notify_fail("不能移动该棋子。\n"); default: msg(0,0,"\n错误飞机状态!!!\n"); break; } return 1;}int do_move(string arg){ int pid; int w; object me; mixed* qi; me = this_player(); if(!(pid = is_playing(me))) return notify_fail("你都不玩啊!\n"); if(!has_start) return notify_fail("游戏还没有开始了。\n"); if(!cur_se) return notify_fail("是投色子的时候。\n"); if(!cur_player||me->query("id")!=player[cur_player-1]) return notify_fail("还没有开始到你了。\n"); if(!arg) return notify_fail("你要移动哪个棋子啊(a|b|c|d)?\n"); w = 0; if(arg=="a") w = 1; if(arg=="b") w = 2; if(arg=="c") w = 3; if(arg=="d") w = 4; if(!w) return notify_fail("你要移动哪个棋子啊(a|b|c|d)\n"); qi = qizi[cur_player-1][w-1]; cur_qi = qi; shadow_it(qi); if(!move_qi(qi,cur_se)) return 0; return 1;}mixed t(int x,int y){ return board[x][y];}int do_help(string arg){ this_player()->start_more( @HELP飞行棋使用方法:——[开始游戏]———————————————帮助命令:helpqi加入游戏:join 开始游戏:start重置游戏:reset qi——[游戏命令]——————————————— 摇色子:toss查看情况:view移动棋子:move a|b|c|d催促玩家:next——[游戏规则]———————————————普通的飞行棋。—————————————————————— make by 猫部猫(Catyboy) v1.0HELP ); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -