C++编译“传说”

本文介绍了C++初学者如何在console模式下配置编译环境,强调了环境变量如PATH, INCLUDE, LIB的重要性,并以VC++和mingw为例说明了设置过程。通过批处理文件实现编译器路径、头文件和库文件的指定,同时提出了关于编译器工作原理的疑问。" 125155679,12197194,深入理解C/C++中的结构体(struct)使用,"['数据结构', 'C语言', 'C++']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.      侯先生如是说

我总是鼓励 C/C++ 的学习者,在刚接触这个程式语言的时候,先以 console mode(DOS-like)程式为目标。所谓 console 程式,就是文字模式的程式,我不但认为 C/C++ 程式开发对象初期要以 console mode 为主,我也认为,C/C++ 的程式开发环境,初期也要以 console mode 为主。换言之,不要一开始就进入整合环境(IDE)。整合环境中那麽多视窗、那麽多功能、那麽多预设值,会让程式新手眼花撩乱,无法掌握程式编译过程中一些有价值的知识与经验。

2.      古早以来“二加一传说”

古早以来,PC 上的 C 编译器,就需要两个环境变数:

n         LIB:这个环境变数告诉编译器说,必要的 libraries 在哪里(哪个磁碟目录下)

n         INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁碟目录下)

n         另外,为了让我们能够在任何 working directory 都叫得到编译器,当然我们必须设定 PATH。

从古早以来,一直到现在,C/C++ 编译器都需要这三个环境变数。

3.      传说成真

VC++为例:

做成一个批处理。这里问题是环境设定只在当前会话有效,退出DOS VM后得再次设置。侯先生说可以改autoexec.bat文件保持。好像找不到没有其它办法保持环境变量了吗?

::编译器在哪?

set PATH=C:/MSDEV/VC98/BIN;C:/MSDEV/COMMON/MSDEV98/BIN

::头文件在哪?

set INCLUDE=C:/MSDEV/VC98/INCLUDE

::库文件在哪?

set LIB=C:/MSDEV/VC98/LIB

4.      我的“传说”实现

n         用了Qincy的编译器,叫mingw?

set PATH=D:/mingw/bin

set INCLUDE=D:/mingw/include

set LIB=D:/mingw/lib

n         我的哈佬

#include <iostream>

 

int main(){

    std::cout<<"programming is fun!!";

}

 

5.      “传说”实现步骤

1.         制作一个批处理,内容是上面设定的三个环境变量,值是什么看你的C++编译器放在什么地方。

2.         制作源文件,这个……;

3.         现在可以编译了,在什么地方都,开个DOS窗,因为有个PATH嘛,不过编译前要先执行那个批处理。

6.      kemin的一些疑问

1.         还没有开始玩IDE,不知道在哪里设。

2.         一条inculde指令,编译器怎么知道去找那个环境变量?

3.         编译器有编译选项,是不是哪里可以设置一些东东。

4.         编译中间还有个链接的过程,有待了解。

5.         回头再写。

### 关于《传说之下》(Undertale)的C++实现 尽管《传说之下》是一款基于RPG Maker开发的游戏,而RPG Maker主要依赖Ruby脚本而非C++,但这并不妨碍开发者尝试将其逻辑或某些功能移植到C++环境中。以下是关于如何通过C++实现类似于《传说之下》的功能的一些讨论。 #### 使用C++模拟《传说之下》的核心机制 可以考虑将游戏的主要部分拆解为几个模块化组件来实现: 1. **战斗系统** 战斗系统可以通过面向对象编程的方式设计。例如,创建`Character`类表示游戏角色,并定义其属性如生命值、攻击力等[^2]。 ```cpp class Character { public: std::string name; int health; int attackPower; void Attack(Character& target) { if (target.health > 0) { target.health -= this->attackPower; if (target.health < 0) target.health = 0; // 防止负数健康值 } } bool IsAlive() const { return health > 0; } }; ``` 2. **对话树结构** 对话可以用状态机或者图论中的节点与边的概念建模。每个选项对应一个分支,玩家的选择决定后续的发展方向[^3]。 ```cpp struct DialogueNode { std::string text; std::vector<std::pair<std::string, DialogueNode*>> choices; // 存储可能的选择及其指向的目标节点指针 ~DialogueNode(); // 析构函数用于释放动态分配内存资源 }; DialogueNode::~DialogueNode() { for(auto &[_, nodePtr] : choices){ delete nodePtr; } } ``` 3. **地图导航** 地图上的移动可视为二维数组的操作,在其中追踪角色位置并更新显示内容[^1]。 ```cpp char mapGrid[10][10]; // 假设是一个简单的10x10网格世界 void MovePlayer(int newX, int newY){ /* 更新player坐标 */ } void RenderMap(){ /* 绘制当前视图下的map*/ } ``` 以上仅作为概念性的框架展示,实际应用时需进一步细化和完善各部件间的交互逻辑以及图形界面渲染等功能。 #### 编译运行环境配置建议 如果打算构建独立的应用程序,则需要设置好相应的开发工具链。对于Windows平台而言,推荐采用Visual Studio集成开发环境来进行项目管理和调试工作[^3]。 ```bash // 示例编译指令 "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" UndertaleClone.sln /p:Configuration=Release /p:Platform="x64" ``` 完成编译之后即可生成可执行文件供测试之用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值