主要的功能:1.上下左右方向键移动。
2.撞墙或者自杀有不同提示。
3.有分数显示。
4.空格暂停。
注意事项:要在vs上运行,且要含easyx。
话不多说见代码:
复制代码
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#undef UNICODE #undef _UNICODE//为了使用outtextxy函数 #define _CRT_SECURE_NO_WARNINGS//为了使用sprintf函数 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h>//随机函数头文件 #include<graphics.h>//easyx里的头文件 /********************* * 坐标属性 * 蛇属性 * 食物属性 **********************/ typedef struct pointXY//坐标属性 { int x; int y; }MYPOINT; struct Snake { int num;//节数 MYPOINT xy[100];//蛇最多100节 char postion;//方向 }snake; struct Food { MYPOINT fdxy;//食物的x,y坐标 int eatgrade; int flag; }food; HWND hwnd = NULL;//表示主窗口 enum movPostion { UP = 72, DOWN = 80, LEFT = 75, RIGHT = 77 }; /*****************************/ void initSnake();//初始化蛇 void drawSnake();//画蛇 void moveSnake();//移动蛇 void keyDown();//按键处理 void initFood(); void drawFood(); void eatFood(); void showGrade();//展示分数 int snakeDie();//蛇死掉 void pauseMoment();//暂停函数 /*****************************/ int main() { srand((unsigned int)time(NULL));//随机函数种子 hwnd = initgraph(640, 480); setbkcolor(WHITE);//设置窗口颜色 initSnake(); while (1) { cleardevice();//刷新 if (food.flag == 0) { initFood(); } drawFood(); drawSnake(); if (snakeDie()) { break; } eatFood(); showGrade(); moveSnake(); while (_kbhit()) { pauseMoment(); keyDown(); } Sleep(100);//多少ms移动一单位 } getchar();//防止闪退 closegraph(); return 0; } void initSnake() { snake.xy[2].x = 0; snake.xy[2].y = 0; snake.xy[1].x = 10; snake.xy[1].y = 0; snake.xy[0].x = 20; snake.xy[0].y = 0; snake.num = 3; snake.postion = RIGHT; food.flag = 0; food.eatgrade = 0; } void drawSnake() { for (int i = 0; i < snake.num; i++) { setlinecolor(BLACK);//矩形边框颜色黑色 setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));//炫彩蛇 fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10); //画矩,写形左上与右下的坐标 } } void moveSnake() { //除了第一节,后的每一节都是前面的坐标 for (int i = snake.num - 1; i > 0; i--) { snake.xy[i].x = snake.xy[i - 1].x; snake.xy[i].y = snake.xy[i - 1].y; } //第一节处理 switch (snake.postion) { case RIGHT: snake.xy[0].x += 10; break; case LEFT: snake.xy[0].x -= 10; break; case DOWN: snake.xy[0].y += 10; break; case UP: snake.xy[0].y -= 10; break; default: break; } } void keyDown() { char userkey = 0; userkey = _getch(); switch (userkey) { case RIGHT: if (snake.postion != LEFT) snake.postion = RIGHT; break; case LEFT: if (snake.postion != RIGHT) snake.postion = LEFT; break; case DOWN: if (snake.postion != UP) snake.postion = DOWN; break; case UP: if (snake.postion != DOWN) snake.postion = UP; break; } } void initFood()//食物的设计 { food.fdxy.x = rand() % 65 * 10;//产生食物坐标为10的倍数 food.fdxy.y = rand() % 48 * 10; food.flag = 1;//食物存在 //如果食物出现在蛇身上,食物重新生成 for(int i = 0; i > snake.num; i++) { if (food.fdxy.x == snake.xy[i].x && food.fdxy.y == snake.xy[i].y) { food.fdxy.x = rand() % 65 * 10; food.fdxy.y = rand() % 48 * 10; } } } void drawFood() { setlinecolor(BLACK); setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(food.fdxy.x, food.fdxy.y, food.fdxy.x + 10, food.fdxy.y + 10); } void eatFood() { //蛇边长,分数增加,食物重新生成 if (snake.xy[0].x == food.fdxy.x && snake.xy[0].y == food.fdxy.y) { snake.num++; food.eatgrade += 10; food.flag = 0; } } int snakeDie() { if (snake.xy[0].x > 640 || snake.xy[0].x < 0 || snake.xy[0].y>480 || snake.xy[0].y < 0) { outtextxy(200, 200, "你撞墙了"); MessageBox(hwnd, "Gameover!", "撞墙警告", MB_OK); return 1;//返回1结束 } for (int i = 1; i < snake.num; i++) { if (snake.xy[0].x == snake.xy[i].x && snake.xy[0].y == snake.xy[i].y) { outtextxy(200, 200, "你撞自己了"); MessageBox(hwnd, "Gameover!", "自杀警告", MB_OK); return 1; } } return 0; } void showGrade() { char grade[100] = "0"; sprintf(grade, "%d", food.eatgrade);//将整形转化为字符串 setbkmode(TRANSPARENT);//设置为透明的方式 settextcolor(LIGHTBLUE);//颜色为青蓝 outtextxy(560, 20, "分数:"); outtextxy(580 + 30, 20, grade); } void pauseMoment() { if (_getch() == 32)//空格暂停 { while (_getch() != 32); } }
最后
以上就是活力楼房最近收集整理的关于c语言程序设计:贪吃蛇的全部内容,更多相关c语言程序设计内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复