#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;
}
分享到:
相关推荐
《五子棋——人机对战程序详解》 五子棋是一种深受人们喜爱的双人对弈棋类游戏,其规则简单,但策略深奥,是人工智能领域中的经典研究对象。本文将深入探讨一个实现五子棋人机对战程序的设计与实现,包括算法的选择...
JAVA入门之五子棋——客户端 很短小的五子棋,初学java的作品 c/s架构,此为客户端
JAVA入门之五子棋——服务器 很短小的五子棋,初学java的作品 c/s架构,此为服务器
前段时间有人问有没有简单的编程小游戏,今天给大家分享一个五子棋小游戏的C++小程序,希望大家能喜欢。有问题欢迎随时私聊
根据提供的信息,我们可以总结出以下关于“Java版五子棋——基础”的相关知识点: ### 一、项目概述 本项目为一个基于Java Swing框架开发的五子棋游戏程序。它作为一个简单的实例,可以帮助初学者更好地理解和掌握...
在本项目中,我们关注的是一个使用C++编程语言实现的...总的来说,这个五子棋C++实现项目涵盖了C++编程基础、面向对象设计、图形用户界面开发、文件操作、算法应用等多个方面的知识,是一个综合性的编程实践项目。
《五子棋——人机对决(C#版)》是一款基于C#编程语言开发的桌面游戏,主要功能是实现玩家与计算机之间的对弈。在这款游戏中,用户可以选择与电脑进行一场智力的较量,体验五子棋的魅力。下面将详细介绍这款程序的...
c++代码五子棋
《C++Builder构建的网络五子棋游戏系统详解》 C++Builder是一款强大的集成开发环境,以其高效、灵活的C++编译器和丰富的VCL(Visual Component Library)组件库而受到开发者们的青睐。本系统利用C++Builder的特性,...
### C#程序设计报告(五子棋——人机对决) #### 一、前言 本报告旨在详细介绍一个基于C#语言开发的五子棋人机对战程序的设计思路和技术细节。该程序实现了基本的五子棋游戏逻辑,包括棋盘绘制、落子规则判定、...
在深入探讨这款游戏的实现细节之前,我们先了解一下五子棋的基本规则:五子棋是两人对弈的游戏,棋盘为15x15的交叉点,双方轮流落子,目标是先形成连续的五个同色棋子(水平、垂直或对角线方向),一方达到此目标即...
c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋
标题中的“gtk五子棋——人机对战”是指使用GTK+库开发的一款五子棋游戏,其中包含人机对战的功能。GTK+是用于创建图形用户界面的跨平台库,广泛应用于Linux操作系统,同时也支持其他平台。它采用C语言编写,提供了...
NULL 博文链接:https://1075345532.iteye.com/blog/1882153
五子棋是一种双人对弈的策略游戏,双方轮流在棋盘上放置黑白棋子,目标是先连成五子直线(横、竖、斜)的一方获胜。在C++Builder中实现五子棋,涉及到的知识点主要包括: 1. **图形用户界面(GUI)设计**:C++...
五子棋,又称连珠,是一种双人对弈的策略游戏,目标是在棋盘上形成连续的五个同色棋子,无论是横、竖还是斜线。在Java中实现这样的系统,需要涉及到以下几个关键知识点: 1. **图形用户界面(GUI)**:首先,我们需要...
【C++游戏编程之五子棋编程列解】 在C++编程中开发一款五子棋游戏,是一项初学者常会尝试的项目,因为这能够帮助他们掌握基础的编程概念、对象导向编程以及图形用户界面(GUI)设计。下面将详细解释五子棋游戏的...
五子棋是一种经典的两人对弈棋类游戏,双方轮流在棋盘上下棋,先连成五子直线(横、竖、斜)者获胜。在这个C++实现的五子棋项目中,开发者通过编程技巧和算法设计,实现了电脑与玩家之间的智能对战。以下是关于这个...
在本课程设计中,我们将深入探讨C++编程语言在实现五子棋游戏中的应用。五子棋是一款简单但策略丰富的双人对弈游戏,玩家通过轮流在棋盘上放置黑白棋子,目标是先连成五子直线(横、竖或斜线)的一方获胜。以下是对...
在本文中,我们将深入探讨如何使用C++编程语言和MFC(Microsoft Foundation Classes)库来实现一个五子棋游戏。MFC是微软提供的一套面向对象的类库,用于简化Windows应用程序开发,它封装了许多Win32 API,使得...