写一段小游戏贪吃蛇代码
时间: 2023-03-26 08:02:44 浏览: 68
很高兴回答你的问题。以下是一个简单的贪吃蛇游戏的代码,希望对你有所帮助:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define MAX_X 20
#define MAX_Y 20
int snake[MAX_X * MAX_Y][2];
int food[2];
int score = ;
int length = 1;
int direction = 1; // 1: up, 2: right, 3: down, 4: left
void init();
void draw();
void update();
void generate_food();
int main()
{
init();
while (1) {
if (_kbhit()) {
char ch = _getch();
if (ch == 'w' && direction != 3) direction = 1;
if (ch == 'd' && direction != 4) direction = 2;
if (ch == 's' && direction != 1) direction = 3;
if (ch == 'a' && direction != 2) direction = 4;
}
update();
draw();
Sleep(100);
}
return ;
}
void init()
{
snake[][] = MAX_X / 2;
snake[][1] = MAX_Y / 2;
generate_food();
}
void draw()
{
system("cls");
for (int i = ; i < MAX_X; i++) {
for (int j = ; j < MAX_Y; j++) {
if (i == food[] && j == food[1]) {
printf("F");
} else {
int flag = ;
for (int k = ; k < length; k++) {
if (snake[k][] == i && snake[k][1] == j) {
printf("S");
flag = 1;
break;
}
}
if (!flag) printf(" ");
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
void update()
{
int head[2] = {snake[][], snake[][1]};
switch (direction) {
case 1: head[]--; break;
case 2: head[1]++; break;
case 3: head[]++; break;
case 4: head[1]--; break;
}
if (head[] < || head[] >= MAX_X || head[1] < || head[1] >= MAX_Y) {
printf("Game over!\n");
exit();
}
for (int i = 1; i < length; i++) {
if (head[] == snake[i][] && head[1] == snake[i][1]) {
printf("Game over!\n");
exit();
}
}
if (head[] == food[] && head[1] == food[1]) {
score++;
length++;
generate_food();
}
for (int i = length - 1; i > ; i--) {
snake[i][] = snake[i - 1][];
snake[i][1] = snake[i - 1][1];
}
snake[][] = head[];
snake[][1] = head[1];
}
void generate_food()
{
int x, y;
do {
x = rand() % MAX_X;
y = rand() % MAX_Y;
} while (x == snake[][] && y == snake[][1]);
food[] = x;
food[1] = y;
}