服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言数组实现三子棋应用实例

C语言数组实现三子棋应用实例

2022-08-16 09:53Yiiiiiiiiiiiiii C/C++

这篇文章主要为大家详细介绍了C语言数组实现三子棋应用实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言数组实现三子棋应用的具体代码,供大家参考,具体内容如下

C语言数组实现三子棋应用实例

三子棋:(拆分部分如下)

test.c 测试游戏逻辑

game.h关于游戏相关的函数声明,符号声明 头文件的包含

game.c游戏相关函数的实现

游戏进行的过程:(4种)

1.玩家获胜--*(游戏结束)

2.电脑获胜--#(游戏结束)

3.平局--Q(游戏结束)

4.游戏继续--C

IsWin函数 用来判断游戏的状态

game.c

?
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include"game.h"
#include<stdio.h>
//初始化棋盘的函数 
void InitBoard(char board[ROW][COL],int row,int col)
{
    int i=0;
    int j=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            board[i][j]=' ';
        }
    }        
 
void DisplayBoard(char board[ROW][COL],int row,int col)
{
    int i=0;
    for(i=0;i<row;i++)
    {
        int j=0;
        for(j=0;j<col;j++)
        {
            printf(" %c ",board[i][j]);
            if(j<col-1)
                printf("|");
        }
        printf("\n");
        if(i<row-1) 
        {
            int j=0;
            for(j=0;j<col;j++)
            {
                printf("---");
                if(j<col-1)
                    printf("|");    
            }
            printf("\n");    
        }
    }
}
 
//玩家下棋 
void PlayerMove(char board[ROW][COL],int row,int col) 
{
    int x=0;
    int y=0;
    printf("玩家走:>\n");
    while(1)
    {
        printf("请输入下棋的坐标:>");
        scanf("%d%d",&x,&y);
        //判断坐标合法性 
        if(x>=1&&x<=row&&y>=1&&y<=col)
        {
            //下棋
            //判断坐标是否被占用
            if(board[x-1][y-1]==' ')
            {
                board[x-1][y-1]='*';
                break;
            
            else
            {
                printf("坐标被占用,请重新输入\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入\n");
        }
    }
}
 
void ComputerMove(char board[ROW][COL],int row,int col)
{
    printf("电脑走:>\n");
    while(1)
    {
        int x=rand()%row;
        int y=rand()%col;
        //判断占用
        if(board[x][y]==' '
        {
            board[x][y]='#';
            break;
        }
}
IsFull(char board[ROW][COL],int row,int col)
{
    int i=0;
    int j=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            if(board[i][j]==' ')
            {
                return 0;//棋盘没满 
            }
        }
    }
    return 1;
    //棋盘满了 
}
 
char IsWin(char board[ROW][COL],int row,int col)
{
    int i=0;
    //判断三行 
    for(i=0;i<row;i++)
    {
        if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')
        {
            return board[i][1];
        }
    }
    //判断三列
    for(i=0;i<ccol;i++)
    {
        if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[1][i]!=' ')
        {
            return board[1][i];
        }
    
    //判断对角线
    if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')
    {
        return board[1][1];
    }
    if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ')
    {
        return board[1][1];
    }
    
    //判断平局--棋盘是否下满,满了返回1,不满返回0
    int ret=IsFull(board,row,col);
    if(ret==1)
    {
        return '0';
    
     
    //继续
    return 'C';     
}

game.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//头文件的包含 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
//符号的定义 
#define ROW 3
#define COL 3
 
//函数的声明
//初始化棋盘 
void InitBoard(char board[ROW][COL],int row,int col);
 
//打印棋盘
void DisplayBoard(char board[ROW][COL],int row,int col); 
 
//玩家下棋 
void PlayerMove(char board[ROW][COL],int row,int col);
 
//电脑下棋
void ComputerMove(char board[ROW][COL],int row,int col);
 
//判断游戏是否出现输赢 
char IsWin(char board[ROW][COL],int row,int col);

test.c

?
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
#include"game.h"//引用头文件 
void menu()
{
    printf("*************************\n");
    printf("*****    1.play    ******\n");
    printf("*****    0.exit    ******\n");
    printf("*************************\n");
}
void game()
{
    //存储数据,二维数组
    char board[ROW][COL]; 
    //初始化棋盘,初始化空格
    InitBoard(board,ROW,COL);
    //打印棋盘--本质为打印数组内容 
    DisplayBoard(board,ROW,COL); 
    char ret=0;//接受游戏状态 
    while(1)
    {
        //玩家下棋
        PlayerMove(board,ROW,COL);
        DisplayBoard(board,ROW,COL);
        //判断玩家是否获胜 
        ret=IsWin(board,ROW,COL);
        if(ret!='C')
            break
        
        //电脑下棋 
        ComputerMove(board,ROW,COL);
        DisplayBoard(board,ROW,COL);
        //判断电脑是否获胜 
        ret=IsWin(board,ROW,COL);
        if(ret!='C')
            break;
    }
    if(ret=='*')
    {
        printf("玩家获胜\n");    
    }
    else if(ret=='#')
    {
        printf("电脑获胜\n");    
    }
    else
    {
        printf("平局\n");    
    }
    DisplayBoard(board,ROW,COL);    
}
int main()
{
    int input=0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            printf("三子棋游戏\n");
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    }while(input);
    
}

C语言数组实现三子棋应用实例

部分游戏界面,如上图所示 

具体思路见代码中注释所示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/m0_62965311/article/details/122387049

延伸 · 阅读

精彩推荐