针对贪吃蛇,小白表示莫大的困难,一时由基础突然跃向自己去写一个游戏,还是十万个不情愿的,然而作业的压力使我不得不进行一系列的尝试。
众所周知,可能大家眼中的贪吃蛇是这样的:
不不不,小白还是做不出如此绚丽的贪吃蛇。
实际而是这条:
首先展示老师的伪代码程序总体结构:
输出字符矩阵
WHILE not 游戏结束 DO
ch=等待输入
CASE ch DO
‘A’:左前进一步,break
‘D’:右前进一步,break
‘W’:上前进一步,break
‘S’:下前进一步,break
END CASE
输出字符矩阵
END WHILE
输出 Game Over!!!
下面是其中的一些函数:
# include <stdio.h>
# include <string.h>
# include <windows.h>
# include <stdlib.h>
# include <conio.h>
# include <time.h>
# include <math.h>
# define de_lenth 5//蛇初始长度
# define ROW_MAX 12//地图行
# define LINE_MAX 12//地图列
int ROW = ROW_MAX;
int LINE = LINE_MAX;
int Head_x = ROW_MAX/2, Head_y = LINE_MAX/2;//蛇的初始坐标
int Head_v = 5;//判断是否为头
int Tail_x = 0, Tail_y = 0;//蛇尾坐标
int count = 0;//计数
char direct = 'a';//蛇移动的方向
int times = 1;
void SetUp(void);
void CreateMap(char map[ROW_MAX][LINE_MAX]);//创建地图
void CreateSnake(int snkae[ROW_MAX][LINE_MAX]);//构造蛇的初始位置
void CreateFood(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//产生随机食物
void TraverseMap(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//输出地图以及蛇的全部
int JudgeWall(void);//判断蛇是否撞墙
void MoveTail(int snake[ROW_MAX][LINE_MAX]);//蛇尾部的移动
int EatFood(char map[ROW_MAX][LINE_MAX]);//蛇吃到食物的操作
void run(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//蛇的移动
void gotoxy(int x, int y);//将光标定位到某一位置, 用于显示结果, 以及暂停是使用
void Result(void);//显示结果
void dely(void);
对于小白来说,初级版贪吃蛇最重要的应该是关于蛇的移动了,这里展示一下蛇的移动代码(W/A/S/D):
switch (direct){
case 'w':
if(snake[Head_x-1][Head_y] != 0)
return;
snake[Head_x-1][Head_y] = ++Head_v;
Head_x--;
if(EatFood(map))
MoveTail(snake);
else
CreateFood(map, snake);
break;
case 'a':
if(snake[Head_x][Head_y-1] != 0)
return;
snake[Head_x][Head_y-1] = ++Head_v;
Head_y--;
if(EatFood(map))
MoveTail(snake);
else
CreateFood(map, snake);
break;
case 's':
if(snake[Head_x+1][Head_y] != 0)
return;
snake[Head_x+1][Head_y] = ++Head_v;
Head_x++;
if(EatFood(map))
MoveTail(snake);
else
CreateFood(map, snake);
break;
case 'd':
if(snake[Head_x][Head_y+1] != 0)
return;
snake[Head_x][Head_y+1] = ++Head_v;
Head_y++;
if(EatFood(map))
MoveTail(snake);
else
CreateFood(map, snake);
break;
}
system("cls");
TraverseMap(map, snake);
}
else
return;
dely();
}
}
大概的就是这些,当然现在我的贪吃蛇中还存在一些bug,我知道给我更多的时间一定会解决。