資源簡介
自寫同化棋代碼,內含決策AI,注釋也是挺詳細的。
發上來造福后人。
代碼片段和文件信息
#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,記錄棋盤狀態//主棋盤
int?currPeoColor;?//?人所執子顏色(1為黑,-1為白,棋盤狀態亦同)
int?turnID;//回合數
//打印圖形界面?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
string?fuhao(int?i?int?j?int?p[7][7])//獲得棋盤中指定坐標交點位置的字符,通過制表符拼成棋盤
{
if?(p[i][j]?==?1)//1為黑子
return?“○“;
else?if?(p[i][j]?==?-1)//-1為白子
return?“●“;
else
return?“??“;
}
void?outqipan()//實現打印界面
{
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)//?判斷是否在地圖內
{
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)//實現在指定的棋盤上下棋
{
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)?//?保證不會移動到原來位置,而且移動始終在5×5區域內
return?false;
if?(qipan[x1][y1]?!=?0)?//?保證移動到的位置為空
return?false;
if?(dx?==?2?||?dy?==?2)?//?如果走的是5×5的外圍,則不是復制粘貼
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;
}
//判斷游戲結束~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 上一篇:編譯原理課程設計簡單優先文法判定和分析器的構造
- 下一篇:PL/0語法分析程序
評論
共有 條評論