Making a game in Visual Studio from 1997

Lobsters Hottest 工具

摘要

一名资深开发者使用1997年的Visual Studio 6和纯C语言在Windows 7上搭建了双摇杆射击游戏框架,展示了固定时间步长、对象管理和OpenGL兼容模式等复古开发实践。

<p><a href="https://lobste.rs/s/virlcj/making_game_visual_studio_from_1997">Comments</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/08 03:18

TL;DR: 一位开发者使用 1997 年发布的 Visual Studio 6 在 Windows 7 上,用纯 C 语言和 OpenGL 兼容模式从头搭建了一款双摇杆射击游戏的基本框架,包括窗口、对象管理、坐标系统和固定时间步长。 ## 开发环境与动机 演示者 Sean 使用的开发环境是 **Visual Studio 6**(最初于 1997 年发布)运行在 **Windows 7** 上。他从 2001-2002 年左右离开 Looking Glass 工作室后,一直沿用这套环境。选择这种老旧环境的原因是他熟悉且习惯,不愿迁移。项目目标是制作一个简单的双摇杆射击游戏,使用 WASD 移动、鼠标射击。由于开发机器没有连接手柄,所以用鼠标代替右摇杆。 ## 起步:窗口与基础框架 Sean 首先调用了他的个人平台库 `STB`(用于处理 Windows 窗口创建和 OpenGL 上下文),然后初始化并创建了一个灰色背景的窗口。他采用 4:3 的宽高比,并设置正交投影矩阵,坐标系统使用左下角为原点 (0,0),水平范围 -4 到 +4,垂直范围 -3 到 +3(后改为 -4 到 4 以便测试)。使用的是较老的 OpenGL 兼容模式,要求版本 3.3。 代码全部写在一个 `.c` 文件中,没有提前拆分文件。他解释说:“如果我知道我会认真对待这个项目,可能会立即拆分。但为了快速直播,不值得。” ## 对象管理:静态数组与 ID 分配器 Sean 使用一个简单的静态数组来存储所有游戏对象,并实现了一个基础的分配器。关键设计: - 数组大小为 2 的幂(例如 64)。 - **对象 ID 0 被保留为“空”**,类似空指针。分配时从索引 1 开始。 - 分配器遍历数组,找到类型为 `none` 的槽位返回其索引。 - 释放函数将槽位置为 `none`。 - 玩家对象被硬编码为数组中的特定索引,以便频繁访问时语法更方便。 Sean 解释说,对于独立游戏来说,使用一个大数组并手动管理槽位足够了,不需要复杂的数据结构或动态内存分配。他引用了 John Blow 的演讲观点:“你就用一个大的数组。” ## 坐标系统与渲染 投影矩阵使用 `gluOrtho2D`(注意拼写,实际应为 `gluOrtho2D`,但输入时因缺少自动补全而多次尝试)。Sean 禁用了许多 3D 功能(如面剔除),只保留基本绘制。他用一个粉红色(品红色)的正方形来测试渲染是否正常。数学部分使用了简单的二维向量(位置、速度),在游戏循环中内联处理。 ## 输入与移动 输入处理使用 Win32 API 检查键盘按键状态(WASD)。Sean 将上下、左右分别映射到两个轴变量,并处理了同时按相反方向的情况(互相抵消,结果为 0)。移动速度设定为每秒 20 个单位,采用简单的欧拉积分:位置 += 速度 * 时间步长。 ## 时间步长:固定 vs 可变 Sean 明确选择了**固定时间步长**(如 60 或 120 FPS 的步长),如果帧率低则在一帧内多次迭代。理由是: - 可变时间步长会导致不同帧率下物理行为不一致。 - 固定步长能保证碰撞检测等逻辑的确定性。 - 对于本游戏(碰到就爆炸),简单粗暴的固定步长足够。 他批评了可变时间步长的做法,认为在需要精确物理的项目中会造成麻烦。 ## 编程哲学:警告与抽象 Sean 对编译器警告采取实用主义态度。他禁用了关于 `double` 和 `float` 之间转换的警告(4244),因为“我根本不在乎它”。他解释说,在快速原型或程序化生成中,此类警告不值得花时间处理。他强调不要过度设计,让东西先跑起来。例如使用静态数组而非链表,使用内联代码而非函数抽象。 ## 总结 整个演示展示了一位资深开发者利用 20 多年前的工具链,以极简、务实的方式快速搭建游戏核心循环。虽然他承认设计游戏的能力并非强项,但编程实现能力足以支撑这个项目。环境虽然古老,但思路清晰:关注可运行的产物,而非完美的架构。 **Source:** [Making a game in Visual Studio from 1997 - YouTube](https://www.youtube.com/watch?v=nQrzB5P5NPE)

相似文章

像1997年那样编译Quake!

Fabien Sanglard

一份详细的指南,介绍如何重现使用Windows NT 4和Visual C++ 6等老式工具编译Quake的win32二进制文件的过程(就像1997年所做的那样)。

像1993年那样制作图形

Hacker News Top

一位开发者详细介绍了如何构建《Catlantean 3D》——一款采用1993年时代图形技术(256色、320x240分辨率、手工制作资产、无人工智能)的第一人称射击游戏,计划在Steam上发布,重点讲解调色板渲染和资产创建。

Space Cadet Pinball in Real Life

Lobsters Hottest

本文介绍了作者将Windows经典游戏《太空军校生弹球》中的弹球台实物化,使用3D打印、微控制器和自制弹球机构从零打造真实机械弹球机的项目,并详细描述了回弹缓冲器、落靶、弹弓等机构的设计与改进。

打造一台1997年的Quake PC!

Fabien Sanglard

作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。

@AYi_AInotes: 卧槽,有大神直接用Claude Code,复刻出一整套完整游戏开发工作室。 GitHub 1.8万stars,免费开源,项目名叫Claude Code Game Studios, 48个AI智能体1:1还原线下工作室全岗位,从创意总监到关…

X AI KOLs Timeline

卧槽,有大神直接用Claude Code,复刻出一整套完整游戏开发工作室。 GitHub 1.8万stars,免费开源,项目名叫Claude Code Game Studios, 48个AI智能体1:1还原线下工作室全岗位,从创意总监到关卡设计师全覆盖。 36条斜杠指令一键启动全流程,适配Godot Unity Unreal三大游戏引擎。 自带自动化校验钩子、分路径编码规则、28套行业标准文档模板,架构拉满。 所有AI只做梳理方案不擅自操作,决策权全程握在自己手里。 克隆仓库一键启动,MIT开源可商用,凭空拥有一支专业游戏开发团队。 老规矩GitHub地址评论区自取!