c语言贪吃蛇代码
时间: 2023-08-24 09:17:10 浏览: 196
以下是一个简单的 C 语言贪吃蛇代码:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define ROW 20 // 行数
#define COL 20 // 列数
#define UP 72 // 上方向键
#define LEFT 75 // 左方向键
#define RIGHT 77 // 右方向键
#define DOWN 80 // 下方向键
int score; // 得分
int speed; // 难度
int fx, fy; // 食物坐标
int headx, heady; // 蛇头坐标
int tailx, taily; // 蛇尾坐标
int bodyx[100], bodyy[100]; // 蛇身坐标
void init(); // 初始化
void draw(); // 画面
void createFood(); // 生成食物
void move(); // 移动
void gameOver(); // 游戏结束
int main()
{
init();
while (1)
{
draw();
move();
Sleep(speed);
}
return 0;
}
void init()
{
score = 0;
speed = 200;
srand((unsigned)time(NULL)); // 随机数种子
headx = rand() % (COL - 2) + 1;
heady = rand() % (ROW - 2) + 1;
tailx = headx - 2;
taily = heady;
createFood();
}
void draw()
{
system("cls"); // 清屏
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 if (i == heady && j == headx)
{
printf("@"); // 蛇头
}
else if (i == fy && j == fx)
{
printf("$"); // 食物
}
else
{
int flag = 0;
for (int k = 0; k < score; k++)
{
if (i == bodyy[k] && j == bodyx[k])
{
printf("*"); // 蛇身
flag = 1;
break;
}
}
if (!flag)
{
printf(" ");
}
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
void createFood()
{
do
{
fx = rand() % (COL - 2) + 1;
fy = rand() % (ROW - 2) + 1;
} while (fx == headx && fy == heady);
}
void move()
{
int ch;
if (_kbhit())
{
ch = _getch();
if (ch == 224)
{
ch = _getch();
}
switch (ch)
{
case UP:
if (heady - 1 != taily)
{
heady--;
}
else
{
gameOver();
}
break;
case DOWN:
if (heady + 1 != taily)
{
heady++;
}
else
{
gameOver();
}
break;
case LEFT:
if (headx - 1 != tailx)
{
headx--;
}
else
{
gameOver();
}
break;
case RIGHT:
if (headx + 1 != tailx)
{
headx++;
}
else
{
gameOver();
}
break;
}
}
if (headx == fx && heady == fy)
{
score++;
createFood();
}
bodyx[0] = tailx;
bodyy[0] = taily;
for (int i = 1; i < score; i++)
{
bodyx[i] = bodyx[i - 1];
bodyy[i] = bodyy[i - 1];
}
tailx = bodyx[score - 1];
taily = bodyy[score - 1];
}
void gameOver()
{
printf("Game Over!\n");
printf("Your Score: %d\n", score);
exit(0);
}
```
这个代码使用了 Windows.h 头文件里的 Sleep 和 kbhit 函数,所以只能在 Windows 系统上运行。如果要在 Linux 系统上运行,需要修改这两个函数。
阅读全文