从零开始用 Windows C++ 桌面程序制作方舟同人游戏(一)

前言

阅读本博客的前置技能:

C++ 基础

好像没了 qwq

为什么开这个坑

很惭愧,虽然每每想要认真的做一个游戏 demo 时,我要么只是停留在了纸面描述上,要么只是建了几个新类,用一个又一个框架/引擎新建工程,做了一些很简单的东西,却从来没有做出来过一个完整的游戏(控制台游戏除外哈哈)。所以乘着对 Windows 桌面程序学习的势头,在此再开一坑,希望不要再浅尝辄止,做出一个能玩的完整 demo. 并同时把开发过程完完整整地记录下来,并将疑惑不解或者是有理解的地方讲出来,加深印象,也帮助他人. (虽然看得人不会很多,我的博客读起来估计也不会那么舒服,毕竟咱也不会写书)

我的想法

在开始代码工程之前,我们应当明确,我们是要做一个什么类型的游戏。接着,使用面向对象的思想,构思一下这个游戏,有哪些类,有哪些接口,怎么定义继承关系,来尽可能地减少工程复杂度,使要做的游戏更加清晰。最好是写设计文档,将游戏的雏形描绘在设计上,切忌一上来便新建文件夹。马克思说:“最蹩脚的建筑师从一开始就比最灵巧的蜜蜂高明的地方,是他在用蜂蜡建筑蜂房之前已经在自己头脑中把它建成了。”(当然,该系列博客中适当略去了前期工作,重点是如何用代码真正实现,做一个完完整整的游戏)

例如,在这里我想实现的是一个类似魔塔的 2D RPG 游戏,希望做出一部 2D RPG 的知名手游《明日方舟》的同人单机游戏。与魔塔不同的是,我希望能够在游戏中增加一些 Rougelike 元素,提高游戏的可玩性。至于具体设计嘛,设计文档中有一些描述,这里当然略过啦!

那么,让我们上手开发出一个属于自己的 Windows 游戏吧!


一、新建工程

使用的集成开发环境:Visual Studio 2019 Community (安装了c++开发环境)

打开VS,创建一个 Windows 桌面应用程序工程。

在这里插入图片描述

取好项目名称,选好目录。我的项目名称是 “PhantomAndCrimsonSolitaire”(傀影与猩红狐钻).

创建完成后,我们发现工程下多了好多好多文件。如果之前接触过 Windows 桌面程序,那对这些一定是不陌生的。

查看源文件中的 PhantomAndCrimsonSolitaire.cpp,这是整个工程最重要的一段代码,是应用程序的入口点:

在这里插入图片描述

其代码如下:

// PhantomAndCrimsonSolitaire.cpp : 定义应用程序的入口点。
//

#include "framework.h"
#include "PhantomAndCrimsonSolitaire.h"

#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst;                                // 当前实例
WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名

// 此代码模块中包含的函数的前向声明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
   
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: 在此处放置代码。

    // 初始化全局字符串
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_PHANTOMANDCRIMSONSOLITAIRE, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // 执行应用程序初始化:
    if (!InitInstance (hInstance, nCmdShow))
    {
   
        return FALSE;
    }

    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PHANTOMANDCRIMSONSOLITAIRE));

    MSG msg;

    // 主消息循环:
    while (GetMessage(&msg, nullptr, 0, 0))
    {
   
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
   
            TranslateMessage(&msg);
            DispatchMessage(
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值