用C语言编写一个像素贪吃蛇小游戏
时间: 2023-08-21 11:05:02 浏览: 141
好的,我可以为您提供一个简单的像素贪吃蛇小游戏的C语言代码示例:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#define WIDTH 30 // 游戏区域宽度
#define HEIGHT 20 // 游戏区域高度
int score; // 分数
int map[HEIGHT][WIDTH]; // 地图
// 初始化游戏
void initGame()
{
// 初始化地图
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
map[i][j] = 0;
}
}
// 初始化蛇
map[0][0] = 1;
map[0][1] = 2;
map[0][2] = 3;
// 初始化分数
score = 0;
}
// 显示游戏界面
void display()
{
system("cls"); // 清屏
// 绘制游戏区域
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (map[i][j] == 0) {
printf(" ");
} else if (map[i][j] == 1) {
printf("O");
} else {
printf("o");
}
}
printf("\n");
}
// 显示分数
printf("score: %d\n", score);
}
// 移动蛇
void move(int direction)
{
int headX, headY;
int tailX, tailY;
// 找到蛇头和蛇尾
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (map[i][j] == 1) {
headX = j;
headY = i;
} else if (map[i][j] == score + 1) {
tailX = j;
tailY = i;
}
}
}
// 根据方向移动蛇头
if (direction == 0) { // 上
headY--;
} else if (direction == 1) { // 下
headY++;
} else if (direction == 2) { // 左
headX--;
} else if (direction == 3) { // 右
headX++;
}
// 判断是否撞墙或撞到自己
if (headX < 0 || headX >= WIDTH || headY < 0 || headY >= HEIGHT
|| map[headY][headX] != 0) {
printf("Game Over!\n");
exit(0);
}
// 判断是否吃到果子
if (headX == fruitX && headY == fruitY) {
score++;
generateFruit();
} else { // 移动蛇尾
map[tailY][tailX] = 0;
}
// 移动蛇头
map[headY][headX] = 1;
// 移动蛇身
for (int i = score; i > 0; i--) {
for (int j = 0; j < HEIGHT; j++) {
for (int k = 0; k < WIDTH; k++) {
if (map[j][k] == i) {
map[j][k] = i + 1;
}
}
}
}
}
// 随机生成果子
void generateFruit()
{
do {
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
} while (map[fruitY][fruitX] != 0);
}
int main()
{
initGame();
generateFruit();
while (1) {
display();
Sleep(100); // 控制游戏速度
if (_kbhit()) { // 检测按键
int ch = _getch();
if (ch == 72) { // 上
move(0);
} else if (ch == 80) { // 下
move(1);
} else if (ch == 75) { // 左
move(2);
} else if (ch == 77) { // 右
move(3);
}
} else { // 没有按键则继续朝当前方向移动
move(direction);
}
}
return 0;
}
```
这段代码使用了Windows系统下的conio.h库和Windows.h库,其中conio.h库提供了_kbhit()和_getch()函数用于检测并获取用户按键输入,Windows.h库提供了Sleep()函数用于控制游戏速度。建议在Windows系统下编译运行。
阅读全文