实现一个简单的贪吃蛇游戏可以分为以下几个步骤:
1. 初始化游戏界面和蛇的初始状态。
2. 当蛇头碰到食物时,增加分数并生成新的食物,否则蛇向前移动一格。
3. 检查蛇是否碰到了墙或自己的身体,如果是则游戏结束。
4. 处理用户的输入,使蛇能够改变方向。
下面是一个简单的代码示例,可以作为一个基础框架来构建更复杂的贪吃蛇游戏。
#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define WIDTH 40
#define HEIGHT 20
int snakeX[100], snakeY[100];
int foodX, foodY;
int snakeLen = 3;
int score = 0;
char dir = 'd'; // 初始方向向右
void init()
{
// 初始化蛇和食物的位置
snakeX[0] = 5;
snakeY[0] = 5;
snakeX[1] = 4;
snakeY[1] = 5;
snakeX[2] = 3;
snakeY[2] = 5;
foodX = rand() % WIDTH;
foodY = rand() % HEIGHT;
// 初始化屏幕
system("cls");
for (int i = 0; i <= HEIGHT; i++) {
for (int j = 0; j <= WIDTH; j++) {
if (i == 0 || i == HEIGHT) {
printf("-");
}
else if (j == 0 || j == WIDTH) {
printf("|");
}
else if (i == foodY && j == foodX) {
printf("*");
}
else {
int found = 0;
for (int k = 0; k < snakeLen; k++) {
if (snakeX[k] == j && snakeY[k] == i) {
printf("o");
found = 1;
break;
}
}
if (!found) {
printf(" ");
}
}
}
printf("\n");
}
// 显示得分
printf("Score: %d", score);
}
void clearScreen()
{
// 清屏函数
system("cls");
}
void gameOver()
{
// 游戏结束
clearScreen();
printf("Game over! Score: %d", score);
system("pause");
exit(0);
}
void checkCollision()
{
// 检查碰撞
if (snakeX[0] == 0 || snakeX[0] == WIDTH || snakeY[0] == 0 || snakeY[0] == HEIGHT) {
gameOver();
}
for (int i = 1; i < snakeLen; i++) {
if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) {
gameOver();
}
}
}
void updateSnake(int dx, int dy)
{
// 更新蛇的位置
for (int i = snakeLen - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
snakeX[0] += dx;
snakeY[0] += dy;
}
void move()
{
int dx = 0, dy = 0;
switch (dir) {
case 'w':
dy--;
break;
case 'a':
dx--;
break;
case 's':
dy++;
break;
case 'd':
dx++;
break;
}
updateSnake(dx, dy);
checkCollision();
// 检查是否碰到食物
if (snakeX[0] == foodX && snakeY[0] == foodY) {
snakeLen++;
score++;
foodX = rand() % WIDTH;
foodY = rand() % HEIGHT;
}
// 显示屏幕
clearScreen();
for (int i = 0; i <= HEIGHT; i++) {
for (int j = 0; j <= WIDTH; j++) {
if (i == 0 || i == HEIGHT) {
printf("-");
}
else if (j == 0 || j == WIDTH) {
printf("|");
}
else if (i == foodY && j == foodX) {
printf("*");
}
else {
int found = 0;
for (int k = 0; k < snakeLen; k++) {
if (snakeX[k] == j && snakeY[k] == i) {
printf("o");
found = 1;
break;
}
}
if (!found) {
printf(" ");
}
}
}
printf("\n");
}
// 显示得分
printf("Score: %d", score);
}
void getInput()
{
// 处理用户输入
if (kbhit()) {
char c = getch();
if ((c == 'w' || c == 'a' || c == 's' || c == 'd') && abs(c - dir) != 2) {
dir = c;
}
}
}
int main()
{
init();
while (1) {
getInput();
move();
Sleep(100);
}
return 0;
}