当前位置:首页 > 网站源码 > 正文内容

五子棋系统源码(五子棋源代码c++,完美版)

网站源码2年前 (2023-03-06)465

本篇文章给大家谈谈五子棋系统源码,以及五子棋源代码c++,完美版对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用C++编写的小游戏源代码

五子棋的代码:

#includeiostream

#includestdio.h

#includestdlib.h

#includetime.h

usingnamespacestd;

constintN=15;         //15*15的棋盘

constcharChessBoardflag='';     //棋盘标志

constcharflag1='o';       //玩家1或电脑的棋子标志

constcharflag2='X';       //玩家2的棋子标志

typedefstructCoordinate     //坐标类

{

intx;             //代表行

inty;             //代表列

}Coordinate;

classGoBang          //五子棋类

{

public:

GoBang()        //初始化

{

InitChessBoard();

}

voidPlay()        //下棋

{

CoordinatePos1;   //玩家1或电脑

CoordinatePos2;   //玩家2

intn=0;

while(1)

{

intmode=ChoiceMode();

while(1)

{

if(mode==1)    //电脑vs玩家

{

ComputerChess(Pos1,flag1);   //电脑下棋

if(GetVictory(Pos1,0,flag1)==1)   //0表示电脑,真表示获胜

break;

PlayChess(Pos2,2,flag2);   //玩家2下棋

if(GetVictory(Pos2,2,flag2))   //2表示玩家2

break;

}

else      //玩家1vs玩家2

{

PlayChess(Pos1,1,flag1);   //玩家1下棋

if(GetVictory(Pos1,1,flag1))   //1表示玩家1

break;

PlayChess(Pos2,2,flag2);   //玩家2下棋

if(GetVictory(Pos2,2,flag2)) //2表示玩家2

break;

}

}

cout"***再来一局***"endl;

cout"yorn:";

charc='y';

cinc;

if(c=='n')

break;

}

}

protected:

intChoiceMode()      //选择模式

{

inti=0;

system("cls");    //系统调用,清屏

InitChessBoard();    //重新初始化棋盘

cout"***0、退出 1、电脑vs玩家 2、玩家vs玩家***"endl;

while(1)

{

cout"请选择:";

cini;

if(i==0)     //选择0退出

exit(1);

if(i==1||i==2)

returni;

cout"输入不合法"endl;

}

}

voidInitChessBoard()   //初始化棋盘

{

for(inti=0;iN+1;++i)

{

for(intj=0;jN+1;++j)

{

_ChessBoard[i][j]=ChessBoardflag;

}

}

}

voidPrintChessBoard()  //打印棋盘,这个函数可以自己调整

{

system("cls");        //系统调用,清空屏幕

for(inti=0;iN+1;++i)

{

for(intj=0;jN+1;++j)

{

if(i==0)                //打印列数字

{

if(j!=0)

printf("%d ",j);

else

printf("  ");

}

elseif(j==0)        //打印行数字

printf("%2d",i);

else

{

if(iN+1)

{

printf("%c|",_ChessBoard[i][j]);

}

}

}

coutendl;

cout"  ";

for(intm=0;mN;m++)

{

printf("--|");

}

coutendl;

}

}

voidPlayChess(Coordinatepos,intplayer,intflag)    //玩家下棋

{

PrintChessBoard();     //打印棋盘

while(1)

{

printf("玩家%d输入坐标:",player);

cinpos.xpos.y;

if(JudgeValue(pos)==1)     //坐标合法

break;

cout"坐标不合法,重新输入"endl;

}

_ChessBoard[pos.x][pos.y]=flag;

}

voidComputerChess(Coordinatepos,charflag)    //电脑下棋

{

PrintChessBoard();     //打印棋盘

intx=0;

inty=0;

while(1)

{

x=(rand()%N)+1;   //产生1~N的随机数

srand((unsignedint)time(NULL));

y=(rand()%N)+1;   //产生1~N的随机数

srand((unsignedint)time(NULL));

if(_ChessBoard[x][y]==ChessBoardflag)   //如果这个位置是空的,也就是没有棋子

break;

}

pos.x=x;

pos.y=y;

_ChessBoard[pos.x][pos.y]=flag;

}

intJudgeValue(constCoordinatepos)    //判断输入坐标是不是合法

{

if(pos.x0pos.x=Npos.y0pos.y=N)

{

if(_ChessBoard[pos.x][pos.y]==ChessBoardflag)

{

return1;  //合法

}

}

return0;    //非法

}

intJudgeVictory(Coordinatepos,charflag)      //判断有没有人胜负(底层判断)

{

intbegin=0;

intend=0;

intbegin1=0;

intend1=0;

//判断行是否满足条件

(pos.y-4)0?begin=(pos.y-4):begin=1;

(pos.y+4)N?end=N:end=(pos.y+4);

for(inti=pos.x,j=begin;j+4=end;j++)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i][j+1]==flag

_ChessBoard[i][j+2]==flag_ChessBoard[i][j+3]==flag

_ChessBoard[i][j+4]==flag)

return1;

}

//判断列是否满足条件

(pos.x-4)0?begin=(pos.x-4):begin=1;

(pos.x+4)N?end=N:end=(pos.x+4);

for(intj=pos.y,i=begin;i+4=end;i++)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j]==flag

_ChessBoard[i+2][j]==flag_ChessBoard[i+3][j]==flag

_ChessBoard[i+4][j]==flag)

return1;

}

intlen=0;

//判断主对角线是否满足条件

pos.xpos.y?len=pos.y-1:len=pos.x-1;

if(len4)

len=4;

begin=pos.x-len;    //横坐标的起始位置

begin1=pos.y-len;   //纵坐标的起始位置

pos.xpos.y?len=(N-pos.x):len=(N-pos.y);

if(len4)

len=4;

end=pos.x+len;    //横坐标的结束位置

end1=pos.y+len;   //纵坐标的结束位置

for(inti=begin,j=begin1;(i+4=end)(j+4=end1);++i,++j)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j+1]==flag

_ChessBoard[i+2][j+2]==flag_ChessBoard[i+3][j+3]==flag

_ChessBoard[i+4][j+4]==flag)

return1;

}

//判断副对角线是否满足条件

(pos.x-1)(N-pos.y)?len=(N-pos.y):len=pos.x-1;

if(len4)

len=4;

begin=pos.x-len;    //横坐标的起始位置

begin1=pos.y+len;   //纵坐标的起始位置

(N-pos.x)(pos.y-1)?len=(pos.y-1):len=(N-pos.x);

if(len4)

len=4;

end=pos.x+len;    //横坐标的结束位置

end1=pos.y-len;   //纵坐标的结束位置

for(inti=begin,j=begin1;(i+4=end)(j-4=end1);++i,--j)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j-1]==flag

_ChessBoard[i+2][j-2]==flag_ChessBoard[i+3][j-3]==flag

_ChessBoard[i+4][j-4]==flag)

return1;

}

for(inti=1;iN+1;++i)      //棋盘有没有下满

{

for(intj=1;jN+1;++j)

{

if(_ChessBoard[i][j]==ChessBoardflag)

return0;           //0表示棋盘没满

}

}

return-1;   //和棋

}

boolGetVictory(Coordinatepos,intplayer,intflag)  //对JudgeVictory的一层封装,得到具体那个玩家获胜

{

intn=JudgeVictory(pos,flag);  //判断有没有人获胜

if(n!=0)          //有人获胜,0表示没有人获胜

{

PrintChessBoard();

if(n==1)        //有玩家赢棋

{

if(player==0)   //0表示电脑获胜,1表示玩家1,2表示玩家2

printf("***电脑获胜***\n");

else

printf("***恭喜玩家%d获胜***\n",player);

}

else

printf("***双方和棋***\n");

returntrue;   //已经有人获胜

}

returnfalse;  //没有人获胜

}

private:

char_ChessBoard[N+1][N+1];

};

扩展资料:

设计思路

1、进行问题分析与设计,计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始。

2、比赛结束后初始化棋盘,询问是否继续比赛或退出,后续可加入复盘、悔棋等功能。

3、整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象。

找五子棋源代码c++

#include "iostream"

#include iomanip

using namespace std;

const int M=20;

const int N=20;

int main()

{

char weizhi[M][N];

int k,i,j,x,y,flag=0;

cout"欢迎使用简易双人对战五子棋游戏"endl;

cout"五子棋棋谱如下:"endl;

for(k=0;k=N;k++)

coutsetw(3)setfill(' ')k;

coutendl;

for(i=1;i=M;i++)

{

coutsetw(3)setfill(' ')i;

for(j=1;j=N;j++)

{

weizhi[i][j]='-';

coutsetw(3)setfill(' ')weizhi[i][j];

}

coutendl;

}

while(flag==0)

{

//红方落子

cout"请红方输入落子位置:"endl;

loop1:

cout"请输入落子的行数:";

cinx;

cout"请输入落子的列数:";

ciny;

if(weizhi[x][y]=='-')

{

weizhi[x][y]='*';

for(k=0;k=N;k++)

coutsetw(3)setfill(' ')k;

coutendl;

for(i=1;i=M;i++)

{

coutsetw(3)setfill(' ')i;

for(j=1;j=N;j++)

coutsetw(3)setfill(' ')weizhi[i][j];

coutendl;

}

}

else

{

cout"你不能在这落子,请重新选择落子位置:"endl;

goto loop1;

}

//判断胜利

for(i=1;i=M-4;i++)

{

for(j=1;j=N-4;j++)

{

if(weizhi[i][j]=='*' weizhi[i][j+1]=='*' weizhi[i][j+2]=='*' weizhi[i][j+3]=='*' weizhi[i][j+4]=='*')

{

cout"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(weizhi[i][j]=='*' weizhi[i+1][j]=='*' weizhi[i+2][j]=='*' weizhi[i+3][j]=='*' weizhi[i+4][j]=='*')

{

cout"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(weizhi[i][j]=='*' weizhi[i+1][j+1]=='*' weizhi[i+2][j+2]=='*' weizhi[i+3][j+3]=='*' weizhi[i+4][j+4]=='*')

{

cout"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(flag==1)

break;

}

}

//蓝方落子

cout"请蓝方输入落子位置:"endl;

loop2:

cout"请输入落子的行数:";

cinx;

cout"请输入落子的列数:";

ciny;

if(weizhi[x][y]=='-')

{

weizhi[x][y]='#';

for(k=0;k=N;k++)

coutsetw(3)setfill(' ')k;

coutendl;

for(i=1;i=M;i++)

{

coutsetw(3)setfill(' ')i;

for(j=1;j=N;j++)

coutsetw(3)setfill(' ')weizhi[i][j];

coutendl;

}

}

else

{

cout"你不能在这落子,请重新选择落子位置:";

goto loop2;

}

//判断胜利

for(i=1;i=M-4;i++)

{

for(j=1;j=N-4;j++)

{

if(weizhi[i][j]=='#' weizhi[i][j+1]=='#' weizhi[i][j+2]=='#' weizhi[i][j+3]=='#' weizhi[i][j+4]=='#')

{

cout"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(weizhi[i][j]=='#' weizhi[i+1][j]=='#' weizhi[i+2][j]=='#' weizhi[i+3][j]=='#' weizhi[i+4][j]=='#')

{

cout"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(weizhi[i][j]=='#' weizhi[i+1][j+1]=='#' weizhi[i+2][j+2]=='#' weizhi[i+3][j+3]=='#' weizhi[i+4][j+4]=='#')

{

cout"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"endl;

flag=1;

break;

}

if(flag==1)

break;

}

}

}

return 0;

}

我运行过,没有错误.

五子棋源代码html

js代码:

定义canvas及黑白棋变量

font color="#2f4f4f" face="微软雅黑" size="3"var canvas;

var context;

var isWhite = true;//设置是否该轮到白棋

var isWell = false;//设置该局棋盘是否赢了,如果赢了就不能再走了

var img_b = new Image();

img_b.src = "images/b.png";//白棋图片

var img_w = new Image();

img_w.src = "images/c.png";//黑棋图片/font

为棋盘的二维数组用来保存棋盘信息

font color="#2f4f4f" face="微软雅黑" size="3" var chessData = new Array(15);//初始化0为没有走过的,1为白棋走的,2为黑棋走的

for (var x = 0; x 15; x++) {

chessData[x] = new Array(15);

for (var y = 0; y 15; y++) {

chessData[x][y] = 0;

}

}/font

绘制棋盘的线

font color="#2f4f4f" face="微软雅黑" size="3" for (var i = 0; i = 640; i += 40) {

context.beginPath();

context.moveTo(0, i);

context.lineTo(640, i);

context.closePath();

context.stroke();

context.beginPath();

context.moveTo(i, 0);

context.lineTo(i, 640);

context.closePath();

context.stroke();

}

}/font

判断该棋局的输赢

font color="#2f4f4f" face="微软雅黑" size="3" if (count1 = 5 || count2 = 5 || count3 = 5 || count4 = 5) {

if (chess == 1) {

alert("白棋赢了");

}

else {

alert("黑棋赢了");

}

isWell = true;//设置该局棋盘已经赢了,不可以再走了

}/font

html代码:

font color="#2f4f4f" face="微软雅黑" size="3"body onload="drawRect()"

div

canvas width="640" id="canvas" onmousedown="play(event)" height="640"你的浏览器不支持HTML5 canvas ,请使用 google chrome 浏览器 打开.

/canvas

/div

/body/font

关于五子棋系统源码和五子棋源代码c++,完美版的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

扫描二维码推送至手机访问。

版权声明:本文由我的模板布,如需转载请注明出处。


本文链接:http://sdjcht.com/post/5667.html

分享给朋友:

“五子棋系统源码(五子棋源代码c++,完美版)” 的相关文章

手机设备物理地址怎么看(手机的物理地址是什么)

手机设备物理地址怎么看(手机的物理地址是什么)

本篇文章给大家谈谈手机设备物理地址怎么看,以及手机的物理地址是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、什么叫手机的mac地址? 2、怎么查手机设备的mac地...

聚宝斋交易平台(聚宝斋交易平台安全吗)

聚宝斋交易平台(聚宝斋交易平台安全吗)

今天给各位分享聚宝斋交易平台的知识,其中也会对聚宝斋交易平台安全吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、苹果手机聚宝斋关闭 2、问道手游聚宝斋的...

华为手机隐藏指令代码大全(华为手机的隐藏代码大全)

华为手机隐藏指令代码大全(华为手机的隐藏代码大全)

今天给各位分享华为手机隐藏指令代码大全的知识,其中也会对华为手机的隐藏代码大全进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、华为智能手机如何开启隐藏备用电源...

怎么获取应用的源代码(怎么获取手机软件的源代码)

怎么获取应用的源代码(怎么获取手机软件的源代码)

今天给各位分享怎么获取应用的源代码的知识,其中也会对怎么获取手机软件的源代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、如何找到软件的源代码 2、如何...

圣都家装全包怎么样(圣都家装整装专家)

圣都家装全包怎么样(圣都家装整装专家)

今天给各位分享圣都家装全包怎么样的知识,其中也会对圣都家装整装专家进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、请问找圣都装饰全包合适吗? 2、圣都装饰...

国家共享资源平台网站(全国公共资源共享中心)

国家共享资源平台网站(全国公共资源共享中心)

本篇文章给大家谈谈国家共享资源平台网站,以及全国公共资源共享中心对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、国家资源共享网站 2、教育部资源共享的网址 3、外交...