分析: 在uDebug上調試都對了,提交時還是無限WA,撓的頭發都要掉光了,最后發現忘記把freopen(“in.txt”, “r”, stdin);加注釋了@。@。。。。氣得我笑出聲。 首先是List all possible moves for the current player.有上下左右與4條斜線8種情況。8*8個格子每個都要檢索一遍。先judge()查看每個位置各個方向是否legal,如果可以放置,輸出之。輸出直接放在judge里了,不高興寫入字符數組了,后面M()也會用到judge,這時不希望他輸出,于是給judge()加了個is_print變量來控制。盡量代碼重用。還有對于這八個方向,我一開始是用的傻傻的枚舉,
if (judge(i, j, 0, 1, is_print)) continue;
if (judge(i, j, 0, -1, is_print)) continue;
if (judge(i, j, 1, 0, is_print)) continue;
if (judge(i, j, -1, 0, is_print)) continue;
if (judge(i, j, 1, 1, is_print)) continue;
if (judge(i, j, -1, -1, is_print)) continue;
if (judge(i, j, 1, -1, is_print)) continue;
if (judge(i, j, -1, 1, is_print)) continue;
for (int l = 0;l < 8;++l)if (judge(i, j, Rx[l], Ry[l], 0)) change(i, j, Rx[l], Ry[l]);
即可,真心方便。下面M()函數也一樣。 還有就是L_Refresh的作用。系統有可能一口氣執行多次L()(當然我不確定,只是有可能),也可能未執行就執行M,這時需要知道是不是無合法操作,還得先執行L(),L_Refresh就是用來檢測L()有沒有執行過,且防止其重復執行多次。 還有那個輸出,比如“Black - 1 White - 4”,數字1和4在輸出時應用“ %2d”輸出,而不是兩個空格鍵。之前看題目“Black - xx White - yy”的xx、yy沒看懂,后來才知道是占兩個格子的意思。