10.结束场景
10.1 知识点
主函数外 class 语句块内
修改开始场景和结束场景函数 开始场景和结束场景可以复用
// 主函数外 class 语句块内
// 修改开始场景和结束场景函数 开始场景和结束场景可以复用
// 控制台宽 高 场景标识变量为开始场景和结束场景函数的参数
// 场景标识变量添加 ref 修饰 使场景标识的值能在函数内部被修改时生效
static void BeginOrEndScene(int w, int h, ref E_SceneType nowSceneType)
{
// 设置光标颜色和位置 打印标题
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(nowSceneType == E_SceneType.Begin ? w / 2 - 3 : w / 2 - 4, 8);
Console.Write(nowSceneType == E_SceneType.Begin ? "飞行棋" : "游戏结束");
// 创建当前选项的编号变量和退出死循环标识
int nowSelIndex = 0;
bool isQuitBegin = false;
// 设置开始场景和结束场景死循环
while (true)
{
// 开始场景和结束场景死循环内 设置两个选项的位置 根据当前选项的编号变量的值设置两个选项的颜色
Console.SetCursorPosition(nowSceneType == E_SceneType.Begin ? w / 2 - 4 : w / 2 - 5, 13);
Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(nowSceneType == E_SceneType.Begin ? "开始游戏" : "回到主菜单");
Console.SetCursorPosition(w / 2 - 4, 15);
Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write("退出游戏");
// 开始场景和结束场景死循环内 检测玩家输入
// Console.ReadKey(true).Key 可以通过 ReadKey 得到一个输入的枚举类型,并且设置不会再控制台上显示输入的内容
// 之前的做法是创建一个 char 变量去接收
// char input = Console.ReadKey(true).KeyChar;
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 = nowSceneType == E_SceneType.Begin ? E_SceneType.Game : E_SceneType.Begin;
// 2 退出当前循环
isQuitBegin = true;
}
else
{
// 退出游戏
Environment.Exit(0);
}
break;
}
// 开始场景和结束场景死循环内 通过标识决定 是否跳出 开始场景和结束场景死循环
if (isQuitBegin)
{
break;
}
}
}
主函数内
场景切换的 switch 分支内 调用结束场景函数
// 主函数内
// 构建场景切换的死循环
while (true)
{
// 构建场景切换的 switch 分支 判断当前场景标识变量的值 不同场景执行不同的逻辑
switch (nowSceneType)
{
case E_SceneType.Begin:
// 开始场景逻辑
Console.Clear();
// 来书写 开始场景相关的逻辑即可
// 场景切换的 switch 分支内 调用开始场景和结束场景函数
BeginOrEndScene(w, h, ref nowSceneType);
break;
case E_SceneType.Game:
// 游戏场景逻辑
Console.Clear();
// 通过函数来处理游戏场景的逻辑内容
// 场景切换的 switch 分支内 调用游戏场景函数
GameScene(w, h, ref nowSceneType);
break;
case E_SceneType.End:
// 结束场景逻辑
Console.Clear();
BeginOrEndScene(w, h, ref nowSceneType);
break;
default:
break;
}
}
10.2 知识点代码
主函数外 class语句块内
//主函数外 class语句块内
//开始场景和结束场景函数 开始场景和结束场景可以复用
//控制台宽 高 场景标识变量为开始场景和结束场景函数的参数
//场景标识变量添加ref修饰 使场景标识的值能在函数内部被修改时生效
static void BeginOrEndScene(int w, int h, ref E_SceneType nowSceneType)
{
//设置光标颜色和位置 打印标题
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(nowSceneType == E_SceneType.Begin ? w / 2 - 3 : w / 2 - 4, 8);
Console.Write(nowSceneType == E_SceneType.Begin ? "飞行棋" : "游戏结束");
//创建当前选项的编号变量和退出死循环标识
int nowSelIndex = 0;
bool isQuitBegin = false;
//设置开始场景和结束场景死循环
while (true)
{
//开始场景和结束场景死循环内 设置两个选项的位置 根据当前选项的编号变量的值设置两个选项的颜色
Console.SetCursorPosition(nowSceneType == E_SceneType.Begin ? w / 2 - 4 : w / 2 - 5, 13);
Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(nowSceneType == E_SceneType.Begin ? "开始游戏" : "回到主菜单");
Console.SetCursorPosition(w / 2 - 4, 15);
Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write("退出游戏");
//开始场景和结束场景死循环内 检测玩家输入
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 = nowSceneType == E_SceneType.Begin ? E_SceneType.Game : E_SceneType.Begin;
//2 退出当前循环
isQuitBegin = true;
}
else
{
//退出游戏
Environment.Exit(0);
}
break;
}
//开始场景和结束场景死循环内 通过标识决定 是否跳出 开始场景和结束场景死循环
if (isQuitBegin)
{
break;
}
}
}
主函数内
//主函数内
//申明一个 表示场景标识的 变量
E_SceneType nowSceneType = E_SceneType.Begin;
//构建场景切换的死循环
while (true)
{
//构建场景切换的switch分支 判断当前场景标识变量的值 不同场景执行不同的逻辑
switch (nowSceneType)
{
case E_SceneType.Begin:
//开始场景逻辑
Console.Clear();
//来书写 开始场景相关的逻辑即可
//场景切换的switch分支内 调用开始场景和结束场景函数
BeginOrEndScene(w, h, ref nowSceneType);
break;
case E_SceneType.Game:
//游戏场景逻辑
Console.Clear();
//通过函数来处理游戏场景的逻辑内容
//场景切换的switch分支内 调用游戏场景函数
GameScene(w, h, ref nowSceneType);
break;
case E_SceneType.End:
//结束场景逻辑
Console.Clear();
BeginOrEndScene(w, h, ref nowSceneType);
break;
default:
break;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com