用C#在控制台设计游戏开始场景

一、前言

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

二、设计游戏开始场景

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

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;

            }
        }
            

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值