贪吃蛇对于初学者来说是个检验自己代码能力的好项目,那么如何实现呢?
首先要创建地图
void createMap()//对于地图上下左右边界的创建
{
for(int i=0+ MOVE_CENTER;i<= MAP_WIDTH+ MOVE_CENTER;i++)
{
gotoxy(i, 0);
printf(MAP_MODE);
gotoxy(i, MAP_HEIGHT);
printf(MAP_MODE);
}
for (int i = 0; i <=MAP_HEIGHT; i++)
{
gotoxy(0+ MOVE_CENTER,i);
printf(MAP_MODE);
gotoxy(MAP_WIDTH+ MOVE_CENTER, i);
printf(MAP_MODE);
}
gotoxy(98, 0);//使得光标远离地图更加美观
initSnake();//蛇的初始化后续会提到
}
然后就是对于食物的创建
void initSnake()//蛇的初始化
{
snake.currentLen = INITLEN;//蛇的初始长度
snake.x[0] = MAP_WIDTH / 2 + MOVE_CENTER;//蛇头的创建
snake.y[0] = MAP_HEIGHT / 2;//蛇身的创建
gotoxy(snake.x[0], snake.y[0]);
printf(SNAKE_HEAD);
for (int i = 1; i < snake.currentLen; i++)//打印蛇
{
snake.x[i] = snake.x[i - 1]+2;
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
printf(SNAKE_BODY);
}
gotoxy(98, 0);
}
再接下来就是蛇的移动了
int direct = 'a';
void moveSnke()
{
if (_kbhit())//对于键盘的监控
{
fflush(stdin);
direct = _getch();
}
gotoxy(snake.x[snake.currentLen - 1], snake.y[snake.currentLen - 1]);//蛇移动后尾巴的消失
printf(" ");
for (int i = snake.currentLen - 1; i > 0; i--)
{
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
printf(SNAKE_BODY);
}
switch (direct)
{
case 'w':
case 'W':
snake.y[0]--;
break;
case 's':
case 'S':
snake.y[0]++;
break;
case 'a':
case 'A':
snake.x[0]-=2;
break;
case 'd':
case 'D':
snake.x[0]+=2;
break;
}
gotoxy(snake.x[0], snake.y[0]);
printf(SNAKE_HEAD);
gotoxy(98, 0);
if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇吃到食物后身体加长
{
snake.currentLen++;
flag = 1;
}
}
最后判断游戏的状态
int statement()
{
if (snake.x[0] == 0 + MOVE_CENTER|| snake.x[0]== MAP_WIDTH + MOVE_CENTER||snake.y[0]==0|| snake.y[0]== MAP_HEIGHT)//蛇头不能撞到墙上
{
return 1;
}
for (int i = 1; i < snake.currentLen; i++)//蛇不能碰到自己的身体
{
if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i])
{
return 1;
}
}
return 0;
}
最后可能帮助到大家的
struct Food {
int x;
int y;
}food;//食物结构体的创建
struct Snake {
int x[MAXLEN];
int y[MAXLEN];
int currentLen;
}snake;//蛇的结构体的创建
void gotoxy(int x, int y)
{
COORD pos = { x,y };
HANDLE hOult = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOult, pos);
}//对于光标的应用
//对于大家可能用的到的一些头文件
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#include <stdlib.h>
//下面是一些自己对于一些宏的定义
#define MAXLEN 30
#define INITLEN 3
#define MAP_MODE "█"
#define SNAKE_HEAD "☉"
#define SNAKE_BODY "●"
#define MAP_WIDTH 80
#define MAP_HEIGHT 30
#define MOVE_CENTER 15
其实贪吃蛇挺简单的,主要考察大家对于结构体、函数、数组的运用。希望大家也能写出自己的第一个小游戏