五子棋java源代码博客园_来来来,五子棋源代码

#include #include

using namespacestd;#define WIDE_AND_LONG 20 //棋盘的长和宽

#define NAME_LEN 20 //输入姓名的长度typedefclassGobang

{public:int InitPlayerName(char *, char *);int CheckInput(char,int);int CheckIndexInput(char, char, char);intGetPlayerName();intInitBoard();int WriteBoard(char, char, bool);intBeginOrNot();intCheckRow();intCheckColumn();intCheckTopLeft();intCheckTopRight();intCheckDownLeft();intCheckDownRight();intCheckDraw();intCheckFinish();intChess();intShowBoard();private:characBoard[WIDE_AND_LONG][WIDE_AND_LONG];characPlayerOneName[NAME_LEN];characPlayerTwoName[NAME_LEN];

}GOBANG;//初始化姓名的缺省值

int GOBANG::InitPlayerName(char *pPlayerOne,char *pPlayerTwo)

{

strcpy(acPlayerOneName,pPlayerOne);

strcpy(acPlayerTwoName,pPlayerTwo);return 0;

}//检查输入姓名时是否含非法字符空格和 Tab键

int GOBANG::CheckInput(char ch, intiNameLen)

{if(' ' == ch || '\t' ==ch)

{

cout<

}if(iNameLen > NAME_LEN - 1)

{

cout<

}return 0;

}//将棋子放到棋盘中

int GOBANG::WriteBoard(char cRow, char cColumn, boolbJudge)

{int iRow = 0;int iColumn = 0;if(cRow >= '0' && cRow <= '9')

{

iRow= static_cast(cRow - '0');

}else if(cRow >= 'A' && cRow <= static_cast('A' + WIDE_AND_LONG - 10 - 1))

{

iRow= static_cast((cRow - 'A') + 10);

}else{

iRow= static_cast((cRow - 'a') + 10);

}if(cColumn >= '0' && cColumn <= '9')

{

iColumn= static_cast(cColumn - '0');

}else if(cColumn >= 'A' && cColumn <= static_cast('A' + WIDE_AND_LONG - 10 - 1))

{

iColumn= static_cast((cColumn - 'A') + 10);

}else{

iColumn= static_cast((cColumn - 'a') + 10);

}if('+' !=acBoard[iRow][iColumn])

{

cout<

}if(!bJudge)

{

acBoard[iRow][iColumn]= static_cast(1);

}else{

acBoard[iRow][iColumn]= static_cast(2);

}return 0;

}//检查坐标输入是否合法

int GOBANG::CheckIndexInput(char cRow,char cSeparator,charcColumn)

{if(!cRow || !cSeparator || !cColumn)

{return -1;

}if(!((cRow >= '0' && cRow <= '9') ||\

(cRow>= 'A' && cRow <= static_cast('A' + WIDE_AND_LONG - 10 - 1)) ||\

(cRow>= 'a' && cRow <= static_cast('a' + WIDE_AND_LONG - 10 - 1)))

)

{return -1;

}if(' ' != cSeparator && '\t' != cSeparator && ',' !=cSeparator)

{return -1;

}if(!((cColumn >= '0' && cColumn <= '9') ||\

(cColumn>= 'A' && cColumn <= static_cast('A' + WIDE_AND_LONG - 10 - 1)) ||\

(cColumn>= 'a' && cColumn <= static_cast('a' + WIDE_AND_LONG - 10 - 1)))

)

{return -1;

}return 0;

}//获取玩家的昵称

intGOBANG::GetPlayerName()

{

fflush(stdin);char cTemp = 0;int iNameLen = 0;

cout<

cTemp=getch();

cout<

{return 0;

}

fflush(stdin);

memset(acPlayerOneName,0,sizeof(acPlayerOneName));

memset(acPlayerTwoName,0,sizeof(acPlayerTwoName));

cout<

{if(-1 ==CheckInput(cTemp,iNameLen))

{

fflush(stdin);

cout<

}

acPlayerOneName[iNameLen]=cTemp;

iNameLen++;

}if(0 ==iNameLen)

{

strcpy(acPlayerOneName,"玩家一");

}

iNameLen= 0;

fflush(stdin);

cout<

{if(-1 ==CheckInput(cTemp,iNameLen))

{

fflush(stdin);

cout<

}

acPlayerTwoName[iNameLen]=cTemp;

iNameLen++;

}if(0 ==iNameLen)

{

strcpy(acPlayerTwoName,"玩家一");

}return 0;

}//初始化棋盘

intGOBANG::InitBoard()

{int iRow = 0;int iColumn = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow++)

{for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{

acBoard[iRow][iColumn]= '+';

}

}return 0;

}//检查棋盘横向是否存在五子连珠

intGOBANG::CheckRow()

{int iRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow ++)

{while(iColumn

{if(static_cast(1) ==acBoard[iRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;

}else if(static_cast(2) ==acBoard[iRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iColumn++;

}if(iPlayerOneLen >= 5)

{return 1;

}if(iPlayerTwoLen >= 5)

{return 2;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘竖向是否存在五子连珠

intGOBANG::CheckColumn()

{int iRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn ++)

{while(iRow

{if(static_cast(1) ==acBoard[iRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;

}else if(static_cast(2) ==acBoard[iRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iRow++;

}if(iPlayerOneLen >= 5)

{return 1;

}if(iPlayerTwoLen >= 5)

{return 2;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iRow= 0;

}return 0;

}//检查棋盘左上方(包括对角线)是否存在五子连珠

intGOBANG::CheckTopLeft()

{int iRow = 0;int iTempRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 4; iRow < WIDE_AND_LONG; iRow ++)

{

iTempRow=iRow;while(iTempRow >= 0)

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow--;

iColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘右上方(包括对角线)是否存在五子连珠

intGOBANG::CheckTopRight()

{int iRow = 0;int iColumn = 0;int iTempColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iColumn = 0; iColumn < WIDE_AND_LONG - 4; iColumn ++)

{

iTempColumn=iColumn;while(iTempColumn

{if(static_cast(1) ==acBoard[iRow][iTempColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iRow][iTempColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iRow++;

iTempColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iRow= 0;

}return 0;

}//检查棋盘左下方(不包括对角线)是否存在五子连珠

intGOBANG::CheckDownLeft()

{int iRow = 0;int iTempRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 1; iRow < WIDE_AND_LONG - 4; iRow ++)

{

iTempRow=iRow;while(iTempRow

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow++;

iColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘右下方(不包括对角线)是否存在五子连珠

intGOBANG::CheckDownRight()

{int iRow = 0;int iTempRow = 0;int iColumn = WIDE_AND_LONG - 1;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 1; iRow < WIDE_AND_LONG - 4; iRow ++)

{

iTempRow=iRow;while(iTempRow

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow++;

iColumn--;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= WIDE_AND_LONG - 1;

}return 0;

}//检查是否平局

intGOBANG::CheckDraw()

{int iRow = 0;int iColumn = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow++)

{for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{if('+' ==acBoard[iRow][iColumn])

{return 1;

}

}

}return 0;

}//检查是否达到结束的条件(五子连珠或平局)

intGOBANG::CheckFinish()

{int iJudgeRow = 0;int iJudgeColumn = 0;int iJudgeTopLeft = 0;int iJudgeTopRight = 0;int iJudgeDownLeft = 0;int iJudgeDownRight = 0;int iJudgeDraw = 0;

iJudgeRow=CheckRow();

iJudgeColumn=CheckColumn();

iJudgeTopLeft=CheckTopLeft();

iJudgeTopRight=CheckTopRight();

iJudgeDownLeft=CheckDownLeft();

iJudgeDownRight=CheckDownRight();

iJudgeDraw=CheckDraw();if(1 == iJudgeRow || 1 == iJudgeColumn || 1 == iJudgeTopLeft || 1 == iJudgeTopRight || 1 == iJudgeDownLeft || 1 ==iJudgeDownRight)

{

cout<获胜!"<

}if(2 == iJudgeRow || 2 == iJudgeColumn || 2 == iJudgeTopLeft || 1 == iJudgeTopRight || 2 == iJudgeDownLeft || 2 ==iJudgeDownRight)

{

cout<获胜!"<

}if(0 ==iJudgeDraw)

{

cout<

}return 0;

}//显示棋盘到控制台

intGOBANG::ShowBoard()

{int iRow = 0;int iColumn = 0;

system("cls");

cout<

{if(9

{

cout<('A' + iRow - 10)<

}else{

cout<

}

}

cout<

{if(9

{

cout<('A' + iRow - 10)<

}else{

cout<

}for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{

cout<

}

cout<

}return 0;

}//开始下棋

intGOBANG::Chess()

{bool bJudge = false;while(1)

{char cRow = 0;char cSeparator = 0;char cColumn = 0;char cTemp = 0;int iLen =1;

fflush(stdin);if(!bJudge)

{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}else{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}while('\n' != (cTemp =getchar()))

{if(iLen > 3)

{

cout<

fflush(stdin);if(!bJudge)

{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}else{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}

iLen= 1;continue;

}if(1 ==iLen)

{

cRow=cTemp;

}else if(2 ==iLen)

{

cSeparator=cTemp;

}else{

cColumn=cTemp;

}

iLen++;

}if(-1 ==CheckIndexInput(cRow,cSeparator,cColumn))

{

cout<

}if(-1 ==WriteBoard(cRow,cColumn,bJudge))

{continue;

}

ShowBoard();if(1 ==CheckFinish())

{

BeginOrNot();

}

bJudge= !bJudge;

}return 0;

}//判断游戏结束后玩家是否选择继续还是退出

intGOBANG::BeginOrNot()

{char cTemp = 0;

cout<

fflush(stdin);

cTemp=getch();if('y' == cTemp || 'Y' ==cTemp)

{

InitBoard();

ShowBoard();

Chess();

}else{

exit(0); //程序的出口

}return 0;

}intmain()

{

GOBANG gobang;

memset(&gobang,0,sizeof(GOBANG));

gobang.InitPlayerName("玩家一","玩家二");

gobang.GetPlayerName();

gobang.InitBoard();

gobang.ShowBoard();

gobang.Chess();return 0;

}//五子棋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值