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