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

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

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

本篇文章给大家谈谈五子棋系统源码,以及五子棋源代码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://2565999.com/post/5667.html

分享给朋友:

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

自带提现系统的传奇打金(打金提现传奇端游)

自带提现系统的传奇打金(打金提现传奇端游)

今天给各位分享自带提现系统的传奇打金的知识,其中也会对打金提现传奇端游进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、可以兑换现金的传奇手游 2、什么传奇...

2022国少女排集训(2021年中国女排集训)

2022国少女排集训(2021年中国女排集训)

今天给各位分享2022国少女排集训的知识,其中也会对2021年中国女排集训进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、女排集训方式有新变化,设立训练营选拔...

如何编写游戏辅助脚本(如何制作游戏辅助脚本)

如何编写游戏辅助脚本(如何制作游戏辅助脚本)

今天给各位分享如何编写游戏辅助脚本的知识,其中也会对如何制作游戏辅助脚本进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、要想写游戏脚本需要学什么? 2、怎...

微信的表白代码大全(微信表白代码大全在线)

微信的表白代码大全(微信表白代码大全在线)

今天给各位分享微信的表白代码大全的知识,其中也会对微信表白代码大全在线进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、微信翻译表白代码 2、微信示爱代码大...

农村外墙瓷砖图片大全新款(农村外墙瓷砖效果图片)

农村外墙瓷砖图片大全新款(农村外墙瓷砖效果图片)

本篇文章给大家谈谈农村外墙瓷砖图片大全新款,以及农村外墙瓷砖效果图片对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、农村外墙瓷砖搭配效果图我家的是两层,低层想用大一点的转,...

怎么看项目是不是ssm框架(ssm框架属于什么开发)

怎么看项目是不是ssm框架(ssm框架属于什么开发)

今天给各位分享怎么看项目是不是ssm框架的知识,其中也会对ssm框架属于什么开发进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、Java项目开发是ssm框架吗...