
示例工程【免费下载链接】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点击查看免费下载导读TRAIN 是《Basic Computer Games》中的经典时间-速度-距离数学练习题原版以 BASIC 编写。本仓库将其移植到了 MiniScript 语言源码位于 00_Alternate_Languages/91_Train/MiniScript/train.ms配套的 MiniScript 版 README 给出了三种运行途径。阅读本文后你将掌握在浏览器、命令行和 Mini Micro 三种环境下运行该游戏的完整步骤并能逐行理解 MiniScript 移植版的算法实现与判定逻辑。一、TRAIN 游戏简介与原版背景TRAIN 是一个自动生成小学数学应用题的程序程序随机设定一辆汽车和一趟火车的速度并给出二者完成同一段行程的时间差要求玩家推算出汽车单独走完该行程需要多少小时。玩家的答案会被换算成误差百分比与 5% 的容差阈值比较给出GOOD或Sorry的反馈随后可继续出下一题。原版 BASIC 程序位于 00_Alternate_Languages/91_Train/train.bas其开头保留了 1970 年代 Creative Computing 的标题行CREATIVE COMPUTING MORRISTOWN, NEW JERSEY。仓库将其归类为Alternate Languages即不属于约定的十种主力语言的额外移植同目录下还提供了 D 版本 和 Nim 版本这些额外移植仅作教学用途。MiniScript 版本由 Ryushinaka 与 Joe Strout 共同完成移植。二、三种运行方式README 核心内容关联文档 MiniScript/README.md 明确给出了三种运行途径下面逐一展开并补充可操作的细节。方式一Web 端 Try-It! 页面零安装这是最快的体验方式无需在本地安装任何软件打开 MiniScript 官网的 Try-It! 页面清空源代码编辑器中默认的程序将 train.ms 的全部内容粘贴进去点击 Run Script 按钮运行。该页面直接在浏览器中执行 MiniScript 代码适合快速验证、教学演示或临时体验。方式二命令行版 MiniScript本地运行适合日常开发与脚本化运行根据操作系统从 MiniScript 官网下载对应的命令行版本并安装在终端进入本仓库的00_Alternate_Languages/91_Train/MiniScript/目录执行miniscript train.ms命令行版 MiniScript 会直接解释执行train.msinput函数在此环境下读取标准输入回车后即可进入问答循环。方式三Mini Micro 虚拟机复古环境Mini Micro 是一个仿复古微型计算机的 MiniScript 运行环境从 MiniScript 官网下载 Mini Micro 并启动点击顶部磁盘槽位选择 Mount Folder...挂载文件夹选择包含train.ms与该 README 文件的MiniScript文件夹在 Mini Micro 命令提示符下依次输入load train runload会加载挂载文件夹中的train.ms文件名无需扩展名run启动游戏。这种方式最贴近上世纪个人电脑放入磁盘、加载程序的操作体验。三、移植版源码逐段解析将 train.ms 与 train.bas 对照可以看到移植过程保留了完整的算法骨架同时用 MiniScript 惯用语法重写了输入输出。3.1 标题与随机出题while true print TRAIN print CREATIVE COMPUTER MORRISTOWN, NEW JERSEY print print TIME - SPEED DISTANCE EXERCISE carSpeed floor(25*rnd 40) difference floor(15*rnd 5) trainSpeed floor(19*rnd 20) print A car traveling carSpeed MPH can make a certain trip in print difference hours less than a train traveling at trainSpeed MPH.外层while true构成无限循环直到玩家选择不再继续才break这与 BASIC 中GOTO 10的题号跳转循环语义一致。随机参数直接对应原 BASIC 的INT(25*RND(1))40等表达式汽车速度范围4064 MPH、时间差519 小时、火车速度2038 MPH。MiniScript 的rnd返回[0,1)区间的浮点数floor(...)向下取整得到整数与 BASIC 的INT行为相同。3.2 答案计算与误差判定answer input(How long does the trip take by car? ).val carTime difference*trainSpeed/(carSpeed-trainSpeed) error round(abs((carTime-answer)*100/answer)) if error 5 then print GOOD! Answer within error PERCENT. else print Sorry. You were off by floor(error) percent. print Correct answer is round(carTime, 1) hours. end if核心算法与 BASIC 版第 45 行VD*T/(C-T)完全一致汽车用时 时间差 × 火车速度 ÷汽车速度 − 火车速度该公式由行程相等推导而来若行程距离为 S汽车用时为 t 小时则火车用时为 td于是carSpeed×t trainSpeed×(td)解得t d×trainSpeed/(carSpeed−trainSpeed)。两点值得注意的移植差异输入处理MiniScript 通过input(...).val直接把字符串输入转换为数值val等价于val()函数一步完成 BASIC 中INPUT A的读取与类型转换。误差公式error round(abs((carTime-answer)*100/answer))以玩家答案而非正确答案为分母。这在玩家输入 0 或极小值时会导致误差趋近无穷大但在正常输入下行为与原版一致可以视为移植时保留的原版语义BASIC 版第 50 行同样以A为分母并四舍五入取整。判定容差为5%误差小于 5 输出GOOD!否则输出Sorry并给出保留一位小数的正确答案round(carTime, 1)。3.3 再来一题的循环控制answer input(Another problem (YES or NO)? ) if not answer or answer[0].upper ! Y then break end whileanswer[0]取输入字符串的第一个字符.upper转为大写后与Y比较——即输入y/Y/yes/Yes等任意以 Y 开头的回答都会继续出题其余输入一律退出循环。if not answer先处理空输入避免空字符串访问[0]越界。对比 BASIC 原版IF A$YES THEN 10必须精确输入YES才继续MiniScript 移植版对用户输入更宽容这是移植时合理的人性化改进。D 语言移植版在 train.d 中则显式接受YES/Y/yes/y四种输入思路类似。四、多语言移植对比一览同一目录下的三个移植版本可以直观地看到同一算法在不同语言中的表达差异语言文件随机数生成输入读取误差计算BASIC原版train.basINT(25*RND(1))40INPUT AINT(ABS((V-A)*100/A).5)MiniScripttrain.msfloor(25*rnd 40)input(...).valround(abs(...*100/answer))Dtrain.duniformreadf!%f\n以carTime为分母Nimtrain.nimrand(41..65)readLine(stdin)以guess为分母从源码结构可以推断各移植版都遵循随机出题 → 读取答案 → 误差判定 → 询问是否继续的统一流程区别主要集中在随机数 API、输入解析和误差分母的选择上。其中 MiniScript 版本以answer为误差分母最忠实于 BASIC 原版语义。五、本仓库中的 MiniScript 生态TRAIN 的 MiniScript 移植并非孤例。使用*.ms文件搜索可以发现本仓库在00_Alternate_Languages/下拥有 101 个 MiniScript 文件覆盖了 Acey Ducey、Bagels、Hangman、Tic-Tac-Toe 等经典游戏。因此本文介绍的三步运行法Try-It! 粘贴、命令行miniscript xxx.ms、Mini Micro 挂载文件夹对仓库内所有 MiniScript 移植版普遍适用——只需把文件名换成对应的.ms即可。六、快速上手总结零安装体验打开 Try-It! 页面 → 清空编辑器 → 粘贴 train.ms 内容 → 点击 Run Script。本地命令行安装命令行版 MiniScript 后执行miniscript train.ms。复古模拟器Mini Micro 中挂载MiniScript文件夹执行load train与run。程序启动后会随机生成一道汽车与火车的速度应用题玩家输入猜测的汽车用时后程序按时间差 × 火车速度 ÷汽车速度 − 火车速度)计算正确答案并以 5% 误差为阈值给出评判随后询问是否继续。整个交互循环用不到 30 行 MiniScript 代码实现非常适合作为学习 MiniScript 输入输出、字符串处理.val、[0].upper与循环控制的入门范例。赞分享示例工程【免费下载链接】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点击查看免费下载相关推荐用 MiniScript 运行经典纸牌游戏 War从安装、运行到源码解析basic-computer-games用 MiniScript 运行经典纸牌游戏 War从安装、运行到源码解析basic computer games 本文以 basic computer g示例工程Kinema 游戏 MiniScript 移植版全解析三种运行方式、源码原理与 BASIC 移植对比Kinema 游戏 MiniScript 移植版全解析三种运行方式、源码原理与 BASIC 移植对比 本篇技术指南以 basic computer games示例工程在 basic-computer-games 中用 MiniScript 移植经典「数字对战」游戏 Batnum源码解析与运行指南在 basic computer games 中用 MiniScript 移植经典「数字对战」游戏 Batnum源码解析与运行指南 BatnumBattle示例工程上一篇如何快速解决魔兽争霸3兼容性问题现代电脑优化完全指南下一篇3个关键步骤搭建家庭游戏串流服务器Sunshine实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考