用c语言做一个贪吃蛇代码
时间: 2024-05-04 18:19:07 浏览: 19
以下是一个简单的贪吃蛇游戏的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define MAX_X 20
#define MAX_Y 20
int map[MAX_X][MAX_Y]; // 地图
int length = 3; // 蛇的初始长度
int direction = 'd'; // 蛇的初始方向,d 表示向右
// 初始化地图
void init_map() {
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
if (i == 0 || i == MAX_X - 1 || j == 0 || j == MAX_Y - 1) {
map[i][j] = -1; // 边界
} else {
map[i][j] = 0; // 空格
}
}
}
}
// 初始化蛇
void init_snake() {
int x = MAX_X / 2;
int y = MAX_Y / 2;
for (int i = 0; i < length; i++) {
map[x][y + i] = length - i; // 蛇的身体用数字表示,数字越大表示离蛇头越远
}
}
// 显示地图
void show_map() {
system("cls"); // 清屏
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
switch (map[i][j]) {
case -1:
printf("#"); // 边界
break;
case 0:
printf(" "); // 空格
break;
default:
printf("*"); // 蛇的身体
break;
}
}
printf("\n");
}
}
// 蛇的移动
void move_snake() {
int hx, hy; // 蛇头的坐标
int tx, ty; // 蛇尾的坐标
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
if (map[i][j] == 1) {
hx = i;
hy = j;
}
if (map[i][j] == length) {
tx = i;
ty = j;
}
}
}
// 蛇身体移动
for (int i = length; i > 1; i--) {
int x, y;
for (int j = 0; j < MAX_X; j++) {
for (int k = 0; k < MAX_Y; k++) {
if (map[j][k] == i - 1) {
x = j;
y = k;
break;
}
}
}
map[x][y] = i;
}
// 蛇头移动
switch (direction) {
case 'w':
hx--;
break;
case 's':
hx++;
break;
case 'a':
hy--;
break;
case 'd':
hy++;
break;
}
// 判断是否撞墙或撞到自己
if (map[hx][hy] == -1 || map[hx][hy] > 0) {
printf("Game over!\n");
exit(0);
}
// 判断是否吃到食物
if (map[hx][hy] == -2) {
length++;
map[hx][hy] = length;
int fx, fy;
do {
fx = rand() % (MAX_X - 2) + 1;
fy = rand() % (MAX_Y - 2) + 1;
} while (map[fx][fy] != 0);
map[fx][fy] = -2;
} else {
map[hx][hy] = 1;
map[tx][ty] = 0;
}
}
// 获取键盘输入
void get_input() {
if (_kbhit()) {
char c = _getch();
if ((c == 'w' || c == 's' || c == 'a' || c == 'd') &&
((c != 'w' && c != 's' && direction != 'w' && direction != 's') ||
(c != 'a' && c != 'd' && direction != 'a' && direction != 'd'))) {
direction = c;
}
}
}
int main() {
init_map();
init_snake();
int fx, fy;
do {
fx = rand() % (MAX_X - 2) + 1;
fy = rand() % (MAX_Y - 2) + 1;
} while (map[fx][fy] != 0);
map[fx][fy] = -2; // 食物用 -2 表示
while (1) {
show_map();
move_snake();
get_input();
Sleep(100);
}
return 0;
}
```
这个代码使用了 Windows.h 头文件中的 Sleep 函数,需要在 Windows 系统中编译运行。如果在其他系统中编译运行,需要将 Sleep 函数替换为 usleep 函数或其他等待函数。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)