五子棋C++代码

来源:互联网 发布:对于人工智能的看法600 编辑:程序博客网 时间:2024/05/15 23:44

小学期完成老师交代的五子棋游戏,现在把代码上传一下,希望我们老师看到不要以为我是从网上扒的。

class Gobang                                               

{

public:

    Gobang();                                                                              

    void paint();                                           //画棋盘

    void set(intt);                                        //下棋

    int check();                                            //判断是否赢

    int Out(intt);

    void Reset();

private:           

    intM[19][19];                                 //以一个二维的数组来存储棋盘,放置棋子

   

   

};

 

#include<iostream>

#include<cstdlib>

#include<fstream>

#include"gobang.h"

usingnamespace std;

ofstreamfout("gobang.txt");

 

 

voidmain()

{  

    int n;

    Gobang gobang;//对象初始化

    while(1)

    {

        gobang.Reset();//初始化棋盘

        int t = 1;

 

        while(1)//再一次无限循环

        {   system("cls");//调用系统命令清屏

       

            gobang.paint();//清屏之后需要马上绘制棋盘

            if(t)  

              cout<<"黑子: ";

            else   

              cout<<"白子:"; 

            gobang.set(t); 

            if(gobang.check())

                break;//满足if条件语句时跳出循环

            t=!t;

        }

        do{

 

       

        cout<<"1.继续"<<endl;

        cout<<"2.结束"<<endl;

        cin>>n;

 

        }while(n!=1&& n!=2);

        if(n==2)   

            break; 

       

    }

   

 

}

void Gobang::set(int t)//该函数的作用是判断输入的坐标是否合适,以及判断放置棋子

{      

         int a;

         int b;

         cin>>a>>b;

 

         if(a>19||b>16)

         {

                 cout<<"输入错误,请重新输入!"<<endl;

                 cin>>a>>b;

         }

        if(t)              //这里t为1时下黑子,为-1时下白子

            M[a-1][b-1] = 1;

        else  

            M[a-1][b-1] = -1;

     

}

 

 

 

voidGobang::paint()        //绘制棋盘,以及将放置棋子的操作

{

        cout<<"      1 2 3 4 5 6 7 8910111213141516171819"<<endl;

       cout<<"   ┏┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┓";

        for(int i=0;i<19;i++)

        {  

            if(i>=9)

                cout<<"\n"<<i+1<<"┠";

            else

               cout<<"\n "<<i+1<<""<<"┠";

            for(int j=0;j<19;j++)

            {

                switch(M[i][j])

                {

                case 0:

                     cout<<"┼";

                     break;

                case 1:

                     cout<<"●";

                    break;

                case -1:

                    cout<<"○";

                    break;

                }

               

            }

            cout<<"┨";

        }

        cout<<"\n   ┗┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┛    "<<endl;

       

 

       

}

 

 

 

int  Gobang::check()//判断游戏输赢

{

    int s;

    for(int i=15;i>=0;i--)//这块代码是判断斜线五子棋,从左下角一直判断到右上角

        for(int j=0;j<=15;j++)

        {

            s = 0;

            for(int k=0;k<5;k++)

            {

                if(M[i+k][j+k] == 0)

                    break;

                s+=M[i+k][j+k];

                if(Out(s)) 

                    return 1;

            }

        }

    for(int i=0;i<=15;i++)//从左上角判断到右下角

        for(int j=5;j<19;j++)

        {

            s= 0;

            for(int k=0;k<5;k++)

            {

                if(M[i+k][j-k] ==0)

                    break;

                s+=M[i+k][j-k];

                if(Out(s)) 

                    return 1;

            }

        }

    for(int i=0;i<19;i++)//这整个三层的for循环作用是遍历整个棋盘然后找到横向的五个连续的棋子

        for(int j=0;j<15;j++)

        {

            s= 0;

            for(int k=0;k<5;k++)

            {

                if( M[i][j+k] ==0) 

                    break;//跳出最近的for循环

                s+=M[i][j+k];

                if(Out(s)) 

                    return 1;

            }

        }

    for(int i=0;i<19;i++)//判断是否是纵向的五个相同的棋子

        for(int j=0;j<15;j++)

        {

            s =0;

            for(int k=0;k<5;k++)

            {

                if(M[i+k][j] ==0)

                    break;

                s+=M[i+k][j];

                if(Out(s)) 

                    return 1;

            }

        }

   

    return 0;

}

 

intGobang::Out(int t)

{

    if(t == 5)

    {

        cout<<"黑方胜!"<<endl;

        fout<<"黑方胜!\n";

        return 1;

    }

    else if(t == -5)

    {          

       

        cout<<"白方胜!"<<endl;

       fout<<"白方胜!\n";

        return 1;

    }

    return 0;

}

 

voidGobang::Reset()//初始化棋盘

{

        for(int i=0;i<19;i++)

            for(int j=0;j<19;j++)

                M[i][j]=0;                                 

}

Gobang::Gobang()

{

        for(int i=0;i<19;i++)

            for(int j=0;j<19;j++)

                M[i][j]=0;                                     

}

 


0 0