贪吃蛇小游戏C语言代码(最简)
时间: 2023-05-27 08:02:29 浏览: 172
以下是一个简单的在控制台上玩贪吃蛇的C语言代码,仅供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define Width 30 // 地图宽度
#define Height 20 // 地图高度
#define MAX_LENGTH (Width*Height-1) // 蛇的最大长度
#define Up 'w' // 方向键定义
#define Down 's'
#define Left 'a'
#define Right 'd'
// 定义地图
char map[Height][Width] = {' '};
// 定义蛇头和身体的坐标数组
int snakeX[MAX_LENGTH];
int snakeY[MAX_LENGTH];
// 定义蛇的长度和当前分数
int snake_length = 1; // 初始长度为1
int score = 0; // 初始分数为0
// 定义食物的坐标
int foodX, foodY;
// 定义蛇的方向,初始方向向右
char direction = Right;
// 初始化地图
void initMap()
{
// 设置上下边界
for (int y = 0; y < Height; y++) {
map[y][0] = map[y][Width - 1] = '*';
}
// 设置左右边界
for (int x = 0; x < Width; x++) {
map[0][x] = map[Height - 1][x] = '*';
}
}
// 在地图上输出字符
void draw(int x, int y, char c)
{
map[y][x] = c;
printf("%c", c);
}
// 在地图上输出字符串
void drawString(int x, int y, char* str)
{
for (int i = 0; str[i] != '\0'; i++) {
draw(x + i, y, str[i]);
}
}
// 在地图上随机生成食物
void spawnFood()
{
srand(time(NULL));
do {
foodX = rand() % (Width - 2) + 1;
foodY = rand() % (Height - 2) + 1;
} while (map[foodY][foodX] != ' '); // 食物不能出现在蛇或边界的位置
draw(foodX, foodY, '@');
}
// 初始化蛇
void initSnake()
{
snakeX[0] = Width / 2;
snakeY[0] = Height / 2;
draw(snakeX[0], snakeY[0], 'O');
}
// 移动蛇
void move()
{
// 根据方向移动蛇头坐标
switch (direction) {
case Up:
snakeY[0]--;
break;
case Down:
snakeY[0]++;
break;
case Left:
snakeX[0]--;
break;
case Right:
snakeX[0]++;
break;
}
// 判断是否吃到食物
if (snakeX[0] == foodX && snakeY[0] == foodY) {
snake_length++;
score++;
spawnFood();
}
// 消除蛇尾
draw(snakeX[snake_length], snakeY[snake_length], ' ');
// 更新蛇身体坐标
for (int i = snake_length; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
// 更新蛇头
draw(snakeX[0], snakeY[0], 'O');
}
// 判断是否结束游戏
bool isGameOver()
{
// 判断是否撞墙
if (map[snakeY[0]][snakeX[0]] == '*' || snake_length == MAX_LENGTH) {
return true;
}
// 判断是否撞自己
for (int i = 1; i < snake_length; i++) {
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
return true;
}
}
return false;
}
int main()
{
initMap();
initSnake();
spawnFood();
while (1) {
if (_kbhit()) {
char ch = _getch();
// 改变方向,但不能直接掉头
if ((ch == Up && direction != Down) ||
(ch == Down && direction != Up) ||
(ch == Left && direction != Right) ||
(ch == Right && direction != Left))
{
direction = ch;
}
}
move();
if (isGameOver()) {
drawString(Width / 2 - 4, Height / 2, "Game Over");
break;
}
_sleep(200); // 等待一段时间再继续
}
return 0;
}
```
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![c](https://img-home.csdnimg.cn/images/20250102104920.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.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)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)