用c语言打印一个贪吃蛇游戏
时间: 2024-05-07 18:17:34 浏览: 22
好的,下面是用C语言打印一个简单的贪吃蛇游戏的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define ROW 20 //行数
#define COL 30 //列数
#define LENGTH 100 //蛇的最大长度
int score = 0; //得分
int speed = 200; //速度,控制蛇移动的间隔时间
int map[ROW][COL] = {0}; //存储地图信息的数组
int snake[LENGTH + 1][2]; //蛇身的坐标,第1列存放横坐标,第2列存放纵坐标
int head, tail; //头尾指针,用于实现蛇的移动
void initial(); //初始化函数,绘制地图和蛇
void draw(); //绘制地图和蛇
void control(); //控制蛇的移动和用户输入
void produceFood(); //随机产生食物
void updateMap(); //更新地图信息
int main() {
initial();
draw();
produceFood();
control();
return 0;
}
void initial() {
int i, j;
//绘制墙和初始化蛇的位置
for (i = 0; i < ROW; i++) {
map[i][0] = 1; //左墙
map[i][COL - 1] = 1; //右墙
for (j = 0; j < COL; j++) {
if (i == 0 || i == ROW - 1) {
map[i][j] = 1; //上墙和下墙
}
if (i == ROW / 2 && j >= COL / 2 - 3 && j <= COL / 2 + 1) {
snake[j - COL / 2 + 3][0] = i;
snake[j - COL / 2 + 3][1] = j;
}
}
}
//初始化头尾指针
head = 3;
tail = 0;
}
void draw() {
int i, j;
system("cls"); //清屏操作
//绘制地图和蛇
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (map[i][j] == 1) {
printf("*");
}
else if (map[i][j] == 2) {
printf("#");
}
else {
printf(" ");
}
}
printf("\n");
}
}
void control() {
int x = 0, y = 0; //蛇头的位置
char ch = 'a'; //用户输入的键盘字符
//循环移动蛇
while (1) {
x = snake[head][0];
y = snake[head][1];
Sleep(speed); //休眠一段时间,控制蛇移动的速度
//更新蛇头的位置
if (_kbhit()) { //如果有键盘输入
ch = _getch(); //获取用户输入的键盘字符
if (ch == 'w' && map[x - 1][y] == 0) {
x--;
}
else if (ch == 's' && map[x + 1][y] == 0) {
x++;
}
else if (ch == 'a' && map[x][y - 1] == 0) {
y--;
}
else if (ch == 'd' && map[x][y + 1] == 0) {
y++;
}
}
//判断是否吃到食物
if (map[x][y] == 2) {
map[x][y] = 0;
snake[++head][0] = x;
snake[head][1] = y;
score += 10; //加分
produceFood(); //随机产生新的食物
}
else {
//更新蛇身的位置
updateMap();
snake[++head][0] = x;
snake[head][1] = y;
}
//判断是否撞墙或撞到自己的身体
if (map[x][y] == 1 || head - tail >= LENGTH) {
printf("Game Over! Your score is %d.\n", score);
break;
}
draw(); //绘制地图和蛇
}
}
void produceFood() {
int x, y;
srand((unsigned)time(NULL)); //设置随机数种子
do {
x = rand() % ROW;
y = rand() % COL;
} while (map[x][y] != 0);
map[x][y] = 2;
}
void updateMap() {
int i;
map[snake[tail][0]][snake[tail][1]] = 0; //将蛇尾置空
tail++;
}
```
注意:这个代码只是实现了简单的功能,比如随机产生食物、蛇的移动、撞墙和吃到食物等,还有很多功能需要完善和优化,比如蛇移动的动画效果、游戏结束的提示方式等。同时,这个代码也不够安全,有可能会被黑客攻击,所以在实际开发中需要更加严格地进行安全性控制和验证。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)