資源簡(jiǎn)介
自寫(xiě)同化棋代碼,內(nèi)含決策AI,注釋也是挺詳細(xì)的。
發(fā)上來(lái)造福后人。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include
#include
using?namespace?std;
//全局變量~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const?int?maxdepth?=?4;//搜索深度
const?int?maxID?=?35;
static?int?delta[24][2]?=?{?{?11?}{?01?}{?-11?}{?-10?}
{?-1-1?}{?0-1?}{?1-1?}{?10?}
{?20?}{?21?}{?22?}{?12?}
{?02?}{?-12?}{?-22?}{?-21?}
{?-20?}{?-2-1?}{?-2-2?}{?-1-2?}
{?0-2?}{?1-2?}{?2-2?}{?2-1?}
};
int?gridInfo[7][7]?=?{?0?};?//?先x后y,記錄棋盤(pán)狀態(tài)//主棋盤(pán)
int?currPeoColor;?//?人所執(zhí)子顏色(1為黑,-1為白,棋盤(pán)狀態(tài)亦同)
int?turnID;//回合數(shù)
//打印圖形界面?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
string?fuhao(int?i?int?j?int?p[7][7])//獲得棋盤(pán)中指定坐標(biāo)交點(diǎn)位置的字符,通過(guò)制表符拼成棋盤(pán)
{
if?(p[i][j]?==?1)//1為黑子
return?“○“;
else?if?(p[i][j]?==?-1)//-1為白子
return?“●“;
else
return?“??“;
}
void?outqipan()//實(shí)現(xiàn)打印界面
{
system(“cls“);
int?blacknum?=?0;
int?whitenum?=?0;
cout?<<“??|“<“1“?<“??2“?<“??3“?<“??4“?<“??5“?<“??6“?<“??7“?<<“??Y“< cout?<“-------------------------------“?< for?(int?i?=?0;?i<7;?i++)
{
cout?< for?(int?j?=?0;?j<7;?j++)
{
if?(gridInfo[i][j]?==?1) blacknum++;
if?(gridInfo[i][j]?==?-1) whitenum++;
cout?< }
cout?< cout<<“??“<<“------------------------------“?;
cout< }
cout?<“X|“?< cout<<“**********????????????????**********“< cout?<“*黑方:“?< cout< cout<<“**********????????????????**********“< }
//提子走子~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
inline?bool?inMap(int?x?int?y)//?判斷是否在地圖內(nèi)
{
if?(x?0?||?x?>?6?||?y?0?||?y?>?6)
return?false;
return?true;
}
bool?step(int?x0?int?y0?int?x1?int?y1?int?qipan[7][7]?int?color)//實(shí)現(xiàn)在指定的棋盤(pán)上下棋
{
if?(color?==?0) return?false;
if?(x1?==?-1) return?true;
if?(!inMap(x0?y0)) return?false;
if?(qipan[x0][y0]?!=?color) return?false;
int?dx?dy?x?y;
dx?=?abs((x0?-?x1))?dy?=?abs((y0?-?y1));
if?((dx?==?0?&&?dy?==?0)?||?dx?>?2?||?dy?>?2)?//?保證不會(huì)移動(dòng)到原來(lái)位置,而且移動(dòng)始終在5×5區(qū)域內(nèi)
return?false;
if?(qipan[x1][y1]?!=?0)?//?保證移動(dòng)到的位置為空
return?false;
if?(dx?==?2?||?dy?==?2)?//?如果走的是5×5的外圍,則不是復(fù)制粘貼
qipan[x0][y0]?=?0;
qipan[x1][y1]?=?color;
for?(int?dir?=?0;?dir<8;?dir++)
{
x?=?x1?+?delta[dir][0];
y?=?y1?+?delta[dir][1];
if?(!inMap(x?y))
continue;
if?(qipan[x][y]?==?-color)
{
qipan[x][y]?=?color;
}
}
return?true;
}
//判斷游戲結(jié)束~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
評(píng)論
共有 條評(píng)論