用c语言写一个贪吃蛇游戏,并提供源代码
时间: 2023-03-20 21:03:05 浏览: 58
很高兴为您解答这个问题!以下是使用C语言编写贪吃蛇游戏的源代码,供您参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define WIDTH 50
#define HEIGHT 20
int score;
int length;
int snakeX[100], snakeY[100];
int foodX, foodY;
int direction;
int gameOver;
void gotoxy(int x, int y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void init() {
srand(time(NULL));
score = 0;
length = 3;
snakeX[0] = WIDTH / 2;
snakeY[0] = HEIGHT / 2;
snakeX[1] = snakeX[0] - 1;
snakeY[1] = snakeY[0];
snakeX[2] = snakeX[1] - 1;
snakeY[2] = snakeY[1];
foodX = rand() % WIDTH;
foodY = rand() % HEIGHT;
direction = 'd';
gameOver = 0;
}
void draw() {
int i, j;
system("cls");
for (i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
for (i = 0; i < HEIGHT; i++) {
printf("#");
for (j = 0; j < WIDTH; j++) {
if (i == snakeY[0] && j == snakeX[0]) {
printf("O");
} else if (i == foodY && j == foodX) {
printf("F");
} else {
int printed = 0;
int k;
for (k = 1; k < length; k++) {
if (i == snakeY[k] && j == snakeX[k]) {
printf("o");
printed = 1;
break;
}
}
if (!printed) {
printf(" ");
}
}
}
printf("#");
printf("\n");
}
for (i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
printf("Score: %d\n", score);
}
void input() {
if (_kbhit()) {
switch (_getch()) {
case 'a':
if (direction != 'd') {
direction = 'a';
}
break;
case 'd':
if (direction != 'a') {
direction = 'd';
}
break;
case 'w':
if (direction != 's') {
direction = 'w';
}
break;
case 's':
if (direction != 'w') {
direction = 's';
}
break;
case 'x':
gameOver = 1;
break;
}
}
}
void logic() {
int i;
int prevX = snakeX[0], prevY = snakeY[0];
int prev2X, prev2Y;
snakeX[0] = snakeX[0] + (direction == 'd' ? 1 : (direction == 'a' ? -1 : 0));
snakeY[0] = snakeY[0] + (direction == 's' ? 1 : (direction == '