资讯动态

Basic Computer Games 之 Hello 游戏非主流语言移植全解析:ANSI C / Go / MiniScript / Swift 端口的定位、实现与运行

发布时间:2026/9/23 16:38:18 来源:尧图企业网站定制
示例工程【免费下载链接】basic-computer-gamesAn updated version of the classic Basic Computer Games book, with well-written examples in a variety of common MEMORY SAFE, SCRIPTING programming languages. See https://coding-horror.github.io/basic-computer-games/项目地址https://gitcode.com/gh_mirrors/ba/basic-computer-games点击查看免费下载本文以 00_Alternate_Languages/45_Hello/README.md 为核心文档围绕经典《Basic Computer Games》合集中 Hello 游戏的非主流语言移植展开先阐明 Alternate Languages 目录的定位与遴选标准再逐一解析 ANSI C、C、Go、MiniScript、Swift 五份移植实现的流程结构与关键代码最后给出各端口的运行方式和新增移植的贡献指引。读完本文你将理解该项目10 大语言 任意附加语言的组织策略并能对照原始 BASIC 程序读懂任意一种端口的移植逻辑。一、文档背景Alternate Languages 目录是什么Hello 游戏所在的 00_Alternate_Languages 目录存放的是各游戏在非约定 10 大语言下的实现。按 00_Alternate_Languages/README.md 的说明主仓库约定的 10 种语言需要同时满足三项标准流行Popular以 TIOBE 指数衡量内存安全Memory safe通常被视为脚本语言Generally considered a scripting language。而 Alternate Languages 目录中的实现不受这三项标准约束——因此这里允许出现 C、Pascal 这类非脚本语言本游戏的 hello.c 就是典型例子。目录还给出了两条移植规范忠实还原原貌尽量保持与原版一致的控制台应用观感console applications保持可移植性除非无法做到否则尽量保持代码可移植并在 README 和文件夹命名中明确说明任何平台限制。需要特别强调的是这些附加移植仅供教育目的for educational purposes only不计入项目最终的目标移植数量。这也是 00_Alternate_Languages/45_Hello/README.md 要求读者参考父目录 README的原因——单看子目录文档只有一段说明其完整的组织规则都定义在父目录中。二、游戏本体Hello 的原始 BASIC 程序结构Hello 是一个趣味交互程序心理咨询师模拟原始实现位于 00_Alternate_Languages/45_Hello/hello.bas。它虽然以Hello命名但核心逻辑是一条完整的对话状态机主要分为五个阶段阶段BASIC 行号行为标题输出2–6用TAB定位居中打印 HELLO 与 CREATIVE COMPUTING MORRISTOWN, NEW JERSEY询问姓名10–20自我介绍后INPUT WHATS YOUR NAME;N$读取用户姓名询问心情30–85问是否玩得开心非 YES/NO 会循环追问四类咨询125–250按 SEX / HEALTH / MONEY / JOB 四类分发不同回复并支持继续提问收费结尾300–390索要 5 美元咨询费校验是否付款后告别程序的关键设计是三类输入校验循环第 40–65 行的 YES/NO 校验、第 125–140 行的四分类校验C$SEX等分支否则输出IS GREEK TO ME并跳转到 250、以及第 210–217 行的 TOO MUCH/TOO LITTLE 子问题校验。移植时这些循环是忠实度检验的试金石。三、ANSI C 移植经典结构化复刻00_Alternate_Languages/45_Hello/ANSI_C/hello.c 是与 BASIC 结构一一对应的 C 实现它用三个辅助函数清晰表达了移植思路tab(int)循环putchar( )复刻 BASIC 的TAB(33)/TAB(15)居中效果get_input(char*)用fgets读取并用strcspn剔除行尾换行对应 BASIC 的INPUTstrings_match基于strncasecmp做大小写不敏感比较把strings_match(reply, YES)直接映射到 BASIC 的IF B$YES。主函数以done、paid、maybe_more、sure四个状态变量驱动while (!strings_match(reply, YES) !strings_match(reply, NO))正是 BASIC 第 40 行校验循环的翻译。值得注意的是仓库根目录下的 hello.c 与之几乎一致唯一实质差异是strings_match使用strncmp大小写敏感——同一游戏存在两份 C 实现可对照观察移植者对输入容错的取舍。四、Go 移植类型化状态机的现代改写00_Alternate_Languages/45_Hello/go/main.go 是五份移植中结构化程度最高的一份它不再逐行镜像 BASIC而是用现代语言特性重构用type PROBLEM_TYPE int8与iota定义SEX/HEALTH/MONEY/JOB/UKNOWN枚举替代 BASIC 中 130–136 行的四次IF C$...串行比较promptForProblems内用switch strings.ToUpper(scanner.Text())做分类分发default分支返回UKNOWN对应 BASIC 第 138 行的 IS GREEK TO ME每个咨询分支solveSexProblem、solveHealthProblem、solveMoneyProblem、solveJobProblem被拆成独立函数askQuestionLoop承担外层ANY MORE PROBLEMS循环收费阶段用time.Sleep(4 * time.Second)模拟原版 BASIC 第 307 行的空转延时循环FOR I1 TO 2000: NEXT I。这份实现展示了从行号 GOTO 结构到函数 枚举 循环的迁移路径是学习移植方法论的最佳范本。五、MiniScript 移植最贴近原版的脚本化直译MiniScript/hello.ms 采用字符串拼接式直译ns input(Whats your name? )与 BASIC 的INPUT一一对应print *33 Hello用字符串乘法替代TAB。其输入处理值得注意bs input.lower直接在读取时统一转小写随后与yes/no比较等效于 ANSI C 版的大小写不敏感策略。该目录还附有 MiniScript/README.md明确给出了两种运行方式命令行版 MiniScript从 miniscript.org/cmdline 下载安装后执行miniscript hello.msMini Micro 环境下载 Mini Micro挂载该目录为磁盘文件夹在命令行输入load hello后run。这是五份移植中唯一附带运行文档的端口体现了保持可移植性并明确说明限制的目录规范。六、Swift 移植默认值兜底与函数式输出Swift/hello.swift 的移植亮点在于健壮性处理var name STRANGER为姓名提供默认值读取输入后判断if (input ! nil input ! )才覆盖默认名对应 BASIC 中未显式处理的空输入边界情况。tab用字符串拼接spaces 配合print(spaces, terminator:)实现不换行的空格输出get_Input()对readLine()的 nil 结果返回空串并统一uppercased()与 ANSI C 的大小写不敏感策略一致。七、五份移植的实现对照端口文件输入比较策略结构风格状态控制ANSI CANSI_C/hello.cstrncasecmp大小写不敏感函数辅助 循环4 个布尔标志C根目录hello.cstrncmp大小写敏感函数辅助 循环4 个布尔标志Gogo/main.gostrings.ToUpper后比较枚举 独立求解函数函数返回 / 循环MiniScriptMiniScript/hello.msinput.lower统一小写直译脚本while truebreakSwiftSwift/hello.swiftuppercased()统一大写函数辅助 循环4 个布尔标志从源码结构看一个共同的移植模式是把 BASIC 的 GOTO 跳转如IF B$YES THEN 70转换为循环内的break/状态位把行号标签如 145/160/180/200转换为独立函数或分支。这正是把 1970 年代 BASIC 结构迁移到现代语言的通用方法论。八、如何贡献新的移植依据两份 README 的约定向 Alternate Languages 目录新增端口需要遵守以下规则任何语言均可不限于约定的 10 种语言C、Pascal、MiniScript 等非内存安全或非脚本语言同样欢迎忠实原貌保持控制台应用观感与原文案原文案本身是复古风格的一部分声明平台限制代码若依赖特定平台必须在 README 与文件夹命名中明确说明教育用途定位附加端口仅供学习不计入项目移植数量目标也不参与项目末尾的捐赠统计。建议新移植以 00_Alternate_Languages/45_Hello/hello.bas 为唯一行为基准先保证姓名输入、YES/NO 校验、四分类咨询、收费结尾五个阶段完整再参考 go/main.go 的函数化拆分思路组织代码结构。九、总结Hello 游戏的五份附加语言移植是理解《Basic Computer Games》项目多语言移植方法论的绝佳入口它体量小但状态机完整从直译MiniScript到重构Go展示了不同抽象层次的移植风格而 00_Alternate_Languages/README.md 则从项目层面定义了10 大语言三标准 附加端口教育用途的组织策略。无论你想学习如何忠实复刻复古终端交互还是想研究 GOTO 结构如何映射到现代控制流这份 8KB 的 BASIC 程序及其五个端口都值得精读。赞分享示例工程【免费下载链接】basic-computer-gamesAn updated version of the classic Basic Computer Games book, with well-written examples in a variety of common MEMORY SAFE, SCRIPTING programming languages. See https://coding-horror.github.io/basic-computer-games/项目地址https://gitcode.com/gh_mirrors/ba/basic-computer-games点击查看免费下载相关推荐Basic Computer Games 之 Animal备用语言移植Go / MiniScript实现与原理解析Basic Computer Games 之 Animal备用语言移植Go / MiniScript实现与原理解析 导读 00_Alternate_Lan示例工程EdgeLM/fairseq 示例实战基于往返翻译与混合专家模型的文本改写ParaphrasingEdgeLM/fairseq 示例实战基于往返翻译与混合专家模型的文本改写Paraphrasing 本文围绕 fairseq 生态中的 paraphras示例工程Basic Computer Games 备选语言移植指南Batnum 的 Go 与 MiniScript 实现深入解析Basic Computer Games 备选语言移植指南Batnum 的 Go 与 MiniScript 实现深入解析 BATNUMBattle of N示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价