五子棋系统源码(五子棋源代码c++,完美版)
本篇文章给大家谈谈五子棋系统源码,以及五子棋源代码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++,完美版的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。