用c语言写个贪吃蛇游戏
时间: 2024-02-13 12:05:51 浏览: 165
用C语言写的贪吃蛇游戏
好的,下面是一个简单的贪吃蛇游戏的C语言代码,希望能够帮助你:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define ROW 20
#define COL 30
int snake[ROW * COL][2]; // 记录蛇的位置
int food[2]; // 记录食物的位置
int len = 1; // 记录蛇的长度
int direct = 3; // 记录蛇头的方向
int score = 0; // 记录得分
int speed = 300; // 记录蛇的移动速度
void init(); // 初始化函数
void draw(); // 绘制函数
void move(); // 移动函数
void update(); // 更新函数
void gameover(); // 游戏结束函数
int main()
{
init();
while (1)
{
draw();
move();
update();
if (len == ROW * COL) // 蛇的长度达到最大值,游戏胜利
{
printf("You win!\n");
break;
}
if (snake[0][0] == 0 || snake[0][0] == ROW - 1 || snake[0][1] == 0 || snake[0][1] == COL - 1) // 蛇撞墙,游戏结束
{
gameover();
break;
}
for (int i = 1; i < len; i++) // 蛇头与蛇身相撞,游戏结束
{
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1])
{
gameover();
return 0;
}
}
Sleep(speed);
}
return 0;
}
void init()
{
srand((unsigned)time(NULL));
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) // 周围一圈是墙
{
printf("#");
}
else
{
printf(" ");
}
}
printf("\n");
}
snake[0][0] = ROW / 2;
snake[0][1] = COL / 2;
food[0] = rand() % (ROW - 2) + 1;
food[1] = rand() % (COL - 2) + 1;
printf("Score: %d\n", score);
}
void draw()
{
system("cls");
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (i == food[0] && j == food[1]) // 食物
{
printf("*");
}
else if (i == snake[0][0] && j == snake[0][1]) // 蛇头
{
printf("@");
}
else
{
int flag = 0;
for (int k = 1; k < len; k++) // 蛇身
{
if (i == snake[k][0] && j == snake[k][1])
{
printf("#");
flag = 1;
break;
}
}
if (!flag)
{
printf(" ");
}
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
void move()
{
if (_kbhit()) // 有键盘输入
{
int ch = _getch();
switch (ch)
{
case 'w':
case 'W':
if (direct != 2) // 防止蛇倒退
{
direct = 1;
}
break;
case 'a':
case 'A':
if (direct != 4)
{
direct = 3;
}
break;
case 's':
case 'S':
if (direct != 1)
{
direct = 2;
}
break;
case 'd':
case 'D':
if (direct != 3)
{
direct = 4;
}
break;
default:
break;
}
}
for (int i = len - 1; i > 0; i--) // 蛇身跟随蛇头移动
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
switch (direct) // 根据方向移动蛇头
{
case 1:
snake[0][0]--;
break;
case 2:
snake[0][0]++;
break;
case 3:
snake[0][1]--;
break;
case 4:
snake[0][1]++;
break;
default:
break;
}
}
void update()
{
if (snake[0][0] == food[0] && snake[0][1] == food[1]) // 吃到食物
{
len++;
score += 10;
food[0] = rand() % (ROW - 2) + 1;
food[1] = rand() % (COL - 2) + 1;
if (speed > 100) // 蛇移动速度加快
{
speed -= 10;
}
}
}
void gameover()
{
printf("Game over!\n");
}
```
该游戏使用了 Windows 的控制台窗口进行绘制和输入输出,需要在 Windows 环境下编译运行。
阅读全文