C 學習足跡 純DOS版 五子棋

2021-05-17 14:18:55 字數 3177 閱讀 4474

下面是源**:

#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...