摘要:本文主要向大家介绍了C/C++知识点之C语言实现贪吃蛇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言实现贪吃蛇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
用时:150min
项目:贪吃蛇(C语言--数组 结构体实现)
开发工具:vs2013
关键知识:数组,结构体,图形库,键位操作
源代码:
1 #include
2 #include
3 #include
4 #include
5 #include
6
7 #define N 200
8 int i, key;
9 int score = 0;
10 int gamespeed = 500;
11
12 void init(void);
13 void Draw();
14 void Playgame();
15 void Prscore();
16 void Gameover();
17
18 struct Food {
19 int x;
20 int y;
21 int yes;
22 }food;
23
24 struct Snake{
25 int x[N];
26 int y[N];
27 int node;
28 int direcion;
29 int life;
30 }snake;
31
32 void main()
33 {
34 init();
35 Draw();
36 Playgame();
37 _getch();
38 }
39
40 void init(void)
41 {
42 initgraph(640,480);
43 setbkcolor(WHITE);
44 cleardevice();
45 }
46
47 void Draw()
48 {
49 setcolor(BLACK);
50 for (i = 50; i <= 600; i += 10)
51 {
52 rectangle(i, 40, i + 10, 49);
53 rectangle(i, 451, i + 10, 460);
54 }
55 for (i = 40; i <= 450; i += 10)
56 {
57 rectangle(50, i, 59, i + 10);
58 rectangle(601, i, 610, i + 10);
59 }
60 }
61
62 void Playgame()
63 {
64 srand((unsigned)time(NULL));//用时间做种,每次产生的随机数不一样。
65 food.yes = 1;//1表示需要出现食物,0表示已有食物
66 snake.life = 0;//0,活着,1 死亡
67 snake.direcion = 1;
68 snake.x[0] = 100; snake.y[0] = 100;
69 snake.x[1] = 110; snake.y[1] = 100;
70 snake.node = 2;
71 Prscore();
72 while (1)
73 {
74 while (!_kbhit())
75 {
76 if (food.yes == 1)
77 {
78 food.x = rand() % 400 + 60;
79 food.y = rand() % 350 + 60;
80 while (food.x % 10 != 0)
81 food.x++;
82 while (food.y % 10 != 0)
83 food.y++;
84 food.yes = 0;
85 }
86 if (food.yes == 0)
87 {
88 setcolor(RED);
89 rectangle(food.x, food.y, food.x + 10, food.y + 10);
90 }
91 for (i = snake.node - 1; i > 0; i--)
92 {
93 snake.x[i] = snake.x[i - 1];
94 snake.y[i] = snake.y[i - 1];
95 }
96 switch (snake.direcion)
97 {
98 case 1:snake.x[0] += 10; break;
99 case 2:snake.x[0] -= 10; break;
100 case 3:snake.y[0] -= 10; break;
101 case 4:snake.y[0] += 10; break;
102 }
103 for (i = 3; i < snake.node; i++)
104 {
105 if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
106 {
107 Gameover();
108 snake.life = 1;
109 break;
110 }
111 }
112 if (snake.x[0]<55>595 || snake.y[0]<55>455)
113 {
114 Gameover();
115 snake.life = 1;
116 }
117 if (snake.life == 1)
118 break;
119 if (snake.x[0] == food.x&&snake.y[0] == food.y)
120 {
121 setcolor(BLACK);
122 rectangle(food.x, food.y, food.x + 10, food.y + 10);
123 snake.x[snake.node] = -20; snake.y[snake.node] = -20;
124 snake.node++;
125 food.yes = 1;
126 score += 10;
127 Prscore();
128 }
129 setcolor(GREEN);
130 for (i = 0; i < snake.node; i++)
131 rectangle(snake.x[i], snake.y[i],snake.x[i] + 10, snake.y[i] + 10);
132 if (food.yes == 1)
133 {
134 if (gamespeed >= 20)
135 gamespeed -= 10;// 速度最大不超过
136 }
137
138 Sleep(gamespeed);
139 setcolor(WHITE);
140 rectangle(snake.x[snake.node - 1], snake.y[snake.node - 1], snake.x[snake.node-1] + 10, snake.y[snake.node - 1] + 10);
141 }
142 if (snake.life == 1)
143 break;
144 switch (_getch())
145 {
146 case ‘w‘:
147 case ‘W‘:
148 if (snake.direcion != 4)
149 {
150 snake.direcion = 3;
151 }
152 break;
153 case ‘d‘:
154 case ‘D‘:
155 if (snake.direcion != 2)
156 {
157 snake.direcion = 1;
158 }
159 break;
160 case ‘a‘:
161 case ‘A‘:
162 if (snake.direcion != 1)
163 {
164 snake.direcion = 2;
165 }
166 break;
167 case ‘s‘:
168 case ‘S‘:
169 if (snake.direcion != 3)
170 {
171 snake.direcion = 4;
172 }
173 break;
174 }
175 }
176 }
177
178
179 void Prscore()
180 {
181 char str[10];
182 setfillstyle(SOLID_FILL, YELLOW);
183 bar(50, 15, 220, 35);
184 setcolor(6);
185 sprintf_s(str, "score:%d", score);
186 outtextxy(55, 20, str);
187 }
188
189 void Gameover()
190 {
191 cleardevice();
192 setbkcolor(WHITE);
193 Prscore();
194 setcolor(RED);
195 settextstyle(20, 20, "楷体");
196 outtextxy(200, 200, "GAME OVER");
197 _getch();
198 }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号