5.游戏主入口、游戏类和游戏帧更新接口

5.游戏主入口、游戏类和游戏帧更新接口


5.1 知识点

将实现的类图

创建游戏帧更新接口

/// <summary>
/// 游戏帧更新接口
/// </summary>
interface ISceneUpdate
{
    /// <summary>
    /// 更新方法
    /// </summary>
    void Update();
}

创建游戏类,场景类型枚举。游戏类创建对应的变量和方法。

/// <summary>
/// 场景类型枚举
/// </summary>
enum E_SceneType
{
    /// <summary>
    /// 开始场景
    /// </summary>
    Begin,
    /// <summary>
    /// 游戏场景
    /// </summary>
    Game,
    /// <summary>
    /// 结束场景
    /// </summary>
    End,
}

/// <summary>
/// 游戏类
/// </summary>
class Game
{
    //游戏窗口宽高
    public const int w = 80;
    public const int h = 20;

    //游戏帧更新接口变量 用来标记 当前选中的场景
    public static ISceneUpdate nowScene;

    //构造函数
    //初始化控制台和场景
    public Game()
    {
        //初始化控制台
        Console.CursorVisible = false;
        Console.SetWindowSize(w, h);
        Console.SetBufferSize(w, h);

        //初始化场景
        ChangeScene(E_SceneType.Begin);
    }

    //游戏开始的方法
    public void Start()
    {
        //游戏主循环 主要负责 游戏场景逻辑的更新
        while (true)
        {
            //判断当前游戏场景不为空 就更新
            if (nowScene != null)
            {
                nowScene.Update();
            }
        }
    }

    //场景切换方法
    public static void ChangeScene(E_SceneType type)
    {
        //切场景之前 应该把上一个场景的绘制内容擦掉
        Console.Clear();

        //根据场景枚举new出新的对应的场景类
        switch (type)
        {
            case E_SceneType.Begin:
                nowScene = new BeginScene();
                break;
            case E_SceneType.Game:
                nowScene = new GameScene();
                break;
            case E_SceneType.End:
                nowScene = new EndScene();
                break;
        }
    }
}

在程序主入口new出一个游戏类,开始游戏

/// <summary>
/// 游戏入口
/// </summary>
class Program
{
    static void Main(string[] args)
    {
        //new出一个游戏类
        Game game = new Game();

        //开始游戏
        game.Start();
    }
}


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

×

喜欢就点赞,疼爱就打赏