示例工程【免费下载链接】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点击查看免费下载High IQ独立钻石棋是 1978 年经典《Basic Computer Games》合集中的一局逻辑游戏本仓库在00_Alternate_Languages/48_High_IQ/MiniScript/目录下提供了完整的 MiniScript 移植版。本文将围绕 MiniScript 运行说明 展开完整讲解两种官方推荐的运行方式命令行 MiniScript 与 Mini Micro 图形环境并深入到 highiq.ms 的源码剖析棋盘建模、走子合法性判定、终局判定等核心实现最后对照原始 BASIC 版本 说明移植思路。读完本文你既能立刻跑起这局游戏也能理解其数据结构与算法设计可据此复刻到任意语言。游戏背景High IQ 是什么根据 48_High_IQ/README.md 的项目说明High IQ 是一款经典欧洲单人跳棋European solitaire的计算机化版本游戏使用一个十字形cross-shaped棋盘除中心孔外每个孔都插有钉子peg共 32 枚。玩家通过跳子将钉子跳入空孔被跳过的钉子被移除目标是移除全部 32 枚钉子——若无法全部移除则尽可能多移。游戏存在多种可获胜的策略且每种策略在棋盘上可沿八个方向施展。该游戏由 Charles Lund 在荷兰海牙的美国学校The American School in The Hague期间编写最初收录于 1978 年版《Basic Computer Games》。其 BASIC 源码由 Vintage Basic 归档收录本仓库在 48_High_IQ/highiq.bas 保留了原始实现。在仓库结构上00_Alternate_Languages/目录见 00_Alternate_Languages/README.md存放的是不属于约定 10 种主语言、但被社区欢迎的备选语言移植版MiniScript 移植即归此类主要供教育学习用途。该目录下每个游戏子目录都遵循游戏名/MiniScript/README.md *.ms的组织方式High IQ 对应 MiniScript 目录其中包含两个文件README.md移植说明与运行指南即本文主体文档highiq.ms完整可运行的 MiniScript 源码约 160 行。运行方式一命令行 MiniScript关联文档给出的第一种运行方式是使用 MiniScript 的命令行解释器Command-Line MiniScript。完整步骤如下前往 MiniScript 官方命令行版本下载页获取适配你操作系统的安装包按官方说明完成安装确保miniscript命令可用在终端中进入本仓库的00_Alternate_Languages/48_High_IQ/MiniScript/目录或用绝对路径指定文件执行miniscript highiq.ms程序随即启动先打印标题与带钉子编号的初始棋盘图提示玩家记下编号后按回车开始之后进入输入走子编号 → 显示更新棋盘 → 判定终局的循环。运行方式二Mini Micro 图形环境第二种方式是在 Mini MicroMiniScript 官方内置的虚拟计算机/图形环境中运行适合希望在图形化文件系统与终端中操作的用户下载并启动 Mini Micro点击顶部磁盘槽位top disk slot选择Mount Folder...挂载文件夹在弹出的对话框中选择包含highiq.ms与README.md的 MiniScript 文件夹即本仓库的00_Alternate_Languages/48_High_IQ/MiniScript/完成挂载在 Mini Micro 的命令行提示符下依次输入load highiq runload会从挂载的文件夹载入highiq.ms程序run则启动它。Mini Micro 方式的好处是不需要单独安装命令行解释器并且加载后可以方便地查看、编辑脚本源码。源码剖析一十字棋盘的建模理解了两种运行方式后再深入 highiq.ms 看棋盘是如何在内存中表达的。setupBoard函数highiq.ms构建了一个 9×9 的二维数组t作为棋盘使用三种数值标记格子状态5该格有钉子pin0该格是空孔hole-5该格无效棋盘外的区域不参与游戏。globals.t [[-5]*10] pinNums [13,14,15,22,23,24,29,30,31,32,33,34,35,38,39,40,41, 42,43,44,47,48,49,50,51,52,53,58,59,60,67,68,69] for row in range(1,9) t.push [-5]*10 for col in range(1,9) if row 2 or row 8 or col 2 or col 8 or ((row 4 or row 6) and (col 4 or col 6)) then t[row][col] -5 else t[row][col] 5 pinToPos[pinNums.pull] [row,col] end if end for end for t[5][5] 0坐标系中(row 2 or row 8 or col 2 or col 8)抠出 7×7 的方形区域而((row 4 or row 6) and (col 4 or col 6))再抠掉四角恰好形成十字形状随后t[5][5] 0将正中心置为空孔——这正是32 枚钉子 中心空位的经典开局。同时函数用globals.pinToPos字典建立了钉子编号 → [行, 列]的映射33 个有效位置按上、中、下三段的顺序依次分配编号 1369编号模式与原始 BASIC 版完全一致见下节。这套二维数组 编号映射的双重结构是后续所有走子与判定逻辑的基础。源码剖析二走子合法性判定游戏规则要求跳过相邻钉子跳入空孔isValidJumphighiq.ms用非常直观的方式实现了该判定isValidJump function(pinFrom, pinTo) if not pinToPos.hasIndex(pinFrom) then return false posFrom pinToPos[pinFrom] if not isHole(pinTo) then return false posTo pinToPos[pinTo] // check that the Manhattan distance is exactly 2 dist abs(posFrom[0] - posTo[0]) abs(posFrom[1] - posTo[1]) if dist ! 2 then return false // and check that the intervening position contains a pin if t[(posFrom[0]posTo[0])/2][(posFrom[1]posTo[1])/2] ! 5 then return false return true end function判定分三步起点必须是真实存在的钉子isPin见 highiq.ms终点必须是空孔isHole见 highiq.ms起终点的曼哈顿距离必须恰好为 2即水平或垂直相隔一格且二者正中间的那格必须包含一枚钉子。三步全过才算合法跳子。getMovehighiq.ms把该判定封装进一个while true输入循环先询问 Move which piece?若起点是钉子再询问 To where?只有同时通过isHole与isValidJump检查才跳出循环否则打印Illegal move, try again...并重新输入——这保证了非法输入绝不会污染棋盘状态。执行走子则落在doOneMovehighiq.ms将起点格置 0钉子离开、终点格置 5钉子落入、中间格置 0被跳过的钉子移除三次数组写入完成一次完整的跳子。源码剖析三终局判定与计分checkGameOverhighiq.ms遍历棋盘上每一枚钉子检查其上下左右两格远处[row-2, row2]、[col-2, col2]是否存在合法跳点只要找到任意一个合法跳子就立即返回false游戏未结束全部遍历完仍无合法跳子才返回true。主循环highiq.ms则串联起整局流程while true setupBoard printBoard while true doOneMove print printBoard if checkGameOver then break end while print; print The game is over. pinsLeft 0 ... print You had pinsLeft pieces remaining. if pinsLeft 1 then print Bravo! You made a perfect score! print Save this paper as a record of your accomplishment! end if yn input(Play again (yes or no)? ).lower if yn and yn[0] n then break end while print; print So long for now.; print终局后程序统计剩余钉子数遍历数组计数5若恰好剩 1 枚则打印满分祝贺语随后询问 Play again (yes or no)?输入以n开头大小写不敏感.lower统一转小写即退出否则重置棋盘开始新一局。棋盘渲染由printBoardhighiq.ms完成无效格输出两个空格、空孔输出o、钉子输出!与原始 BASIC 版的字符风格保持一致。与原始 BASIC 版的对应关系对照 highiq.bas 可以看出 MiniScript 移植保留了原版的数据结构与流程骨架只是用现代语言特性重写职责BASIC 原版highiq.basMiniScript 移植highiq.ms棋盘建模DIM T(9,9)5/-5/0三态标记L4、L28-L659×9 数组t同三态标记setupBoard钉子编号DATA语句声明 33 个编号 B(M)-7映射L36-L41pinNums列表 pinToPos字典走子合法性借助B()数组与算术判断L100-L190isPin/isHole/isValidJump函数打印棋盘GOSUB 500L56-L72TAB(Y*2)排版printBoard函数更新棋盘GOSUB 1000L73-L98doOneMove函数终局判定GOSUB 1500L99-L133checkGameOver函数值得注意的是BASIC 版的编号体系13、14、15 / 22、23、24 / 2935 / 3844 / 4753 / 58、59、60 / 67、68、69被 MiniScript 版原样继承这意味着两版的走子输入方式与玩家操作体验完全一致也便于对照调试。此外BASIC 版的中心编号为 41B(41)-3即初始空孔与 MiniScript 版t[5][5]0语义等价。运行与验证要点预期输出程序启动后依次打印标题 H-I-Q、Creative Computing 版权行、带编号的完整棋盘图以及压缩版棋盘使用提示游戏过程与结束时的提示语均可在源码print语句中核对如Illegal move, try again...、The game is over.、You had N pieces remaining.、Bravo! You made a perfect score!。两种运行方式的选择仅需终端执行脚本用命令行 MiniScript希望在可视化虚拟磁盘中浏览文件、编辑源码则用 Mini Micro 的 Mount Folder... 挂载方式。二者加载的都是同一个highiq.ms行为一致。适用前提命令行方式要求系统已安装 MiniScript 命令行解释器Mini Micro 方式要求已安装 Mini Micro。本仓库只提供.ms脚本与说明文档不包含解释器本身首次运行前需先完成对应环境的安装与挂载配置。通过本文你既掌握了在两种环境下运行 High IQ MiniScript 移植版的具体操作也理解了其9×9 三态棋盘 编号映射 曼哈顿距离判定的实现范式——这套模式在00_Alternate_Languages目录下其他 MiniScript 移植如 Craps、Diamond 等中同样适用可作为学习 MiniScript 游戏开发与经典游戏移植的参考起点。赞分享示例工程【免费下载链接】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点击查看免费下载相关推荐shopspring/decimal 深入解析Loki 依赖链中防止浮点精度丢失的任意精度十进制库shopspring/decimal 深入解析Loki 依赖链中防止浮点精度丢失的任意精度十进制库 导读 本文以 Loki 仓库中 vendored 的 sh示例工程用 MiniScript 运行经典纸牌游戏 War从安装、运行到源码解析basic-computer-games用 MiniScript 运行经典纸牌游戏 War从安装、运行到源码解析basic computer games 本文以 basic computer g示例工程basic-computer-games 仓库实战用 MiniScript 运行经典《Math Dice》骰子算术教学游戏basic computer games 仓库实战用 MiniScript 运行经典《Math Dice》骰子算术教学游戏 导读 本文以 basic comp示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
