本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下
游戏介绍:使用C语言中二维数组和函数的基本知识实现一个三子棋游戏,这个游戏要实现的基本功能有初始化棋盘、棋盘的打印、玩家下棋、电脑下棋、判断输赢。
代码框架:
1.头文件(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
|
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.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 check_win( char board[ROW][COL], int row, int col);
//判断棋盘是否为满
int is_full( char board[ROW][COL], int row, int col);
|
2.函数实现(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
147
|
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.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++)
// {
// //打印数据
// printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
// //打印分割行
// if (i<row-1)
// printf("---|---|---\n");
// }
//}
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)
{
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 ( "玩家走:>" );
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 ;
}
}
}
int is_full( 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 check_win( 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][0] != ' ' )
{
return board[i][0];
}
}
//检测列是否相同
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ' )
{
return board[0][i];
}
}
//检测对角线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ' )
{
return board[0][0];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ' )
{
return board[0][2];
}
//检测是否为平局
if (is_full(board,row,col))
{
return 'Q' ; //平局
}
return ' ' ; //继续玩
}
|
3.测试文件(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
|
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf ( "****************************\n" );
printf ( "********* 1.play *********\n" );
printf ( "********* 0.exit *********\n" );
printf ( "****************************\n" );
}
void game()
{
int x = 0;
int y = 0;
char ret = 0;
//设计三子棋游戏
//数组应该初始化为空格
char board[ROW][COL] = { 0 }; //存储数据
InitBoard(board , ROW , COL); //初始化棋盘--空格
//打印棋盘
DisplayBoard(board,ROW,COL);
while (1)
{
PlayerMove(board,ROW,COL);
if ((ret = check_win(board, ROW, COL)) != ' ' )
break ;
DisplayBoard(board, ROW, COL);
ComputerMove(board,ROW,COL);
if ((ret = check_win(board, ROW, COL)) != ' ' )
break ;
DisplayBoard(board, ROW, COL);
}
if (ret == '*' )
{
printf ( "玩家赢\n" );
}
else if (ret == '#' )
{
printf ( "电脑赢\n" );
}
else if (ret == 'Q' )
{
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:
game();
break ;
case 0:
printf ( "退出游戏\n" );
break ;
default :
printf ( "选择错误\n" );
break ;
}
} while (input);
return 0;
}
|
4.游戏结果示例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/DengLange/article/details/108397834