说到三子棋,我想大家一定不陌生吧,它也是我童年中的一部分,今天我们用C语言来实现一下简易版的三子棋。
首先,介绍一下游戏规则:
1.在一个九宫格上进行下棋;
2.玩家两名,双方先后落子;
3.若在一条直线上有三颗同一玩家的棋子,则该玩家赢,若棋盘下满也没有出现三颗棋子在一条直线上,则为平局。
设计思路如下:
1.用do…while循环可以保证玩完一把还能接着玩,玩家可以自行选择继续玩还是退出。
2.用一个3x3的二维数组来存放玩家和电脑下的棋子,再进行判断输赢。
3.进行游戏的棋盘如下:
代码如下:
头文件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
25
26
27
28#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); //判断游戏输赢 //要返回4种不同的状态 //玩家赢 - '*' //电脑赢 - '#' //平局 - ‘Q' //继续 - 'C'
测试文件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
74
75#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"); } } int main() { int input = 0; srand((unsigned)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; }
game函数里的函数,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#include"game.h" void InitBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = ' '; } } } void DisplayBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { //打印数据 for (int j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j < col - 1) printf("|"); } printf("n"); //打印分割行 if (i < row - 1) { for (int j = 0; j < col; j++) { printf("---"); if (j < col - 1) printf("|"); } } printf("n"); } } void PlayerMove(char board[ROW][COL], int row, int col) { printf("玩家走:>n"); int x = 0; int y = 0; while (1) { printf("请输入坐标:>"); scanf("%d%d", &x, &y);//2 1 表示第二行第一列 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) { int x = 0; int y = 0; printf("电脑走:>n"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } int IsFull(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0;//不满 } } } return 1;//棋盘满 } char IsWin(char board[ROW][COL], int row, int col) { //行 for (int 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 (int 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[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]; //判断平局 if (IsFull(board, row, col)) { return 'Q'; } //游戏继续 return 'C'; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是畅快发卡最近收集整理的关于基于C语言实现三子棋游戏的全部内容,更多相关基于C语言实现三子棋游戏内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复