我是靠谱客的博主 清秀红牛,这篇文章主要介绍C++语言实现开心消消乐,现在分享给大家,希望可以做个参考。

本文实例为大家分享了C++实现开心消消乐的具体代码,供大家参考,具体内容如下

用C++实现的开心消消乐主要分成一个一个模块去实现的,较少代码的耦合性,在这里用了一个xiaoxiaogame类去实现,其中构造函数中对数组和变量的初始化 xiaoxiaogame(int row1, int col1); 用void display();这样一个函数实现显示,用bool isvalid(int x, int y);来判断一个坐标所在的位置能不能消除, 用bool isgameover();判断游戏有没有结束,用void remove(int x, int y, int target);来消除方块,然后用void adjustment()去调试消除方块后的位置 用void playgame();来执行游戏。

代码如下:

复制代码
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
148
149
150
151
152
153
154
155
#include<iostream> #include<string> #include<vector> #include<ctime> using namespace std; class xiaoxiaogame { public: //构造函数中对数组和变量的初始化 xiaoxiaogame(int row1, int col1); //显示 void display(); //判断一个坐标所在的位置能不能消 bool isvalid(int x, int y); //判断游戏有没有结束 bool isgameover(); //用深度遍历去执行消除功能 void remove(int x, int y, int target); //消除方块后剩余方块的摆放位置的调整 void adjustment(); //执行游戏 void playgame(); private: //存放游戏开心消消乐的二维数组 vector<vector<int>>nums; //记录存在的状态 vector<vector<bool>>state; //记录分数 int score; //连在一起的相同数字的个数 int cnt; //开心消消乐的行 int row; //开心消消乐的列 int col; }; xiaoxiaogame::xiaoxiaogame(int row1, int col1) { row = row1; col = col1; score = 0; cnt = 0; srand(time(0)); vector<vector<int>>tmp(row1,vector<int>(col1,0)); vector<vector<bool>>temp(row1, vector<bool>(col1, false)); state = temp; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { tmp[i][j] = rand() % 3; } } nums = tmp; display(); } void xiaoxiaogame::display() { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (!state[i][j]) cout << nums[i][j] << " "; else cout << " "; } cout << endl; } cout << "your score is :" << score << endl; } bool xiaoxiaogame::isvalid(int x, int y) { if (x < 0 || x >= row || y < 0 || y >= col || state[x][y])return false; return true; } bool xiaoxiaogame::isgameover() { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int target = nums[i][j]; int x = i; int y = j; if (!isvalid(i, j))return false; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) return false; } } return true; } void xiaoxiaogame::remove(int x, int y, int target) { if (!isvalid(x, y))return; if (nums[x][y] != target)return; state[x][y] = true; cnt++; remove(x + 1, y, target); remove(x - 1, y, target); remove(x, y + 1, target); remove(x, y - 1, target); } void xiaoxiaogame::adjustment() { for (int j = 0; j < col; j++) { vector<int>tmp; for (int i = row - 1; i >= 0; --i) { if (!state[i][j])tmp.push_back(nums[i][j]); } int r = row - 1; for (int i = 0; i < tmp.size(); i++) { nums[r][j] = tmp[i]; state[r][j] = false; r--; } for (; r >= 0; r--) { state[r][j] = true; } } } void xiaoxiaogame::playgame() { int x, y; while (cin >> x >> y) { if (!isvalid(x, y))continue; int target = nums[x][y]; cnt = 0; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) remove(x, y, target); score += target*cnt; adjustment(); display(); if (isgameover()) { cout << "gameover" << endl; break; } } } int main() { xiaoxiaogame t(10, 10); t.playgame(); cin.get(); return 0; }

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

javascript经典小游戏汇总

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

最后

以上就是清秀红牛最近收集整理的关于C++语言实现开心消消乐的全部内容,更多相关C++语言实现开心消消乐内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部