C++实现简易的五子棋游戏

点击:- 发布时间:2022-05-05 14:58:36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//用c++实现五子棋
#include <iostream>
#include <cstdlib>
#include "getch.h"
 
using namespace std;
 
enum Role{RED=99,BLUE};
 
class Gobang
{
    char board[15][15];
    int key_x,key_y;
    Role role;
public:
    Gobang(int key_x=7,int key_y=7,Role role=RED):key_x(key_x),key_y(key_y),role(role) {}
 
    void start(void)
    {
        for(;;)
        {
            show_board();
 
            get_key();
 
            if(check_key())
            {
                show_board();
                printf("%d\n",role);
                cout << "恭喜" << (role==RED?"红方":"蓝方") << "胜利!" << endl;
                break;
            }
             
            change_role();
        }
    }
 
    // 显示棋盘
    void show_board(void)
    {
        system("clear");
        printf("  ");
        for(int i=0; i<15; i++)
        {
            printf(" %c",'A'+i);
        }
        printf("\n");
 
        for(int x=0; x<15; x++)
        {
            printf("%2d",x+1);
            for(int y=0; y<15; y++)
            {
                if(RED==board[x][y])
                {
                    printf("\33[31m");
                    printf(" @");
                    printf("\33[0m");
                }
                else if(BLUE == board[x][y])
                {
                    printf("\33[34m");
                    printf(" #");
                    printf("\33[0m");
                }
                else
                {
                    printf(" *");
                }
            }
            printf("\n");
        }
    }
  
    // 获取棋子
    void get_key(void)
    {
        for(;;)
        {
            // 设置光标的位置
            printf("\33[%d;%dH",key_x+2,(key_y+2)*2);
            switch(getch())
            {
                case 183: key_x>0 && key_x--; break;
                case 184: key_x<15 && key_x++; break;
                case 185: key_y<15 && key_y++; break;
                case 186: key_y>0 && key_y--; break;
                case 10:if(RED!=board[key_x][key_y] && BLUE!=board[key_x][key_y])
                {
                    board[key_x][key_y] = role;
                    return;
                }
            }
        }
    }
 
    size_t count_key(int off_x,int off_y)
    {
        size_t count = 0;
        for(int x=key_x+off_x,y=key_y+off_y; 
            x>=0 && x<15 && y>=0 && y<15 && board[x][y] == board[key_x][key_y]; x+=off_x,y+=off_y)
        {
            count++;
        }
        return count;
    }
 
    // 检查是否有5子产生
    bool check_key(void)
    {
        if(4 <= count_key(0,-1)+count_key(0,1)) return true;
        if(4 <= count_key(-1,0)+count_key(1,0)) return true;
        if(4 <= count_key(-1,-1)+count_key(1,1)) return true;
        if(4 <= count_key(-1,1)+count_key(1,-1)) return true;
        return false;
    }
 
    // 切换角色
    void change_role(void)
    {
        role = (RED==role?BLUE:RED);
    }
};
 
int main() 
{
    Gobang b;
    b.start();
}

以上就是本文的全部内容,希望对大家的学习有所帮助


相关内容
精彩推荐