#include <iostream>
using namespace std;
void init(char flag[20][20]);//初始化棋盘
void draw(char flag[20][20]);//划出指定棋盘
int test(char flag[20][20],char);//判断是否棋局结束
bool check(int,int);//检查玩家输入坐标是否合法
int main()
{
//设置棋盘大小 ,可以设置成变量 x,y
char flag[20][20];
//初始化数据
char* lp = (char*)flag; for(int i=0; i <400; i++) *lp++ = '|';
draw(flag);
for(int x =0;x <400; )
{//棋盘上总共能乘放下 x*y 个棋子
char i,j;
if(x%4==0)
{
cout < <"请A方走:";
//cin>>i;
//cin>>j;
scanf("%c %c", &i, &j);getchar(); i-='a'; j-='a';
while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子
{
cout < <endl;
cout < <"此地已经有棋子!请重新走:";
cin>>i;
cin>>j;
}
if(check(i,j)==false)
{
cout < <endl;
cout < <"输入坐标不合法!请重新输入:";
cin>>i;
cin>>j;
}
flag[i][j]='X';//指定位置放上棋子
draw(flag);
if(test(flag,'X'))//判断是否获胜(A)
{
char replay;
cout < <"A方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
main();
} else
{
break;
}
}
x+=2;
}else{
cout < <"请B方走:";
//cin>>i;
//cin>>j;
scanf("%c %c", &i, &j);getchar(); i-='a'; j-='a';
while(flag[i][j]=='X'||flag[i][j]=='O')
{
cout < <endl;
cout < <"此地已经有棋子!请重新走:";
cin>>i;
cin>>j;
}
if(check(i,j)==false)
{
cout < <endl;
cout < <"输入坐标不合法!请重新输入:";
cin>>i;
cin>>j;
}
flag[i][j]='O';
draw(flag);
if(test(flag,'O'))//判断是否获胜(B)
{
char replay;
cout < <"B方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
main();
} else
{
break;
}
}
x+=2;
}
}
return 0;
}
int test(char flag[][20],char f){
int mark =0;
for(int i=0;i <15;i++){
for(int j=0;j <15;j++){
if(//判断横着,数着,斜着三种成立情况
(f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j])
||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4])
||(f==flag[i][j]&&f==flag[i+1][j+1]&&f==flag[i+2][j+2]&&f==flag[i+3][j+3]&&f==flag[i+4][j+4]))
{
cout < <endl;
mark =1;
}
}
}
return mark;
}
void draw(char flag[][20] ){
printf(" ");
for(int i=0; i <20; i++) printf("%c ", 'a'+i);
printf("\n");
for(int i=0;i <20;i++){
printf("%c ", 'a'+i);
for(int j=0;j <20;j++){
cout < <"-";
cout < <flag[i][j];
}
cout < <endl;
}
}
bool check(int x,int y){
if(x>20 || y>20 || x <0 || y <0)
return false;
else
return true;
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include"iostream"
using namespace std;
int main()
{
char weizhi[20][20];//定义二维数组用于保存坐标
int c,d,x,y,flag=0;//flag作为标记符号
cout<<"欢迎使用简易的双人对战的五子棋游戏"<<endl<<endl;
//输出棋盘的形状
cout<<"五子棋棋盘如下图所示" <<endl;
cout<<" ";
for(int a=1;a<=10;a++)
cout<<" "<<a<<"";
cout<<endl;
for(a=0;a<=9;a++)
{
if(a<9)
cout<<a+1<<" ";
else
cout<<a+1<<" ";
for(int b=0;b <=9;b++)
{
weizhi[a][b]='-';
cout<<weizhi[a][b]<<" ";
}
cout<<endl;
}
while(flag==0)
{
if(flag==0)
{
cout<<"红方使用符号o,请红方输入您要落子的位置" <<endl;
cout<<"横坐标:";
cin>>x;
cout<<"纵坐标:";
cin>>y;
if(weizhi[x-1][y-1]=='o'||weizhi[x-1][y-1]=='*')
{
cout<<"对不起,您不可以在这里落子"<<endl;
continue;
}//判断是否已经有子了
weizhi[x-1][y-1]='o';
cout<<" ";
for(a=1;a<=10;a++)
cout<<" "<<a<<"";
cout<<endl;
for(int a=0;a<=9;a++)
{
if(a <9)
cout<<a+1<<" ";
else
cout<<a+1<<" ";
for(int b=0;b<=9;b++)
cout<<weizhi[a][b]<<" ";
cout<<endl;
}
}
if(flag==1||flag==9)
break;
for(int e=0;e<=5;e++)
{
for(int f=0;f<=5;f++)
{
if((weizhi[e][f]=='o')+(weizhi[e][f+1]=='o')+(weizhi[e][f+2]=='o')+(weizhi[e][f+3]=='o')+(weizhi[e][f+4]=='o')==5)
flag=1;
if((weizhi[f][e]=='o')+(weizhi[f+1][e]=='o')+(weizhi[f+2][e]=='o')+(weizhi[f+3][e]=='o')+(weizhi[f+4][e]=='o')==5)
flag=1;
if((weizhi[e][f]=='o')+(weizhi[e+1][f+1]=='o')+(weizhi[e+2][f+2]=='o')+(weizhi[e+3][f+3]=='o')+(weizhi[e+4][f+4]=='o')==5)
flag=1;
if((weizhi[e][f]=='o')+(weizhi[e-1][f-1]=='o')+(weizhi[e-2][f-2]=='o')+(weizhi[e-3][f-3]=='o')+(weizhi[e-4][f-4]=='o')==5)
flag=1;
if(flag==1)
break;
if((weizhi[e][f]=='*')+(weizhi[e][f+1]=='*')+(weizhi[e][f+2]=='*')+(weizhi[e][f+3]=='*')+(weizhi[e][f+4]=='*')==5)
flag=9;
if((weizhi[f][e]=='*')+(weizhi[f+1][e]=='*')+(weizhi[f+2][e]=='*')+(weizhi[f+3][e]=='*')+(weizhi[f+4][e]=='*')==5)
flag=9;
if((weizhi[e][f]=='*')+(weizhi[e+1][f+1]=='*')+(weizhi[e+2][f+2]=='*')+(weizhi[e+3][f+3]=='*')+(weizhi[e+4][f+4]=='*')==5)
flag=9;
if((weizhi[e][f]=='*')+(weizhi[e-1][f-1]=='*')+(weizhi[e-2][f-2]=='*')+(weizhi[e-3][f-3]=='*')+(weizhi[e-4][f-4]=='*')==5)
flag=9;
if(flag==9)
break;
}
}
if(flag==0)
{
oop:cout<<"黑方使用符号*,请黑方输入您要落子的位置"<<endl;
cout<<"横坐标:";
cin>>c;
cout<<"纵坐标:";
cin>>d;
if(weizhi[c-1][d-1]=='o'||weizhi[c-1][d-1]=='*')
{
cout<<"对不起,您不可以在这里落子"<<endl;
goto oop;
}//判断是否已经有子了
weizhi[c-1][d-1]='*';
cout<<" ";
for(a=1;a<=10;a++)
cout<<" "<<a<<"";
cout<<endl;
for(int a=0;a<=9;a++)
{
if(a<9)
cout<<a+1<<" ";
else
cout<<a+1<<" ";
for(int b=0;b<=9;b++)
cout<<weizhi[a][b]<<" ";
cout<<endl;
}
}
if(flag==9)
break;
}
if(flag==1)
cout<<"您输了,红方赢得了比赛"<<endl;
else
cout<<"您输了,黑方后走一步,黑方赢得了比赛"<<endl;
system("pause");
return 0;
}
check 函数调用也不对吧?
if只能检查一次输入,如果多次输入错误呢,应该改为while吧
while(check(i,j)==false)
{
cout < <endl;
cout < <"输入坐标不合法!请重新输入:";
cin>>i;
cin>>j;
}
check函数错误,应改为
bool check(int x,int y){
if(x >= 20 || y >= 20 || x < 0 || y < 0)
return false;
else
return true;
}
分享到:
相关推荐
五子棋C++实现 五子棋C++实现 五子棋C++实现 五子棋C++实现
JAVA入门之五子棋——客户端 很短小的五子棋,初学java的作品 c/s架构,此为客户端
JAVA入门之五子棋——服务器 很短小的五子棋,初学java的作品 c/s架构,此为服务器
前段时间有人问有没有简单的编程小游戏,今天给大家分享一个五子棋小游戏的C++小程序,希望大家能喜欢。有问题欢迎随时私聊
这个五子棋的人机对战程序,采用的算法研究了三个月,很有挑战性,希望对大家的学习有帮助
简单的五子棋.c++简单的五子棋.c++简单的五子棋.c++
五子棋 c++ 五子棋 c++ 五子棋 c++
c++代码五子棋
用C++编写的。对于c++初学者有很好的帮助,用C++编写的。对于c++初学者有很好的帮助,
c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋
由C++Builder开发的网络五子棋游戏系统,此程序简单易懂,适合于对网络方面编程初学者的学习和参考,在娱乐中学习
NULL 博文链接:https://1075345532.iteye.com/blog/1882153
人机对战五子棋 c++源码 人机对战五子棋 c++源码 人机对战五子棋 c++源码
五子棋人机博弈的实现
五子棋的C++程序五子棋的C++程序五子棋的C++程序五子棋的C++程序
这是我学CoreJava时,写的一个小程序,虽然很简单,但通过这个程度可以培养你的思维
C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业五子棋源码。C++大作业...
C++游戏编程之五子棋编程列解,很初级的游戏编程。
c++五子棋课程设计,希望对学习c++的同学有帮助,很实用
该报告是继所传程序后的文档说明,一份设计报告。