C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲_第1頁
C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲_第2頁
C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲_第3頁
C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲_第4頁
C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第C++應(yīng)用實(shí)現(xiàn)簡易五子棋游戲本文實(shí)例為大家分享了C++實(shí)現(xiàn)簡易五子棋游戲位的具體代碼,供大家參考,具體內(nèi)容如下

在實(shí)現(xiàn)五子棋小游戲時(shí),首先應(yīng)該分為棋盤和玩家,我們先定義兩個(gè)類:chessboard、player。分別提供棋盤的構(gòu)造和玩家及游戲規(guī)則的確定。下面我們看下代碼:

chessboard.h:對(duì)棋盤chessboard類型進(jìn)行定義

#ifndef_CHESSBOARD_H_

#define_CHESSBOARD_H_

#includeiostream

usingnamespacestd;

classChessBoard

//棋盤

public:

enum{ROW=31,COL=31};

//整個(gè)棋盤所占的行數(shù)和列數(shù)

charcSquare[ROW+1][COL+1];

//定義一個(gè)字符數(shù)組,用來打印棋盤

public:

ChessBoard();

//棋盤構(gòu)造函數(shù)

voidshow();

//棋盤的顯示

~ChessBoard(){}

//析構(gòu)函數(shù)

#endif

chessboard.cpp

#includeiostream

#includecstdlib

#include"chessboard.h"

usingnamespacestd;

//構(gòu)造函數(shù)

ChessBoard::ChessBoard()

for(inti=1;i=ROW-2;i+=2){

//將棋盤隔行放入‘-'.

for(intj=1;j=COL-2;j+=2){

cSquare[i][j]='';

cSquare[i][j+1]='|';

cSquare[i+1][j]='-';

cSquare[i+1][j+1]='-';

}

}

//圍出棋盤的四周

for(intj=0;jCOL;j++)

cSquare[0][j]=cSquare[ROW-1][j]='-';

for(inti=0;iROW;i++)

cSquare[i][0]=cSquare[i][COL-1]='|';

//空處棋盤落子空間

cSquare[ROW][0]='';

cSquare[0][COL]='';

//在最后以行打印出行、列下標(biāo)0,1,2...A,B,C...

for(inti=1;ii+=2){

cSquare[i][COL]=i/2+48;

cSquare[i+1][COL]='';

cSquare[ROW][i]=i/2+48;

cSquare[ROW][i+1]='';

}

for(intj=21;jCOL;j+=2){

cSquare[ROW][j]=j/2+55;

cSquare[ROW][j+1]='';

}

for(intj=21;jROW;j+=2){

cSquare[j][COL]=j/2+55;

cSquare[j+1][COL]='';

}

voidChessBoard::show()

system("clear");

//清除緩存區(qū)數(shù)據(jù)

//顯示棋盤

for(inti=0;i=ROW;++i){

for(intj=0;j=COL;++j)

coutcSquare[i][j]'';

coutendl;

}

}

player.h:定義player類

#ifndef_PLAYER_H_

#define_PLAYER_H_

#includeiostream

#includestring

#include"chessboard.h"

usingnamespacestd;

classPlayer

private:

stringm_name;

charm_ChessType;

intm_x;

intm_y;

ChessBoard*m_ptBoard;

public:

enum{ROW=31,COL=31};

Player():m_name("no_name"),m_ChessType(''),m_x(0),m_y(0),m_ptBoard(NULL){}

voidattachToBoard(ChessBoard*ptBoard){m_ptBoard=ptBoard;}

boolisInChessBoard(intx,inty)const;

//棋子是否羅在棋盤內(nèi)

boolHisLine(intx,inty)const;

//判斷水平方向是否連夠5個(gè)棋子

boolVisLine(intx,inty)const;

//判斷豎直方向是否連夠5個(gè)棋子

boolLtoBottomisLine(intx,inty)const;

//判斷自左上角到右下角是否連夠5個(gè)棋子

boolLtoTopisLine(intx,inty)const;

//判斷子右上角到左下角是否連夠5個(gè)棋子

boolisWin()const;

//是否贏

stringWinName()const{returnm_name;}

//贏者姓名

voidSetInfo(intno);

voidSetChess();

//把玩家所選的符號(hào)放進(jìn)所選為值

~Player(){}

#endif

player.cpp:

#includeiostream

#includecstdlib

#include"player.h"

usingnamespacestd;

boolPlayer::isInChessBoard(intx,inty)const

if(xROW-1x0yCOL-1y0)

returntrue;

else

returnfalse;

voidPlayer::SetInfo(intno)

cout"PleaseNo."no"inputyourname(qtoquit):\n";

getline(cin,m_name);

if("q"==m_name){

cout"ByeBye!"endl;

exit(-1);

}

//如果鍵盤輸入有錯(cuò)誤,清楚錯(cuò)誤標(biāo)志和環(huán)中去,重新輸入用戶名稱

while(!cin){

cin.clear();

cin.ignore(2048,'\n');

//1024清除緩存區(qū)數(shù)據(jù)

cout"PleaseNo."no"inputyournameagin(qtoquit):"endl;

getline(cin,m_name);

if("q"==m_name){cout"ByeBye!"endl;exit(-1);}

}

cout"Hello!"this-m_name":PleaseChooseYourChessType'*'or'#':"endl;

cinm_ChessType;

cin.get();

//如果用戶輸入q,則退出程序

if('q'==m_ChessType){cout"ByeBye"endl;exit(-1);}

//如果鍵盤輸入有誤,或者用戶輸入的棋子團(tuán)不屬于預(yù)其設(shè)的*或#,則要求用戶重新輸入

while(!cin||(m_ChessType!='*'m_ChessType!='#')){

cin.clear();

cin.sync();

cout"Hello!"this-m_name":PleaseChooseYOurChessType'*'or'#'(qtoquit):\n";

cinm_ChessType;

cin.get();

if('q'==m_ChessType){cout"ByeBye!"endl;exit(-1);}

}

//提示用戶輸入落子的坐標(biāo),并判斷是否坐標(biāo)在棋盤上,并把當(dāng)前玩家選擇的棋子圖案字符,填充進(jìn)當(dāng)前輸入的坐標(biāo)

voidPlayer::SetChess()

charx;

chary;

coutthis-m_name":PleaseinputPosition(x,y)ofyourChess.(-,-)toquit"endl;

cinxy;

if('-'==x'-'==y){

cout"ByeBye!"endl;

exit(-1);

}

#if1

if(x='0'x='9'){

m_x=(int)x-48;

}elseif(isupper(x)){

m_x=(int)x-55;

}elseif(islower(x)){

x=toupper(x);

m_x=(int)x-55;

}

if(y='0'y='9'){

m_y=(int)y-48;

}elseif(isupper(y)){

m_y=(int)y-55;

}elseif(islower(y)){

y=toupper(y);

m_y=(int)y-55;

}

m_x=m_x+(1*m_x+1);

m_y=m_y+(1*m_y+1);

#endif

//如果鍵盤數(shù)據(jù)有錯(cuò)誤或者輸入的坐標(biāo)已經(jīng)存在其他棋子

while(!cin||m_ptBoard-cSquare[m_x][m_y]!=''){

cin.clear();

cin.ignore(1024,'\n');

coutthis-m_name":PleaseInputPosition(x,y)ofYourChess.(-,-)toquit"endl;

cinxy;

//根據(jù)所輸入進(jìn)來的行、列角標(biāo)找出相應(yīng)的落子位置,并將操作玩家所對(duì)應(yīng)的棋子符號(hào)填充到該位置(不區(qū)分大小寫)

if('-'==x'-'==y){

cout"ByeBye!"endl;

exit(-1);

}

if(x='0'x='9'){

m_x=(int)x-48;

}elseif(isupper(x)){

m_x=(int)x-55;

}elseif(islower(x)){

x=toupper(x);

m_x=(int)x-55;

}

if(y='0'y='9'){

m_y=(int)y-48;

}elseif(isupper(y)){

//cout"m_y"m_yendl;

m_y=(int)y-55;

//cout"m_y"m_yendl;

}elseif(islower(y)){

y=toupper(y);

m_y=(int)y-55;

}

m_x=m_x+(1*m_x+1);

m_y=m_y+(1*m_y+1);

}

//填充進(jìn)當(dāng)前輸入的坐標(biāo)對(duì)應(yīng)的棋盤的二維數(shù)組單元中

if(isInChessBoard(m_x,m_y)){

m_ptBoard-cSquare[m_x][m_y]=m_ChessType;

}

//判斷是否在水平方向上形成5子連線

boolPlayer::HisLine(intx,inty)const

intnum=0;

for(inti=-8;ii+=2){

if(isInChessBoard(x,y+i)m_ptBoard-cSquare[x][y+i]==m_ChessType){

num++;

if(num==5)

returntrue;

}

else

num=0;

}

returnfalse;

//判斷是否在垂直方向上滿足5子連線

boolPlayer::VisLine(intx,inty)const

intnum=0;

for(inti=-8;ii+=2){

//如果當(dāng)前坐標(biāo)統(tǒng)一行的其他坐標(biāo)在棋盤上,且其他坐標(biāo)的圖案和當(dāng)前玩家的棋子圖案相同,計(jì)數(shù)器雷家

if(isInChessBoard(x+i,y)m_ptBoard-cSquare[x+i][y]==m_ChessType){

num++;

//連續(xù)同一行有5個(gè)坐標(biāo)點(diǎn)的圖案相同時(shí),滿足贏棋的條件

if(num==5)

returntrue;

}

else

num=0;

}

returnfalse;

//判斷是否在自左上角到右下角的方向上滿足5子連線

boolPlayer::LtoBottomisLine(intx,inty)const

intnum=0;

for(inti=-8;ii+=2){

//如果當(dāng)前坐標(biāo)沿自左上角到右下角的對(duì)角線方向的其他

if(isInChessBoard(x+i,y+i)m_ptBoard-cSquare[x+i][y+i]==m_ChessType){

num++;

if(num==5)

returntrue;

}

else

num=0;

}

returnfalse;

//判斷是否在自左下角到右上角的方向上滿足5子連線

boolPlayer::LtoTopisLine(intx,inty)const

intnum=0;

for(inti=-8;ii+=2){

if(isInChessBoard(x-i,y+i)m_ptBoard-cSquare[x-i][y+i]==m_ChessType){

num++;

if(num==5)

returntrue;

}

else

num=0;

}

returnfalse;

boolPlayer::isWin()const

return(HisLine(m_x,m_y)||VisLine(m_x,m_y)||LtoBottomisLine(m_x,m_y)||LtoTopisLine(m_x,m_y))true:false;

}

game.cpp:

#includeiostream

#include"player.h"

#include"chessbo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論