4.开始场景

4.开始场景


4.1 知识点

主函数外 Class 语句块内

创建开始场景函数

static void GameScene(int w, int h, ref E_SceneType nowSceneType)
{
    // 控制台宽高,场景标识变量为开始场景函数的参数
    // 场景标识变量添加ref修饰,使场景标识的值能在函数内部被修改时生效
}

设置光标位置,打印标题

Console.SetCursorPosition(w / 2 - 3, 8);
Console.Write("飞行棋");

创建当前选项的编号变量和退出循环标识

int nowSelIndex = 0;
bool isQuitBegin = false;

设置开始场景死循环

while (true)
{
    // Your code here
}

开始场景死循环内,设置两个选项的位置,根据当前选项的编号变量的值设置两个选项的颜色

Console.SetCursorPosition(w / 2 - 4, 13);
Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write("开始游戏");

Console.SetCursorPosition(w / 2 - 4, 15);
Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write("退出游戏");

开始场景死循环内,检测玩家输入

switch (Console.ReadKey(true).Key)
{
    // Your code here
}

开始场景死循环内,根据玩家输入执行不同逻辑

switch (Console.ReadKey(true).Key)
{
    case ConsoleKey.W:
        // Your code here
        break;
    case ConsoleKey.S:
        // Your code here
        break;
    case ConsoleKey.J:
        // Your code here
        break;
}

开始场景死循环内,通过标识决定是否跳出开始场景死循环

if (isQuitBegin)
{
    break;
}

主函数内

场景切换的 switch 分支内,调用开始场景函数

// 构建场景切换的死循环
while (true)
{
    // 构建场景切换的 switch 分支,判断当前场景标识变量的值,不同场景执行不同的逻辑
    switch (nowSceneType)
    {
        case E_SceneType.Begin:
            // 开始场景逻辑
            Console.Clear();
            // 来书写开始场景相关的逻辑即可

            // 场景切换的 switch 分支内,调用开始场景函数
            GameScene(w, h, ref nowSceneType);
            break;
        case E_SceneType.Game:
            // 游戏场景逻辑
            Console.Clear();
            break;
        case E_SceneType.End:
            // 结束场景逻辑
            Console.Clear();
            break;
        default:
            break;
    }
}

4.2 知识点代码

主函数外 class 语句块内

//创建开始场景函数
//控制台宽 高 场景标识变量为开始场景函数的参数
//场景标识变量添加 ref 修饰 使场景标识的值能在函数内部被修改时生效
static void BeginOrEndScene(int w, int h, ref E_SceneType nowSceneType, string sceneTitle, string option1, string option2)
{
    //设置光标位置 打印标题
    Console.SetCursorPosition(w / 2 - sceneTitle.Length / 2, 8);
    Console.Write(sceneTitle);

    //创建当前选项的编号变量和退出循环标识
    int nowSelIndex = 0;
    bool isQuitScene = false;

    //设置开始场景死循环
    while (true)
    {
        //开始场景死循环内 设置两个选项的位置 根据当前选项的编号变量的值设置两个选项的颜色

        Console.SetCursorPosition(w / 2 - option1.Length / 2, 13);
        Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
        Console.Write(option1);

        Console.SetCursorPosition(w / 2 - option2.Length / 2, 15);
        Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
        Console.Write(option2);

        //开始场景死循环内 检测玩家输入
        switch (Console.ReadKey(true).Key)
        {
            //开始场景死循环内 根据玩家输入执行不同逻辑
            case ConsoleKey.W:
                --nowSelIndex;
                if (nowSelIndex < 0)
                {
                    nowSelIndex = 0;
                }
                break;
            case ConsoleKey.S:
                ++nowSelIndex;
                if (nowSelIndex > 1)
                {
                    nowSelIndex = 1;
                }
                break;
            case ConsoleKey.J:
                if (nowSelIndex == 0)
                {
                    //进入游戏场景
                    //1 改变当前场景ID
                    nowSceneType = E_SceneType.Game;
                    //2 退出当前循环
                    isQuitScene = true;
                }
                else
                {
                    //退出游戏
                    Environment.Exit(0);
                }
                break;
        }

        //开始场景死循环内 通过标识决定 是否跳出 开始场景死循环
        if (isQuitScene)
        {
            break;
        }
    }
}

主函数内

//构建场景切换的死循环
while (true)
{
    //构建场景切换的 switch 分支 判断当前场景标识变量的值 不同场景执行不同的逻辑
    switch (nowSceneType)
    {
        case E_SceneType.Begin:
            //开始场景逻辑
            Console.Clear();
            //来书写 开始场景相关的逻辑即可

            //场景切换的 switch 分支内 调用开始场景函数
            BeginOrEndScene(w, h, ref nowSceneType, "飞行棋", "开始游戏", "退出游戏");
            break;
        case E_SceneType.Game:
            //游戏场景逻辑
            Console.Clear();
            break;
        case E_SceneType.End:
            //结束场景逻辑
            Console.Clear();
            //调用结束场景函数
            BeginOrEndScene(w, h, ref nowSceneType, "GameOver", "回到开始界面", "退出游戏");
            break;
        default:
            break;
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏