c语言写贪吃蛇
时间: 2023-07-13 22:16:46 浏览: 117
好的,以下是一个简单的贪吃蛇游戏示例,使用C语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define width 20 // 地图宽度
#define height 20 // 地图高度
int score; // 得分
int gameover; // 游戏结束标记
int headx, heady; // 蛇头坐标
int foodx, foody; // 食物坐标
int tailx[100], taily[100]; // 蛇身坐标
int length; // 蛇身长度
enum direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; // 方向枚举类型
enum direction dir; // 当前方向
void init() // 初始化游戏
{
score = 0;
gameover = 0;
headx = width / 2;
heady = height / 2;
foodx = rand() % width;
foody = rand() % height;
dir = STOP;
length = 0;
}
void draw() // 绘制地图和蛇
{
system("cls"); // 清屏
for (int i = 0; i < width + 2; i++) // 绘制上边界
printf("#");
printf("\n");
for (int i = 0; i < height; i++) // 绘制地图和蛇
{
for (int j = 0; j < width; j++)
{
if (j == 0)
printf("#");
if (i == heady && j == headx) // 绘制蛇头
printf("O");
else if (i == foody && j == foodx) // 绘制食物
printf("X");
else
{
int flag = 0;
for (int k = 0; k < length; k++) // 绘制蛇身
{
if (tailx[k] == j && taily[k] == i)
{
printf("o");
flag = 1;
}
}
if (!flag)
printf(" ");
}
if (j == width - 1)
printf("#");
}
printf("\n");
}
for (int i = 0; i < width + 2; i++) // 绘制下边界
printf("#");
printf("\n");
printf("Score: %d\n", score); // 绘制得分
}
void input() // 处理用户输入
{
if (_kbhit()) // 检测键盘输入
{
switch (_getch()) // 获取输入字符
{
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
gameover = 1;
break;
}
}
}
void logic() // 处理游戏逻辑
{
int prex = tailx[0], prey = taily[0]; // 保存蛇尾
int pre2x, pre2y;
tailx[0] = headx; // 更新蛇身坐标
taily[0] = heady;
for (int i = 1; i < length; i++)
{
pre2x = tailx[i];
pre2y = taily[i];
tailx[i] = prex;
taily[i] = prey;
prex = pre2x;
prey = pre2y;
}
switch (dir) // 更新蛇头坐标
{
case LEFT:
headx--;
break;
case RIGHT:
headx++;
break;
case UP:
heady--;
break;
case DOWN:
heady++;
break;
}
if (headx < 0 || headx >= width || heady < 0 || heady >= height) // 检测是否越界
gameover = 1;
for (int i = 0; i < length; i++) // 检测是否撞到自己
{
if (tailx[i] == headx && taily[i] == heady)
gameover = 1;
}
if (headx == foodx && heady == foody) // 检测是否吃到食物
{
score += 10;
foodx = rand() % width;
foody = rand() % height;
length++;
}
}
int main()
{
init();
while (!gameover)
{
draw();
input();
logic();
Sleep(50); // 控制游戏速度
}
printf("Game Over! Your Score: %d\n", score);
return 0;
}
```
这个示例使用了Windows.h头文件中的Sleep函数来控制游戏速度,Windows平台上可以直接编译运行。如果是其他平台,可能需要使用不同的清屏函数和延时函数。
阅读全文