📄 cch.c
字号:
} setup();}void init() {init_tab(); add_action("do_move","move"); add_action("do_toss","toss"); add_action("do_reset","reset"); add_action("do_save","csave"); add_action("do_deploy","deploy"); add_action("do_lose","lose"); add_action("do_help","help"); add_action("do_review","review");}string query_save_file(){ if( bb == 1 )return DATA_DIR + "cchess/" + this_player()->query("id")[0..0] + "/" + this_player()->query("id"); elsereturn DATA_DIR + "cchess/cchess"; }int init_tab() { table = keys(TABLE); table = sort_array(table,1); return 1;}int do_move(string arg) { int sROW,sCOL,tROW,tCOL,i,ii,x,y,tem,tem1,tem2,tem3,tem4; string msg,msg1;object ob,me; ob = this_object();me = this_player();msg1 = "";if( ob->query("over") ) return notify_fail("这盘棋已经结束了。 \n");if( me->name() != ob->query("name1") && me->name() != ob->query("name2") )return notify_fail("你还是先投骰子吧!\n");if( !ob->query("name2") )return notify_fail("还要有一个人才能下棋!\n");if( ob->query("round") == 0 && ob->query("first") != me->name() )return notify_fail("这个回合不该你走棋!\n");if( ob->query("round") == 1 && ob->query("first") == me->name() )return notify_fail("这个回合不该你走棋!\n"); if( !arg ) return notify_fail("移动棋子:move 横坐标 纵坐标 to 横坐标 纵坐标 \n"); if( sscanf(arg,"%d %d to %d %d",sCOL,sROW,tCOL,tROW) != 4 ) return notify_fail("移动棋子:move 横坐标 纵坐标 to 横坐标 纵坐标 \n");if( tCOL > 9 || tCOL < 1 || tROW > 9 || tROW < 0 ||sCOL > 9 || sCOL < 1 || sROW > 9 || sROW < 0) return notify_fail("你的输入已经超越象棋盘界线了。\n");if( tCOL == sCOL && sROW == tROW )return notify_fail("这还用移动吗?\n"); sCOL -= 1; tCOL -= 1; sROW = sROW * 2; tROW = tROW * 2; sCOL = sCOL * 2; tCOL = tCOL * 2; if( TABLE[table[sROW]][sCOL][1] == " " )return notify_fail("这个地方没有棋子。\n");if( TABLE[table[tROW]][tCOL][3] == TABLE[table[sROW]][sCOL][3] )return notify_fail("你要吃掉自己的棋子?\n");if( ob->query("round") == 0 && cc != 1 ) return notify_fail("你拿错棋子了吧!\n");if( ob->query("round") == 1 && cc != 2 ) return notify_fail("你拿错棋子了吧!\n");//车 if( che == 1 ){if( tCOL != sCOL && sROW != tROW )return notify_fail("这个棋子只能走直线。\n");if( tCOL > sCOL && tCOL - sCOL > 2 )for (i=sCOL+2;i<tCOL;i++){if( i%2!=0) continue;if( TABLE[table[sROW]][i][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}if( sCOL > tCOL && sCOL - tCOL > 2 )for (i=tCOL+2;i<sCOL;i++){if( i%2!=0) continue;if( TABLE[table[sROW]][i][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}if( tROW > sROW && tROW - sROW > 2 )for (i=sROW+2;i<tROW;i++){if( i%2!=0) continue;if( TABLE[table[i]][sCOL][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}if( sROW > tROW && sROW - tROW > 2 )for (i=tROW+2;i<sROW;i++){if( i%2!=0) continue;if( TABLE[table[i]][sCOL][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}}//马if( che == 2 ){if( tCOL == sCOL || sROW == tROW )return notify_fail("马不能走直线。\n");if( tCOL < (sCOL - 4) || tCOL > (sCOL + 4) ||tROW < (sROW - 4) || tROW > (sROW + 4 ) )return notify_fail("这个棋子不能移动到那个地方。\n");if( (tCOL == sCOL - 2 || tCOL == sCOL + 2) && (tROW != sROW - 4 && tROW != sROW + 4) )return notify_fail("这个棋子不能移动到那个地方。\n");if( (tCOL == sCOL - 4 || tCOL == sCOL + 4) && (tROW != sROW - 2 && tROW != sROW + 2) )return notify_fail("这个棋子不能移动到那个地方。\n");if( sCOL-tCOL < -2 && TABLE[table[sROW]][sCOL+2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");if( sCOL-tCOL > 2 && TABLE[table[sROW]][sCOL-2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");if( sROW-tROW > 2 && TABLE[table[sROW-2]][sCOL][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");if( sROW-tROW < -2 && TABLE[table[sROW+2]][sCOL][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}//相if( che == 3 ){if( tCOL == sCOL || sROW == tROW )return notify_fail("相不能走直线。\n");if( (tROW != sROW-4 && tROW != sROW+4) || (tCOL != sCOL-4 && tCOL != sCOL+4) )return notify_fail("这个棋子不能移动到那个地方。\n");if( tCOL > sCOL ){if( tROW > sROW && TABLE[table[sROW+2]][sCOL+2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");if( tROW < sROW && TABLE[table[sROW-2]][sCOL+2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}if( tCOL < sCOL ){if( tROW > sROW && TABLE[table[sROW+2]][sCOL-2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");if( tROW < sROW && TABLE[table[sROW-2]][sCOL-2][1] != " " )return notify_fail("这个棋子不能移动到那个地方。\n");}if( (cc == 1 && tROW > 9) || (cc == 2 && tROW < 9) )return notify_fail("相不能过河。\n");}//仕if( che == 4 ){if( tCOL == sCOL || sROW == tROW )return notify_fail("仕不能走直线。\n");if( (tROW != sROW-2 && tROW != sROW+2) || (tCOL != sCOL-2 && tCOL != sCOL+2) )return notify_fail("这个棋子不能移动到那个地方。\n");if( cc == 1 && (tCOL > 10 || tCOL < 6 || tROW > 4) )return notify_fail("那个位置超出仕移动的范围了。\n");if( cc == 2 && (tCOL > 10 || tCOL < 6 || tROW < 14) )return notify_fail("那个位置超出仕移动的范围了。\n");}//帅if( che == 5 ){if( tCOL != sCOL && sROW != tROW )return notify_fail("这个棋子只能走直线。\n");if( tCOL - sCOL > 2 || tCOL - sCOL < -2 ||tROW - sROW > 2 || tROW - sROW < -2 )return notify_fail("帅一次只能走一格。\n");if( cc == 1 )if( tCOL > 10 || tCOL < 6 || tROW > 4 )return notify_fail("那个位置超出帅移动的范围了。\n");if( cc == 2 )if( tCOL > 10 || tCOL < 6 || tROW < 14 )return notify_fail("那个位置超出帅移动的范围了。\n");}//炮if( che == 6 ){ii = 0;if( tCOL != sCOL && sROW != tROW )return notify_fail("这个棋子只能走直线。\n");if( cc1 != 0 )if( tCOL - sCOL == 2 || tCOL - sCOL == -2 ||tROW - sROW == 2 || tROW - sROW == -2 )return notify_fail("这个棋子不能移动到那个地方。\n");if( tCOL > sCOL ){for (i=sCOL+2;i<tCOL;i++){if( i%2!=0) continue;if( TABLE[table[sROW]][i][1] != " " )ii += 1;if( ii > 1 )return notify_fail("这个棋子不能移动到那个地方。\n");if( ii == 1 && cc1 == 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( ii == 0 && cc1 != 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( sCOL > tCOL ){for (i=tCOL+2;i<sCOL;i++){if( i%2!=0) continue;if( TABLE[table[sROW]][i][1] != " " )ii += 1;if( ii > 1 )return notify_fail("这个棋子不能移动到那个地方。\n");if( ii == 1 && cc1 == 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( ii == 0 && cc1 != 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( tROW > sROW && tROW - sROW > 2 ){for (i=sROW+2;i<tROW;i++){if( i%2!=0) continue;if( TABLE[table[i]][sCOL][1] != " " )ii += 1;if( ii > 1 )return notify_fail("这个棋子不能移动到那个地方。\n");if( ii == 1 && cc1 == 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( ii == 0 && cc1 != 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( sROW > tROW && sROW - tROW > 2 ){for (i=tROW+2;i<sROW;i++){if( i%2!=0) continue;if( TABLE[table[i]][sCOL][1] != " " )ii += 1;if( ii > 1 )return notify_fail("这个棋子不能移动到那个地方。\n");if( ii == 1 && cc1 == 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( ii == 0 && cc1 != 0 )return notify_fail("这个棋子不能移动到那个地方。\n");}}//兵if( che == 7 ){if( tCOL - sCOL > 2 || tCOL - sCOL < -2 ||tROW - sROW > 2 || tROW - sROW < -2 )return notify_fail("兵一次只能走一格。\n");if( tCOL != sCOL && sROW != tROW )return notify_fail("这个棋子只能走直线。\n");if( cc == 1 ){if( sROW > tROW ) return notify_fail("兵不能往回走。\n");if( tCOL != sCOL && sROW < 9 )return notify_fail("这个棋子不能移动到那个地方。\n");}if( cc == 2 ){if( sROW < tROW ) return notify_fail("兵不能往回走。\n");if( tCOL != sCOL && sROW > 9 )return notify_fail("这个棋子不能移动到那个地方。\n");}}if ( TABLE[table[tROW]][tCOL][2] != 0 ){msg1 += "$N吃掉了对手一个" + sprintf("%s。\n",TABLE[table[tROW]][tCOL][1]);if( cc1 == 1 )bche+=TABLE[table[tROW]][tCOL][1];elserche+=TABLE[table[tROW]][tCOL][1];}if ( TABLE[table[tROW]][tCOL][2] == 5 ){msg1 += HIY"$N赢得了这场比赛的胜利。\n"NOR;ob->set("over",this_player()->name());} TABLE[table[tROW]][tCOL][1] = TABLE[table[sROW]][sCOL][1];TABLE[table[tROW]][tCOL][2] = TABLE[table[sROW]][sCOL][2];TABLE[table[tROW]][tCOL][3] = TABLE[table[sROW]][sCOL][3]; TABLE[table[sROW]][sCOL][1] = " ";TABLE[table[sROW]][sCOL][2] = 0; TABLE[table[sROW]][sCOL][3] = 0; tem4 = 0; for( y=0;y<6;y++ ){if( y%2 != 0 ) continue; for( x=6;x<12;x++ ) {if( x%2 != 0 ) continue; if( TABLE[table[y]][x][2] == 5 ){tem = x;tem3 = y;break; }}} for( y=14;y<19;y++ ){if( y%2 != 0 ) continue; for( x=6;x<12;x++ ) {if( x%2 != 0 ) continue; if( TABLE[table[y]][x][2] == 5 ){tem1 = x;tem2 = y;break;} }}if( tem == tem1 ){for (i=tem3+2;i<tem2;i++){if( i%2!=0) continue;if( TABLE[table[i]][tem][1] != " " )tem4 = 1; }if( tem4 == 0 ){ msg1 += (sprintf(HIY"%s赢得了这场比赛的胜利。\n"NOR,ob->query("name1") == me->name()?ob->query("name2"):ob->query("name1")) ); ob->set("over", ob->query("name1") == me->name()?ob->query("name2"):ob->query("name1") );}} if( sROW == tROW )if( cc1 == 2 ) msg = sprintf("『%s』%s平%s", TABLE[table[tROW]][tCOL][1], chinese_number(sCOL/2+1), chinese_number(tCOL/2+1) );else msg = sprintf("『%s』%s平%s", TABLE[table[tROW]][tCOL][1], chinese_number(10-(sCOL/2+1)), chinese_number(10-(tCOL/2+1)) ); else if( cc1 == 2 ) if( sROW>tROW ) msg = sprintf("『%s』%s进%s",TABLE[table[tROW]][tCOL][1], chinese_number(sCOL/2+1), sCOL==tCOL?chinese_number( (sROW-tROW)/2 ):chinese_number(tCOL/2+1) ); else msg = sprintf("『%s』%s退%s", TABLE[table[tROW]][tCOL][1], chinese_number(sCOL/2+1), sCOL==tCOL?chinese_number( (tROW-sROW)/2 ):chinese_number(tCOL/2+1) );else if( tROW>sROW ) msg = sprintf("『%s』%s进%s",TABLE[table[tROW]][tCOL][1],chinese_number(10-(sCOL/2+1)), sCOL==tCOL?chinese_number( (tROW-sROW)/2 ):chinese_number(10-(tCOL/2+1)) ); else msg = sprintf("『%s』%s退%s", TABLE[table[tROW]][tCOL][1],chinese_number(10-(sCOL/2+1)), sCOL==tCOL?chinese_number( (sROW-tROW)/2 ):chinese_number(10-(tCOL/2+1)) ); message_vision( "$N下了一着"+msg+"\n",this_player()); message_vision( msg1,me);do_check();if( aa == 4 ){aaa += msg+"\n"; aa = 0;} else {aaa += msg+" ";aa += 1;}ob->query("round") == 1?ob->set("round",0):ob->set("round",1);return 1;}int do_toss() { int num; string text;object me, ob;me = this_player();ob = this_object();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -