ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Awari 游戏 MiniScript 移植版:运行指南与源码实现解析(basic-computer-games)

Awari 游戏 MiniScript 移植版:运行指南与源码实现解析(basic-computer-games) 示例工程【免费下载链接】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点击查看免费下载Awari也称 Kalah / Mancala 类游戏是《Basic Computer Games》经典书籍中的文字策略游戏本仓库在00_Alternate_Languages/04_Awari/MiniScript/下提供了完整的 MiniScript 移植版。本文以该目录下的 README.md 为核心结合 awari.ms 源码与仓库内的规则文档、原始 BASIC 版本系统讲解如何在命令行 MiniScript 与 Mini Micro 两种环境中运行游戏并深入剖析其 14 槽棋盘模型、播种与捕获规则、双层2-ply博弈评估以及“失败开局记录”学习机制的完整实现。读完本文你将能独立运行、阅读乃至改造这份 MiniScript 移植代码。一、关联文档说了什么MiniScript 目录下的 README 是官方移植说明它明确了三个要点来源程序源码最初下载自 Vintage Basic经典 BASIC 游戏存档站随后被转换为 MiniScript 语言。两种运行方式命令行 MiniScript下载对应系统的命令行解释器安装后执行miniscript awari.msMini Micro下载 Mini Micro 桌面环境挂载包含awari.ms与本 README 的文件夹然后在 Mini Micro 命令提示符下执行load awari和run。目录内同时提供 awari.ms 源码与 README 本身。二、游戏背景与规则速览在动手运行前先理解游戏本身。仓库主游戏目录的 04_Awari/README.md 给出了权威规则说明棋盘构成Awari 使用 14 个槽位——双方各有 6 个“坑”pit外加两端各 1 个“家”home。开局时除两个家外每个坑放 3 枚石子共 36 枚。走法从己方任意非空坑取出全部石子按逆时针方向从该坑右侧的下一坑开始逐坑播种每坑 1 枚。连续回合若最后一枚石子落入己方“家”可再走一步最多两步。捕获若最后一枚石子落入空坑、且对侧坑镜像位置非空则将对方对侧坑全部石子连同刚落下的这一枚一起捕获进自己的家。胜负当某一方所有 6 个坑都为空时游戏结束家中石子多者获胜。原书版本中计算机始终让玩家先手并认为这给了玩家轻微优势。在计算机版本中棋盘以 14 个数字打印形如3 3 3 3 3 3 0 0 3 3 3 3 3 3下方是你的 6 个坑从左到右编号 1–6上方是计算机的 6 个坑。三、两种运行方式详解以下命令与步骤均出自关联 README可直接复现。方式一命令行 MiniScript从 MiniScript 官网的 command-line 页面下载对应操作系统的命令行解释器并安装后在终端进入 MiniScript 目录执行miniscript awari.ms程序启动后会先打印标题Awari与Creative Computing Morristown, New Jersey随后立即进入第一局游戏等待Your move?输入。方式二Mini Micro 桌面环境下载并启动 Mini Micro点击顶部磁盘槽位选择 “Mount Folder...”选中包含 awari.ms 与 README 的MiniScript文件夹在 Mini Micro 命令提示符下依次输入load awari run两种方式运行的逻辑完全一致仅解释器环境不同。Mini Micro 额外提供了图形化文件系统与调试界面更适合边运行边单步观察。四、源码结构与 14 槽棋盘模型awari.ms 全文件约 146 行结构清晰badGames跨局记录失败/平局开局的列表学习机制核心printQty(qty)/printBoard棋盘格式化输出moveStones(board, position, homePos)播种与捕获的底层逻辑getPlayerMove(prompt)玩家输入校验getComputerMove计算机走子与 2-ply 评估isGameOver/playOneGame单局流程末尾while true主循环无限对局。棋盘用长度为 14 的列表表示源码注释写“13 个数”属笔误实际为 14 个元素索引 0–5玩家下方6 坑玩家输入 1–6内部映射为pos - 1索引 7–12计算机上方6 坑索引 6玩家“家”索引 13计算机“家”。开局通过globals.board [3]*14; board[13] 0; board[6] 0完成——除两个家外全部放 3 枚。这一布局与原始 BASIC 版本 00_Alternate_Languages/04_Awari/awari.bas 中的FOR I0 TO 12:B(I)3:NEXT I完全一致。播种与捕获moveStonesmoveStones function(board, position, homePos) p board[position]; board[position] 0 while p position (position 1) % 14 board[position] 1 p - 1 end while if board[position] 1 and position ! 6 and position ! 13 and board[12-position] then board[homePos] board[12-position] 1 board[position] 0 board[12-position] 0 end if globals.gameOver board[0:6].sum 0 or board[7:13].sum 0 return position homePos end function关键点用(position 1) % 14实现逆时针环绕播种捕获条件是落点为空坑、非两个家、且镜像坑12 - position非空——镜像映射正是 BASIC 版B(12-M)的直译每步结束后立即用board[0:6].sum 0 or board[7:13].sum 0判断是否有一方清空从而触发终局返回值position homePos告知调用方“最后一子是否落进自己家”决定是否可连续走第二步。玩家输入校验getPlayerMove玩家输入 1–6函数将其转换为 0–5 的坑索引并拒绝非法输入越界或坑为空不断循环直到合法getPlayerMove function(promptYour move) while true pos input(prompt ? ).val if 0 pos 7 and board[pos-1] then return pos - 1 print Illegal move. end while end function这一步对应 BASIC 版的110 INPUT M ... 130 IF B(M)0 THEN 120输入重试逻辑且明确支持小写输入input后直接.val取数值无大小写限制符合仓库“modern coding conventions”的移植要求。五、计算机 AI2-ply 评估与失败开局学习计算机决策是这份源码最有技术含量的部分分两层1. 双层2-ply博弈评估getComputerMove对计算机每个合法走法索引 7–12执行以下流程复制棋盘boardCopy board[:]模拟走子moveStones board, j, 13枚举玩家所有可能的回应索引 0–5用数学估算“玩家该走法的得分”先计算落点landPos board[i] i环绕取模若落点为空且非家则score board[12 - landPos]计入捕获收益取所有玩家回应中的最大得分bestPlayerScore用零和思想计算本走法的质量分ourScore board[13] - board[6] - bestPlayerScore——计算机家中的石子减去玩家家中的石子再减去玩家最优回应的威胁恢复棋盘globals.board boardCopy[:]遍历完所有合法走法后取最高分对应的走法。这正是原始 BASIC 子程序 800 行的直译BASIC 版同样先备份G(I)B(I)、遍历 J7–12、对每个玩家回应打分QB(13)-B(6)-Q、再恢复B(I)G(I)。注意 Python 移植版 04_Awari/python/awari.py 的移植注释中明确指出BASIC 原版830 IF L13 THEN LL-14:R1:GOTO 830中R1疑似应为RR1每绕一圈加分Python 版将其修正为累加而 MiniScript 版直接用floor(landPos / 14)累加圈数行为与修正后一致。2. “失败开局”学习机制badGames源码顶部注释道出了设计意图保留以往输掉或平局对局的前 8 步开局走法序列用于惩罚未来重复相同开局。每局结束后playOneGame会把本局前 8 步走法存入gameMoves若本局是玩家获胜或平局且该序列尚未记录则加入badGamesif badGames.indexOf(gameMoves) null then badGames.push gameMoves评估走法时若当前累计走法gameMoves [j]与某个badGame前缀完全匹配则该走法质量分减 2ourScore - 2这个机制只在gameMoves.len 8时生效即只“惩罚”开局阶段。对比 Python 版的实现细节更有意思Python 版用losing_book以六进制编码整局走法历史losing_book[game_number] * 6 move_digitMAX_HISTORY 9、LOSING_BOOK_SIZE 50BASIC 原版同样用F(N)F(N)*6K编码。而 MiniScript 版选择了更直观的“走法序列列表 前缀匹配”方案可读性更强功能等价——这正是仓库所倡导的“把原代码中巧妙技巧拆解为更简单、注释充分的代码”。3. 对局主流程playOneGame主循环完整复刻原书流程打印棋盘getPlayerMove取玩家走法moveStones(board, pos, 6)执行若落点在自己家且未结束打印棋盘并询问Again再走第二步轮到计算机打印My move is后调用getComputerMove用char(42bestMove)输出 A–F 字母标记走法若可连续则打印...followed by再走一次任一步后若gameOver则立即跳出终局打印GAME OVER以board[6] - board[13]判定胜负负则“I win by N points”且不记录进 badGames零分打印Drawn game正分打印You win by N points后两者记录进 badGames。char(42bestMove)的输出方式也忠实还原了 BASIC 版PRINT CHR$(42M)保证命令行输出与原书风格一致。六、玩法提示与可扩展方向先手提示程序始终让玩家先走输入 1–6 选择己方坑位若上一子落入自家会提示Again。获胜条件提醒不要只顾着捕获注意游戏结束条件是“某一方 6 坑全空”提前布局让对手无子可走同样是取胜策略。想调整难度或规则可参考 Python 移植版 awari.py 顶部 “EXERCISES FOR THE READER” 列出的改造点改变每坑初始石子数、增减坑数、限制捕获范围、禁止捕获、顺时针播种、允许超过两步连走、加深 AI 前瞻层数、将学习历史持久化到磁盘等——这些思路同样适用于 MiniScript 版本。七、小结MiniScript 版 Awari 是“老游戏、新语言”移植的典型范例它用约 146 行紧凑代码完整保留了原书玩法、14 槽棋盘输出格式与 AI 行为同时通过badGames列表将原版晦涩的六进制失败开局编码改造成可读的前缀匹配方案。无论你是想体验 1978 年的经典棋类博弈还是想研究“2-ply 极小化极大 简单经验学习”在脚本语言中的落地实现awari.ms 都是一份值得通读的样例而 04_Awari/README.md 中的规则与 Python 移植版 的移植注释则提供了最完整的背景对照。赞分享示例工程【免费下载链接】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 中 Bug 游戏的 MiniScript 移植版安装运行与源码解析basic computer games 中 Bug 游戏的 MiniScript 移植版安装运行与源码解析 本篇文章基于 basic computer ga示例工程basic-computer-games 之 Hurkle 游戏 MiniScript 移植版三种运行方式与源码逐行解析basic computer games 之 Hurkle 游戏 MiniScript 移植版三种运行方式与源码逐行解析 本指南以 00_Alternate_示例工程WeKnora 技术全景指南企业级 RAG、ReAct Agent 与自动 Wiki 知识平台的架构与部署实践WeKnora 技术全景指南企业级 RAG、ReAct Agent 与自动 Wiki 知识平台的架构与部署实践 WeKnora 是腾讯开源的 LLM 知识平台示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表