下面是源**:
#include
#include
using namespace std;
class chess
//輪流走棋控制函式
void flushchess();//重新整理棋盤資訊函式
void judgewin();//判斷是否贏棋函式
void winer();//贏家輸出函式
int getans()//返回結果(贏家判斷)
static int count;//走棋步數變數
private:
bool flag;//輪流走棋判斷變數
int pw[16][16],tpw[4];//權值變數,最高權值變數
int result,num[2];//結果(贏家判斷),玩家輸入棋子座標判斷
char input[2],temp[2];//玩家輸入資料,轉換暫存資料
char cboard[16][16];//棋盤資料
int judgeawin(int a,int b);//判斷是否a為贏家函式
int judgebwin(int a,int b);//判斷是否b為贏家函式
void csetstep();//電腦走棋函式
void setpower();//初始化權值函式
int adddepth(int depth);//填充權值函式
void judgepw(int x,int y,int direction,int depth,char test);//棋子判斷[x座標,y座標,方向(順時針0-無,1-左,2-左上,3-上,4-右上),深度(depth),識別符號(a/b)]
void getfinalpw();//權值判斷函式
};int chess::count=0;
void vscomputer(); //人機對戰
void vsplayer(); //雙人對戰
int main()
while(newp.getans()==0&&chess::count<256);
newp.winer();
}void chess::setstepc(bool& ipjudge)
}else
csetstep();//輪到電腦走棋
}void chess::csetstep()
else if(cboard[i-1][j]=='x'||cboard[i-1][j-1]=='x'||cboard[i][j-1]=='x'||cboard[i+1][j-1]=='x'||cboard[i+1][j]=='x'||cboard[i+1][j+1]=='x'||cboard[i][j+1]=='x'||cboard[i-1][j+1]=='x')}}
}getfinalpw();
//coutpw();
//system("pause");
if(tpw[0]>0)
cboard[tpw[1]][tpw[2]]='x';
/*else if(tpw[0]>0&&tpw[3]>1)
}}*/
else
}void chess::judgepw(int x,int y,int direction,int depth,char test)
else if(direction==2)//左上方
else if(direction==3)//正上方
else if(direction==4)//右上方
else if(direction==5)//右方
else if(direction==6)//右下方
else if(direction==7)//正下方
else if(direction==8)//左下方
else if(direction==0)
}else if(depth==4)
pw[x][y]+=adddepth(depth);
else
}int chess::adddepth(int depth)}}
void chess::getfinalpw()
else if(pw[i][j]==tpw[0]&&pw[i][j]!=0)
tpw[3]+=1;}}
//雙人對戰
void vsplayer()
while(newp.getans()==0&&chess::count<256);
newp.winer();
}void chess::winer()
for(i=0;i<=15;i++)
for(j=0;j<=15;j++)
cboard[i][j]='+';
}//填充權值函式
void chess::setpower()
//輸出棋盤函式
void chess::coutchess()}}
//重新整理棋盤
void chess::flushchess()
}if(cboard[num[0]][num[1]]=='+'&&!flag)
cboard[num[0]][num[1]]='o';
else if(cboard[num[0]][num[1]]=='+'&&flag)
cboard[num[0]][num[1]]='x';
else
}//判斷勝出新演算法
void chess::judgewin()
else if(cboard[a+1][b-1]=='o'&&cboard[a+2][b-2]=='o'&&cboard[a-1][b+1]=='o'&&cboard[a-2][b+2]=='o') //左下右上五子
return 1;
else
return 0;
}//對棋手b的棋子檢測
int chess::judgebwin(int a,int b)
//輸出權值表
void chess::coutpw()
{int i,j;
system("cls");
cout<<" 歡樂五子棋(權值表)"<=0&&i<10)
cout<=10)
cout<(i+55)<<' ';
else
cout<<"棋盤列序號輸出錯誤!";
for(j=0;j<=15;j++)
cout本程式移植性差,程式ai超蠢,執行一段時間會出現假死狀態,一直未解決......
C語言版五子棋
include windows.h include include include ifndef cplusplus include 包含bool false endif cplusplus define board 16 coord g chesspos 儲存游標位置 short g chessi...
C寫五子棋
總結 每一步都應該認真去做 去思考 include include include include define maximus 15 定義棋盤大小 int p maximus maximus 儲存對局資訊 char buff maximus 2 1 maximus 4 3 輸出緩衝器 int cx...
C語言五子棋
實戰五子棋 思路 1.棋盤由邊緣數字和橫豎線及棋子構成 2.先init初始化,畫出棋盤的數字邊緣,為了第一次下棋的時候能看見棋盤樣子,其實可以封裝起來用 3.落子之後呼叫draw cross畫出整個棋盤,依舊是先畫邊緣數字,再畫棋子,一行一行畫 4.判斷輸贏。include include defi...