一、前言
在制作一款游戏的时候,从编程的角度出发,我们要对这个游戏有哪些功能进行一个大的模块的分类,并在这个模块中对需要实现的功能进行需求分析。例如制作一款游戏,他的开始场景、战斗场景、结束场景是必不可少的,那么这些就是一个大的模块。而在这些场景中,我们要实现什么功能,实现这些功能会使用到什么类型的语法,这就是需求分析。


二、设计游戏开始场景
我们要做的是一款王子解救公主的游戏,首先我们要先做这个游戏的开始场景,那么在控制台输出的画面规定为这样:

1.需求分析:
①需要设置游戏界面的大小。
②标题为:王子解救公主。两个选项:开始游戏、退出游戏。他们的位置是固定不变的。需要设置输出位置。
③光标只能在“开始游戏”和“退出游戏”之间移动。需要做出条件限制光标移动。
④光标在哪个选项上,哪个选项就会变红。需要做出条件限制设置字体颜色。
⑤在任一选项上,需要按下某个键才能跳转的下一个游戏场景或者退出游戏。需要读取键盘信息。
2.开始设计:
①设置游戏界面大小:
把长宽定义成为常量防止改变。
const int w = 50, h = 30; //定义控制台窗口的宽度和高度常量
Console.SetWindowSize(w, h);//设置控制台窗口大小
Console.SetBufferSize(w, h);//设置缓冲区窗口大小
②设计标题和选项:
标题:
Console.SetCursorPosition(w / 2 - 6, 8);//设置标题位置
Console.Write("王子解救公主");//设置标题内容
选项:
Console.SetCursorPosition(w / 2 - 4, 13);//“开始游戏”的位置
if (nowSelIndex == 0)
{
Console.ForegroundColor = ConsoleColor.Red;//将选中项显示成红色
}
else
{
Console.ForegroundColor = ConsoleColor.White;//未选中项显示成白色
}
Console.Write("开始游戏");
Console.SetCursorPosition(w / 2 - 4, 15);//“退出游戏”的位置
if (nowSelIndex == 1)
{
Console.ForegroundColor = ConsoleColor.Red;//将选中项显示成红色
}
else
{
Console.ForegroundColor = ConsoleColor.White;//未选中项显示成白色
}
Console.Write("退出游戏");
③读取按键信息并执行:
switch(input)
{
// 按W键向上移动
case 'w':
case 'W':
--nowSelIndex;
// 防止越界
if (nowSelIndex < 0)
{
nowSelIndex = 0;
}
break;
// 按S键向下移动
case 's':
case 'S':
++nowSelIndex;
// 防止越界
if (nowSelIndex>1)
{
nowSelIndex = 1;
}
break;
case '\r':// 按回车键确认选择
if (nowSelIndex==0)// 选择"开始游戏"
{
nowSceneID = 2;// 切换到场景2:战斗场景
quit =true;// 退出开始场景循环
}
else
{
Environment.Exit(0);
}
break;
}
三、完整的开始场景代码
internal class Program
{
const int w = 50, h = 30; //定义控制台窗口的宽度和高度常量
static void Main(string[] args)
{
int nowSceneID = 1;//表明当前的开始场景的ID为1,
Console.CursorVisible=false;//隐藏光标
Console.SetWindowSize(w, h);//设置控制台窗口大小
Console.SetBufferSize(w, h);//设置缓冲区窗口大小
while (true)//游戏循环
{
switch (nowSceneID)//根据场景ID执行不同的场景逻辑
{
// 开始场景
case 1:
#region 开始场景
Console.Clear();//清屏
Console.SetCursorPosition(w / 2 - 6, 8);//设置标题位置
Console.Write("王子解救公主");//设置标题内容
int nowSelIndex = 0;//选项索引,0=开始游戏,1=退出游戏
while (true)//选项循环
{
bool quit = false;//退出开始场景,切换场景的标志
Console.SetCursorPosition(w / 2 - 4, 13);//“开始游戏”的位置
if (nowSelIndex == 0)
{
Console.ForegroundColor = ConsoleColor.Red;//将选中项显示成红色
}
else
{
Console.ForegroundColor = ConsoleColor.White;//未选中项显示成白色
}
Console.Write("开始游戏");
Console.SetCursorPosition(w / 2 - 4, 15);//“退出游戏”的位置
if (nowSelIndex == 1)
{
Console.ForegroundColor = ConsoleColor.Red;//将选中项显示成红色
}
else
{
Console.ForegroundColor = ConsoleColor.White;//未选中项显示成白色
}
Console.Write("退出游戏");
char input = Console.ReadKey(true).KeyChar;//获取按键输入并不显示按键
switch(input)
{
// 按W键向上移动
case 'w':
case 'W':
--nowSelIndex;
// 防止越界
if (nowSelIndex < 0)
{
nowSelIndex = 0;
}
break;
// 按S键向下移动
case 's':
case 'S':
++nowSelIndex;
// 防止越界
if (nowSelIndex>1)
{
nowSelIndex = 1;
}
break;
case '\r':// 按回车键确认选择
if (nowSelIndex==0)// 选择"开始游戏"
{
nowSceneID = 2;// 切换到场景2:战斗场景
quit =true;// 退出开始场景循环
}
else
{
Environment.Exit(0);//退出控制台
}
break;
}
if (quit)
{
break;
}
}
break;
#endregion
case 2:
Console.WriteLine("战斗场景");
break;
}
}
}
}


被折叠的 条评论
为什么被折叠?



