📄 seaf.c
字号:
if(x<1||x>WIDTH) return notify_fail("X坐标错误\n"); if(y<1||y>HEIGHT) return notify_fail("Y坐标错误\n"); id = this_player()->query("id"); sh = get_ship(id); tb = get_table(id); if(!sh||!tb) return notify_fail("access date fail\n"); if(tb[x-1][y-1][0] == 1) return notify_fail("该处已经布置了船只\n"); for(i=0;i<SHIP_NUM;i++) { if(!sh[i][1]) { sh[i][1] = x; sh[i][2] = y; tb[x-1][y-1][0] = 1; break; } } if(i==SHIP_NUM) return notify_fail("你已经没有空余的船只可以布置了。\n"); else { display(player_id(id)); if(!remain_place(id)) tell_object(this_player(),"\n使用[Finish]结束布置船只。\n"); } return 1;}int do_unplace(string arg){ int i,x,y; mixed *sh,*tb; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); if(game_mode!=0) return notify_fail("现在不是布置船只的时候。\n"); if( !arg || sscanf(arg, "%d %d", x, y)!=2 ) return notify_fail("unplace X坐标 Y坐标\n"); if(x<1||x>WIDTH) return notify_fail("X坐标错误\n"); if(y<1||y>HEIGHT) return notify_fail("Y坐标错误\n"); sh = get_ship(this_player()->query("id")); tb = get_table(this_player()->query("id")); if(!sh||!tb) return notify_fail("access date fail\n"); for(i=0;i<SHIP_NUM;i++) { if(sh[i][1]==x&&sh[i][2]==y) { sh[i][1] = 0; sh[i][2] = 0; tb[x-1][y-1][0] = 0; display(player_id(this_player()->query("id"))); break; } } if(i==SHIP_NUM) return notify_fail("该位置没有布置船只。\n"); return 1;}int do_finish(string arg){ int i,x,y; mixed *sh; string id; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); if(!(game_mode==0||game_mode==1)) return notify_fail("???\n"); id = this_player()->query("id"); sh = get_ship(id); if(!sh) return notify_fail("access date fail\n"); if(game_mode==0) { if(remain_place(id)) return notify_fail("还有船只没有布置\n"); } else if(game_mode==1) { if(remain_fire(id)) return notify_fail("还有火力没有布置\n"); } if(game_mode==0) msg(this_player(),0,"$N的船只布置完成\n"); else if(game_mode==1) msg(this_player(),0,"$N的火力布置完成\n"); player_action[this_player()->query("id")] = 1; if(sizeof(player_action)==2) { // all finish,go fire if(game_mode==0) before_fire(); else if(game_mode==1) start_fire(); } return 1;}int do_fire(string arg){ int i,x,y; mixed *sh,*tb; string id; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); if(game_mode!=1) return notify_fail("现在不是布置火力的时候。\n"); if( !arg || sscanf(arg, "%d %d", x, y)!=2 ) return notify_fail("place X坐标 Y坐标\n"); if(x<1||x>WIDTH) return notify_fail("X坐标错误\n"); if(y<1||y>HEIGHT) return notify_fail("Y坐标错误\n"); id = this_player()->query("id"); sh = get_ship(id); tb = get_table(enemy_id(id)); if(!sh||!tb) return notify_fail("access date fail\n"); if(tb[x-1][y-1][1] != 0) return notify_fail("该处已经布置了火力\n"); for(i=0;i<SHIP_NUM;i++) { if(!sh[i][0]&&!sh[i][3]) { sh[i][3] = x; sh[i][4] = y; sh[i][5] = tb[x-1][y-1][1]; tb[x-1][y-1][1] = 2; break; } } if(i==SHIP_NUM) return notify_fail("你已经没有空余的火力可以布置了。\n"); else { display(player_id(id)); if(i+1==SHIP_NUM) tell_object(this_player(),"\n使用[Finish]结束布置火力。\n"); } return 1;}int do_unfire(string arg){ int i,x,y; mixed *sh,*tb; string id; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); if(game_mode!=1) return notify_fail("现在不是布置火力的时候。\n"); if( !arg || sscanf(arg, "%d %d", x, y)!=2 ) return notify_fail("unplace X坐标 Y坐标\n"); if(x<1||x>WIDTH) return notify_fail("X坐标错误\n"); if(y<1||y>HEIGHT) return notify_fail("Y坐标错误\n"); id = this_player()->query("id"); sh = get_ship(id); tb = get_table(enemy_id(id)); if(!sh||!tb) return notify_fail("access date fail\n"); for(i=0;i<SHIP_NUM;i++) { if(!sh[i][0]&&sh[i][3]==x&&sh[i][4]==y) { sh[i][3] = 0; sh[i][4] = 0; tb[x-1][y-1][1] = sh[i][5]; display(player_id(id)); break; } } if(i==SHIP_NUM) return notify_fail("该位置没有布置火力。\n"); return 1;}int which_ship(mixed* sh,int x,int y){ int i; for(i=0;i<SHIP_NUM;i++) { if(sh[i][1]==x&&sh[i][2]==y) return i; } return -1;}int fire_it(){ int i,j1,j2,x,y,bFire; int r1,r2; string key1,key2; string m; mixed *sh1,*sh2; mixed *tb1,*tb2; key1 = keys(player)[0]; key2 = keys(player)[1]; sh1 = get_ship(key1); sh2 = get_ship(key2); tb1 = get_table(key1); tb2 = get_table(key2); game_mode = 2; m = 0; bFire = 0; fire_x = ({0,0}); fire_y = ({0,0}); if(sh1&&sh2) { for(i=0;i<SHIP_NUM;i++) { j1 = -1; j2 = -1; if(!sh1[i][0]&&sh1[i][3]) { // fire it x = sh1[i][3]; y = sh1[i][4]; fire_x[0] = x; fire_y[0] = y; sh1[i][3] = 0; sh1[i][4] = 0; tb2[x-1][y-1][1] = 1; j2 = which_ship(sh2,x,y); bFire = 1; } if(!sh2[i][0]&&sh2[i][3]) { // fire it x = sh2[i][3]; y = sh2[i][4]; fire_x[1] = x; fire_y[1] = y; sh2[i][3] = 0; sh2[i][4] = 0; tb1[x-1][y-1][1] = 1; j1 = which_ship(sh1,x,y); bFire = 1; } if(j1>=0) { m = BLINK HIY + key1 + "的船被击沉了。\n" NOR; sh1[j1][0] = 1; // be fired if(sh1[j1][3]) { x = sh1[j1][3]; y = sh1[j1][4]; sh1[j1][3] = 0; sh1[j1][4] = 0; tb2[x-1][y-1][1] = sh1[j1][5]; } } if(j2>=0) { if(!m)m=""; m = m + BLINK HIY + key2 + "的船被击沉了。\n" NOR; sh2[j2][0] = 1; // be fired if(sh2[j2][3]) { x = sh2[j2][3]; y = sh2[j2][4]; sh2[j2][3] = 0; sh2[j2][4] = 0; tb1[x-1][y-1][1] = sh2[j2][5]; } } if(bFire)break; } } if(bFire) { msg(0,0,BLINK HIR"\n~~~~~ 攻击!! ~~~~~\n"NOR); if(m)msg(0,0,m); display(0); remove_call_out("fire_it"); call_out("fire_it",4); } else { // fire finish r1 = 0; r2 = 0; for(i=0;i<SHIP_NUM;i++) { if(!sh1[i][0])r1++; if(!sh2[i][0])r2++; } if(r1==0||r2==0) { game_mode = 3; if(r1==0) { if(r2==0) who_win = -1; else who_win = 1; } else who_win = 2; display(0); msg(0,0,HIR"\n\n 所有战斗结束了,使用(start)重新开始。\n"NOR); } else { msg(0,0,sprintf(HIC"\n该回合攻击结束...\n%s(%d) VS %s(%d)\n"NOR,key1,remain_ship(key1),key2,remain_ship(key2))); before_fire(); } }}int do_visitor(string arg){ string key; object me,ob; int del; if(!arg) return notify_fail("visit [-]玩家ID\n"); if(sscanf(arg, "-d %s", key)==1 ) del = 1; else { del = 0; key = arg; } me = this_player(); if(is_playing(me)) { ob = present(key,environment(this_object())); if(!ob) return notify_fail("这里没有这个玩家啊?\n"); if(del) { if(!is_visitor(ob,me->query("id"))) return notify_fail("不是你的观战者了。\n"); msg(me,ob,"$N不再允许$n观看$N的战况。\n"); visitor[me->query("id")] = visitor[me->query("id")] - ({ob->query("id")}); } else { if(is_visitor(ob,me->query("id"))) return notify_fail("已经是你的观战者了。\n"); msg(me,ob,"$N让$n观看$N的战况。\n"); if(!visitor[me->query("id")]) visitor[me->query("id")] = ({ ob->query("id") }); else visitor[me->query("id")] += ob->query("id"); } } else { if(del) return notify_fail("????\n"); ob = get_player(key); if(!ob) return notify_fail("没有这个玩家在玩啊?\n"); msg(me,ob,"$N希望成为$n的观战者。\n"); tell_object(ob,"接受使用[visit "+me->query("id")+"]。\n"); } return 1;}int do_rplace(string arg){ int i,x,y; mixed *sh,*tb; if(!is_playing(this_player())) return notify_fail("你都不玩啊!\n"); if(!has_start||game_mode!=0) return notify_fail("现在不是布置船只的时候。\n"); sh = get_ship(this_player()->query("id")); tb = get_table(this_player()->query("id")); for(i=0;i<SHIP_NUM;i++) { if(!sh||!tb) return notify_fail("access date fail\n"); if(!sh[i][1]) { x = random(WIDTH)+1; y = random(HEIGHT)+1; if(tb[x-1][y-1][0] != 1) { sh[i][1] = x; sh[i][2] = y; tb[x-1][y-1][0] = 1; } } } display(player_id(this_player()->query("id"))); return 1;}int do_help(string arg){ this_player()->start_more( @HELP海战棋使用方法:——[开始游戏]———————————————帮助命令:helpboard加入命令:join 加入游戏开始命令:start 开始游戏重置命令:reset board 结束游戏——[船只布置]———————————————放置船只:place X坐标 Y坐标取消放置:unplace X坐标 Y坐标随机放置:rplace放置结束:finish——[火力布置]———————————————放置火力:fire X坐标 Y坐标取消放置:unfire X坐标 Y坐标放置结束:finish——[观战命令]———————————————观战命令:visit [-d] 玩家ID 邀请其它玩家观看你的游戏。 加参数 -d 表示删除该玩家的观看资格。——[游戏规则]———————————————该游戏是两人游戏。分为准备和战斗阶段两个阶段。在准备阶段,各人把自己的船放置于自己的棋盘上。当各人都准备好以后,进入战斗阶段。在战斗阶段,各人决定攻击的位置。每一艘船有 1次攻击机会。在完成攻击设置以后,进入战斗状态。系统根据双方的攻击设置进行攻击,当攻击位置上有敌方船,则可以把对方该船击毁。被击毁的船丧失攻击能力。在所有攻击结束以后,重新进入攻击设置。如此循环,直到一方的船全部被击毁。游戏开始时候,每人有10艘船。最后谁的船最先被全部消灭掉,谁为输者。—————————————————————— make by 猫部猫(Catyboy) v1.0HELP ); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -