6.多场景切换、开始场景和结束场景
6.1 知识点
将要实现的类图
创建游戏场景类,继承游戏帧更新接口,先不写具体游戏逻辑
//游戏场景类 继承游戏帧更新接口
class GameScene : ISceneUpdate
{
//实现游戏场景里的更新方法
public void Update()
{
}
}
创建开始场景和结束场景基类 是抽象类 继承游戏帧更新接口。把开始场景和结束场景共有的逻辑抽象出来。
//开始场景和结束场景基类 是抽象类 继承游戏帧更新接口
abstract class BeginOrEndBaseScene : ISceneUpdate
{
//标题名字
protected string strTitle;
//选项索引 当前选择的是选项几 从0开始
protected int nowSelectIndex = 0;
//选项0的名字
protected string strZero;
//选项1的名字
protected const string strOne = "结束游戏";
//抽象方法 按j键进入不同选项后 做的事情
public abstract void EnterJDoSomthing();
//实现开始场景和结束场景基类里的更新方法
public void Update()
{
//开始和结束场景的 游戏逻辑
//选择当前的选项 然后 监听 键盘输入 wsj
//设置字体颜色
Console.ForegroundColor = ConsoleColor.White;
//设置标题显示位置 打印标题
Console.SetCursorPosition(Game.w / 2 - strTitle.Length, 5);
Console.Write(strTitle);
//设置选项0和选项1显示位置 打印选项0和选项1 根据选项索引设置选项颜色
Console.SetCursorPosition(Game.w / 2 - strZero.Length, 8);
Console.ForegroundColor = nowSelectIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(strZero);
Console.SetCursorPosition(Game.w / 2 - 4, 10);
Console.ForegroundColor = nowSelectIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(strOne);
//检测输入 ws上下切换当前选项 j确认进入当前选项
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.W:
--nowSelectIndex;
if (nowSelectIndex < 0)
{
nowSelectIndex = 0;
}
break;
case ConsoleKey.S:
++nowSelectIndex;
if (nowSelectIndex > 1)
{
nowSelectIndex = 1;
}
break;
case ConsoleKey.J:
EnterJDoSomthing();
break;
}
}
}
创建开始场景类,继承开始场景和结束场景基类,具体实现开始场景的标题、选项和按j键逻辑
//开始场景类 继承开始场景和结束场景基类
class BeginScene : BeginOrEndBaseScene
{
//开始场景类构造函数
public BeginScene()
{
strTitle = "贪食蛇";
strZero = "开始游戏";
}
//按J键做什么的逻辑
public override void EnterJDoSomthing()
{
//选项0是开始游戏
if (nowSelectIndex == 0)
{
//进入游戏场景
Game.ChangeScene(E_SceneType.Game);
}
//选项1是结束游戏
else
{
Environment.Exit(0);
}
}
}
创建结束场景类,继承开始场景和结束场景基类,具体实现结束场景的标题、选项和按j键逻辑
//结束场景类 继承开始场景和结束场景基类
class EndScene : BeginOrEndBaseScene
{
//结束场景类构造函数
public EndScene()
{
strTitle = "结束游戏";
strZero = "回到开始界面";
}
//按J键做什么的逻辑
public override void EnterJDoSomthing()
{
//选项0是回到开始界面
if (nowSelectIndex == 0)
{
Game.ChangeScene(E_SceneType.Begin);
}
//选项1是结束游戏
else
{
Environment.Exit(0);
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com