之前学了些C++的课程,一直想着说编点小游戏,可是MFC又不想学,所以就只能变成控制台的小游戏。
俄罗斯方块一定是很多人小时候玩过的游戏。接下来就说说设计想法。
主要实现,选择游戏的等级,加速下降,不同形状不同颜色,暂停和退出功能。
首先是类的设计。
?
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
|
class Box
{
private :
int map[23][12]; //画面坐标,记录有方块的点,也是游戏界面
int hotpoint[2]; //当前活动的点,所有图形都是以此为基准绘制的
int top; //当前最高位置
int point; //分数
int level; //等级
int ID; //当前活动图形的ID号
int colorID; //图形的颜色ID。
public :
Box() //初始化
{
int i,j;
for (i=0;i<23;i++)
for (j=0;j<12;j++)
map[i][j]=0;
hotpoint[0]=0;
hotpoint[1]=5;
point=0;
level=1;
top=99;
ID=0;
}
void SetColor( int color); //颜色
void DrawMap(); //画游戏的大界面
bool Judge( int x, int y); //判断当前位置能否绘制图形
void Welcome(); //欢迎界面
void DrawBox( int x, int y, int num); //绘制图形
void Redraw( int x, int y, int num); //擦除图形
void Run(); //运行
void Turn(); //转动方块
void UpdataMap(); //更新画面
void Pause(); //暂停
};
|
接下来就是一些常量和光标函数,便于保存和调用
?
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
|
#define A1 0//A代表长条型,B为方块,C为L型,D为闪电型
#define A2 1
#define B 2
#define C11 3
#define C12 4
#define C13 5
#define C14 6
#define C21 7
#define C22 8
#define C23 9
#define C24 10
#define D11 11
#define D12 12
#define D21 13
#define D22 14
void SetPos( int i, int j) //设定光标位置
{
COORD pos={i,j};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
const int sharp[15][8]=
{
{0,0,1,0,2,0,3,0},{0,0,0,1,0,2,0,3},
{0,0,1,0,0,1,1,1},
{0,0,1,0,1,1,1,2},{0,1,1,1,2,0,2,1},{0,0,0,1,0,2,1,2},{0,0,0,1,1,0,2,0},
{1,0,1,1,1,2,0,2},{0,0,0,1,1,1,2,1},{0,0,0,1,0,2,1,0},{0,0,1,0,2,0,2,1},
{0,0,0,1,1,1,1,2},{0,1,1,0,1,1,2,0},
{0,1,0,2,1,0,1,1},{0,0,1,0,1,1,2,1}
}; //形状点的各个坐标,先纵后横
const int high[15]={4,1,2,2,3,2,3,2,3,2,3,2,3,2,3}; //这个数组是用来保存各个形状高度的,以上面的坐标相对应
|
类方法的实现
?
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|