C++实现简单的控制台小游戏——五子棋

实现控制台的五子棋游戏主要包括三部分内容:

1.绘制五子棋的棋盘;

2.player双方在制定的位置落下棋子;

3.判断是否获胜。

按照这个总体思路,完成控制台程序的代码如下:

绘制棋盘的函数如下(这里实现的是一个16*16的棋盘绘制):

void pan(void)
{
    //1.打印五子棋棋盘的第一行
    for(int i=0;i<17;i++)
    {
        if(0==i)
            cout<<"  ";
        else
            cout<<hex<<i-1<<" ";
    }
    cout<<endl;
    //2.打印五子棋棋盘的剩余内容

    for(int i=0;i<16;i++)
    {
        cout<<hex<<i<<" ";
        for(int j=0;j<16;j++)
        {
            if(0==piece[i][j])
            {
                cout<<"* ";
            }
            else if(1==piece[i][j])
            {
                cprintf("@",10);
                cout<<" ";
            }
            else
            {
                cprintf("0",12);
                cout<<" ";
            }
        }
        cout<<endl;
    }
}

玩家下棋的函数如下:

void play(void)
{
    int player=0;        //代表黑方
    while(1)
    {
        int x,y;        //表示落子坐标
        if(0==player)
        {
            cout<<"请黑方输入落子坐标(坐标值在0-15之间):"<<endl;
            cin>>x>>y;
            piece[x][y]=1;
            //重新绘制棋盘
            pan();
            //判断是否获胜
            if(1==judge(player+1))
            {
                cout<<"黑方获胜,游戏结束!"<<endl;
                break;
            }
            //切换下子方
            player=1;        //代表白方
        }
        if(1==player)
        {
            cout<<"请白方输入落子坐标(坐标值在0-15之间):"<<endl;
            cin>>x>>y;
            piece[x][y]=2;
            //重新绘制棋盘
            pan();
            //判断是否获胜
            if(1==judge(player+1))
            {
                cout<<"白方获胜,游戏结束!"<<endl;
                break;
            }
            //切换下子方
            player=0;
        }
    }
}

判断是否获胜的函数如下:

//判断游戏获胜的函数
int judge(int player)
{
    //1.判断横向
    for(int i=0;i<16;i++)
    {
        for(int j=0;j<12;j++)
        {
            if(piece[i][j] & piece[i][j+1] & piece[i][j+2] & piece[i][j+3] & piece[i][j+4] == player)
                return 1;            //代表游戏获胜
        }
    }
    //2.判断纵向
    for(int i=0;i<16;i++)
    {
        for(int j=0;j<12;j++)
        {
            if(piece[j][i] & piece[j+1][i] & piece[j+2][i] & piece[j+3][i] & piece[j+4][i] == player)
                return 1;            //代表游戏获胜
        }
    }
    //3.判断坐上到右下
    //for(int i=0;i<16;i++)
    //{
        for(int j=0;j<12;j++)
        {
            if(piece[j][j] & piece[j+1][j+1] & piece[j+2][j+2] & piece[j+3][j+3] & piece[j+4][j+4] == player)
                return 1;            //代表游戏获胜
        }
    //}
    //4.判断右上到左下
    for(int j=0;j<12;j++)
    {
        if(piece[j][16-j] & piece[j+1][16-(j+1)] & piece[j+2][16-(j+2)] & piece[j+3][16-(j+3)] & piece[j+4][16-(j+4)] == player)
                return 1;            //代表游戏获胜
    }
    return 0;                    //代表没有获胜
}

主函数如下:

#include<iostream>
using namespace std;

//定义一个维维数组保存棋子的坐标
int piece[16][16];

int main()
{
    //绘制棋盘
    pan();
    //开始游戏
    play();
    system("pause");
    return 0;
}

以上就是完成控制台操作的五子棋游戏主要内容。

另外,如果想在操作控制台时内容显示得更好看点,可以添加下面的函数来改变文本显示得颜色:

void cprintf(char* str, WORD color, ...) {  
    WORD colorOld;  
    HANDLE handle = ::GetStdHandle(STD_OUTPUT_HANDLE);  
    CONSOLE_SCREEN_BUFFER_INFO csbi;  
    GetConsoleScreenBufferInfo(handle, &csbi);  
    colorOld = csbi.wAttributes;  
    SetConsoleTextAttribute(handle, color);  
    cout << str;  
    SetConsoleTextAttribute(handle, colorOld);  
}  

相关属性说明如下:

wAttributes 颜色 对应的值
FOREGROUND_BLUE 字体颜色:蓝 1
FOREGROUND_GREEN 字体颜色:绿 2
FOREGROUND_RED 字体颜色:红 4
FOREGROUND_INTENSITY 前景色高亮显示 8
BACKGROUND_BLUE 背景颜色:蓝 16
BACKGROUND_GREEN 背景颜色:绿 32
BACKGROUND_RED
背景颜色:红
64
BACKGROUND_INTENSITY 背景色高亮显示 128

posted on 2016-11-10 12:19  积跬步---行千里  阅读(2027)  评论(0)    收藏  举报