11.游戏场景-蛇类移动
11.1 知识点
创建蛇移动方向枚举,蛇类中创建移动方向变量,记录当前蛇的移动方向。蛇类构造函数中初始化蛇的移动方向。创建一个蛇移动方法。蛇移动前,擦除蛇尾,也就是最后一个位置,否则有残影。然后根据蛇头位置和蛇移动方向变量,修改舌头位置。
#region Lesson7 蛇移动
/// <summary>
/// 蛇的移动方向
/// </summary>
enum E_MoveDir
{
/// <summary>
/// 上
/// </summary>
Up,
/// <summary>
/// 下
/// </summary>
Down,
/// <summary>
/// 左
/// </summary>
Left,
/// <summary>
/// 右
/// </summary>
Right,
}
#endregion
//蛇类 继承绘制接口
class Snake : IDraw
{
//蛇的身体数组
SnakeBody[] bodys;
//当前蛇的长度
int snakeBodysLength;
//当前移动的方向
E_MoveDir dir;
//蛇类构造函数
public Snake(int x, int y)
{
//粗暴的 申明200个空间 游戏中 基本不会出现蛇长度达到200个身体
bodys = new SnakeBody[200];
//声明蛇头
bodys[0] = new SnakeBody(E_SnakeBody_Type.Head, x, y);
//初始时只有蛇头 初始化为1
snakeBodysLength = 1;
//初始化默认移动的方向向右
dir = E_MoveDir.Right;
}
//蛇类绘制方法
public void Draw()
{
//遍历蛇身体数组 逐个绘制蛇身体
for (int i = 0; i < snakeBodysLength; i++)
{
bodys[i].Draw();
}
}
#region Lesson7 蛇的移动
//蛇移动方法
public void Move()
{
//蛇移动前 擦除蛇尾 也就是最后一个位置 否则有残影
SnakeBody lastBody = bodys[snakeBodysLength - 1];
Console.SetCursorPosition(lastBody.pos.x, lastBody.pos.y);
Console.Write(" ");//擦屁股
//蛇头移动
switch (dir)
{
case E_MoveDir.Up:
--bodys[0].pos.y;
break;
case E_MoveDir.Down:
++bodys[0].pos.y;
break;
case E_MoveDir.Left:
bodys[0].pos.x -= 2;
break;
case E_MoveDir.Right:
bodys[0].pos.x += 2;
break;
}
}
#endregion
}
游戏场景类实现游戏场景里的更新方法中调用蛇移动方法,蛇先移动再绘制。发现蛇移动的太快了。创建记录while循环次数的变量。可以理解为运行了多少帧。每当进入while循环10000次后,while循环次数的变量清0.让再进行一次绘制,实现游戏降速。
//游戏场景类 继承游戏帧更新接口
class GameScene : ISceneUpdate
{
//地图类变量 管理所有墙壁
Map map;
//蛇类变量 管理蛇相关
Snake snake;
//while循环次数 判断当前while循环进了多少次
int whileLoopTimes = 0;
//游戏场景类构造函数
public GameScene()
{
//初始化地图类变量
map = new Map();
//初始化一个蛇
snake = new Snake(40, 10);
}
//实现游戏场景里的更新方法 在游戏类中的start方法中的while循环中调用
public void Update()
{
//while循环运行的太快 每次进一次while 绘制一次的话 游戏速度太快 要降速
//用while循环次数来判断 每当进入while循环10000次后 再进行一次绘制
//可以理解为每10000帧更新一次
if (whileLoopTimes % 10000 == 0)
{
//绘制地图类
map.Draw();
//蛇移动 先移动再绘制蛇
snake.Move();
//绘制蛇类
snake.Draw();
//实际update了 重写开始计数
whileLoopTimes = 0;
}
//每进一次while循环加一
++whileLoopTimes;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com