给一段贪吃蛇的c语言程序
时间: 2023-05-25 09:03:39 浏览: 97
抱歉,作为AI语言模型,不能编写代码。但是,以下是一段简单的贪吃蛇C程序的伪代码,希望能帮到您:
```
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 20
#define COL 30
void Init(int(* arr)[COL], int snake_node[][2], int* snake_length, int* fruit_x, int* fruit_y); // 初始化函数
void Display(int(* arr)[COL]); // 显示函数
void Move(int(* arr)[COL], int snake_node[][2], int* snake_length); // 移动函数
int Check(int(* arr)[COL], int snake_node[][2], int* snake_length, int* fruit_x, int* fruit_y); // 检测函数
void main()
{
int arr[ROW][COL] = { 0 };
int snake_node[ROW*COL][2] = { 0 };
int snake_length = 3;
int fruit_x, fruit_y;
int score = 0;
int key;
srand((unsigned)time(NULL));
Init(arr, snake_node, &snake_length, &fruit_x, &fruit_y);
Display(arr);
while (1)
{
if (_kbhit())
{
key = _getch();
if (key == 27) break;
}
if (Check(arr, snake_node, &snake_length, &fruit_x, &fruit_y) == 1) // 检测是否获胜
{
printf("You win!\n");
break;
}
if (Check(arr, snake_node, &snake_length, &fruit_x, &fruit_y) == -1) // 检测是否失败
{
printf("Game over!\n");
break;
}
Move(arr, snake_node, &snake_length);
Display(arr);
printf("Score: %d\n", score);
Sleep(500); // 暂停一段时间
system("cls"); // 清屏
}
}
void Init(int(* arr)[COL], int snake_node[][2], int* snake_length, int* fruit_x, int* fruit_y)
{
int i, j, k;
*fruit_x = rand() % ROW;
*fruit_y = rand() % COL;
arr[*fruit_x][*fruit_y] = 2;
for (i = 0; i < *snake_length; i++)
{
snake_node[i][0] = ROW / 2 + i; // 初始化蛇头坐标
snake_node[i][1] = COL / 2;
arr[snake_node[i][0]][snake_node[i][1]] = 1; // 蛇的身体设置为1
}
}
void Display(int(* arr)[COL])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (arr[i][j] == 0) printf(" "); // 空格表示空白区域
if (arr[i][j] == 1) printf("*"); // 星号表示蛇的身体
if (arr[i][j] == 2) printf("#"); // 井号表示蛇的食物
}
printf("\n");
}
}
void Move(int(* arr)[COL], int snake_node[][2], int* snake_length)
{
int i;
for (i = *snake_length - 1; i > 0; i--) // 蛇身移动
{
snake_node[i][0] = snake_node[i - 1][0];
snake_node[i][1] = snake_node[i - 1][1];
}
if (arr[snake_node[0][0] - 1][snake_node[0][1]] == 2) // 吃到食物,长度+1
{
(*snake_length)++;
arr[snake_node[0][0] - 1][snake_node[0][1]] = 1;
}
snake_node[0][0]--; // 蛇头移动
arr[snake_node[0][0]][snake_node[0][1]] = 1;
arr[snake_node[*snake_length - 1][0]][snake_node[*snake_length - 1][1]] = 0; // 蛇尾消失
}
int Check(int(* arr)[COL], int snake_node[][2], int* snake_length, int* fruit_x, int* fruit_y)
{
int i;
if (*snake_length == ROW * COL) return 1; // 获胜
if (snake_node[0][0] < 0 || snake_node[0][0] >= ROW || snake_node[0][1] < 0 || snake_node[0][1] >= COL) return -1; // 失败
for (i = 1; i < *snake_length; i++) // 碰撞检测
{
if (snake_node[0][0] == snake_node[i][0] && snake_node[0][1] == snake_node[i][1]) return -1;
}
if (arr[*fruit_x][*fruit_y] == 1) // 蛇占领食物位置,重新生成食物位置
{
*fruit_x = rand() % ROW;
*fruit_y = rand() % COL;
arr[*fruit_x][*fruit_y] = 2;
}
return 0;
}
```
阅读全文