`

两种不同风格写成的五子棋——C++

 
阅读更多
#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入门之五子棋——客户端 很短小的五子棋,初学java的作品 c/s架构,此为客户端

    JAVA入门之五子棋——服务器

    JAVA入门之五子棋——服务器 很短小的五子棋,初学java的作品 c/s架构,此为服务器

    五子棋.exe——C++程序

    前段时间有人问有没有简单的编程小游戏,今天给大家分享一个五子棋小游戏的C++小程序,希望大家能喜欢。有问题欢迎随时私聊

    Java版五子棋——基础

    根据提供的信息,我们可以总结出以下关于“Java版五子棋——基础”的相关知识点: ### 一、项目概述 本项目为一个基于Java Swing框架开发的五子棋游戏程序。它作为一个简单的实例,可以帮助初学者更好地理解和掌握...

    五子棋C++实现 五子棋C++实现

    在本项目中,我们关注的是一个使用C++编程语言实现的...总的来说,这个五子棋C++实现项目涵盖了C++编程基础、面向对象设计、图形用户界面开发、文件操作、算法应用等多个方面的知识,是一个综合性的编程实践项目。

    五子棋——人机对决(C#版)

    《五子棋——人机对决(C#版)》是一款基于C#编程语言开发的桌面游戏,主要功能是实现玩家与计算机之间的对弈。在这款游戏中,用户可以选择与电脑进行一场智力的较量,体验五子棋的魅力。下面将详细介绍这款程序的...

    五子棋(c++代码)

    c++代码五子棋

    由C++Builder开发的网络五子棋游戏系统

    《C++Builder构建的网络五子棋游戏系统详解》 C++Builder是一款强大的集成开发环境,以其高效、灵活的C++编译器和丰富的VCL(Visual Component Library)组件库而受到开发者们的青睐。本系统利用C++Builder的特性,...

    C#程序设计报告(五子棋——人机对决)

    ### C#程序设计报告(五子棋——人机对决) #### 一、前言 本报告旨在详细介绍一个基于C#语言开发的五子棋人机对战程序的设计思路和技术细节。该程序实现了基本的五子棋游戏逻辑,包括棋盘绘制、落子规则判定、...

    五子棋——Five

    在深入探讨这款游戏的实现细节之前,我们先了解一下五子棋的基本规则:五子棋是两人对弈的游戏,棋盘为15x15的交叉点,双方轮流落子,目标是先形成连续的五个同色棋子(水平、垂直或对角线方向),一方达到此目标即...

    c++课程 五子棋游戏

    c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋 c++游戏五子棋

    gtk五子棋——人机对战(内有代码解说文档和gtk文档)

    标题中的“gtk五子棋——人机对战”是指使用GTK+库开发的一款五子棋游戏,其中包含人机对战的功能。GTK+是用于创建图形用户界面的跨平台库,广泛应用于Linux操作系统,同时也支持其他平台。它采用C语言编写,提供了...

    五子棋——人人对战

    NULL 博文链接:https://1075345532.iteye.com/blog/1882153

    五子棋(C++Builder)

    五子棋是一种双人对弈的策略游戏,双方轮流在棋盘上放置黑白棋子,目标是先连成五子直线(横、竖、斜)的一方获胜。在C++Builder中实现五子棋,涉及到的知识点主要包括: 1. **图形用户界面(GUI)设计**:C++...

    五子棋——人机博弈java代码实现

    五子棋,又称连珠,是一种双人对弈的策略游戏,目标是在棋盘上形成连续的五个同色棋子,无论是横、竖还是斜线。在Java中实现这样的系统,需要涉及到以下几个关键知识点: 1. **图形用户界面(GUI)**:首先,我们需要...

    C++游戏编程之五子棋编程列解

    【C++游戏编程之五子棋编程列解】 在C++编程中开发一款五子棋游戏,是一项初学者常会尝试的项目,因为这能够帮助他们掌握基础的编程概念、对象导向编程以及图形用户界面(GUI)设计。下面将详细解释五子棋游戏的...

    五子棋(C++语言)

    五子棋是一种经典的两人对弈棋类游戏,双方轮流在棋盘上下棋,先连成五子直线(横、竖、斜)者获胜。在这个C++实现的五子棋项目中,开发者通过编程技巧和算法设计,实现了电脑与玩家之间的智能对战。以下是关于这个...

    c++五子棋课设

    在本课程设计中,我们将深入探讨C++编程语言在实现五子棋游戏中的应用。五子棋是一款简单但策略丰富的双人对弈游戏,玩家通过轮流在棋盘上放置黑白棋子,目标是先连成五子直线(横、竖或斜线)的一方获胜。以下是对...

    C++ MFC实现五子棋游戏

    在本文中,我们将深入探讨如何使用C++编程语言和MFC(Microsoft Foundation Classes)库来实现一个五子棋游戏。MFC是微软提供的一套面向对象的类库,用于简化Windows应用程序开发,它封装了许多Win32 API,使得...

Global site tag (gtag.js) - Google Analytics