6.多场景切换、开始场景和结束场景

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

×

喜欢就点赞,疼爱就打赏