AI 協作的國小運動會《加油!運動會》:跳繩、拔河到大隊接力,跟著音樂按,瀏覽器直接玩
這次想做一款運動類的遊戲,而且是大家都參加過的:國小運動會。司令台、萬國旗、四個班的帳篷、家長在旁邊加油,中午吃便當,下午壓軸的大隊接力分數加倍。
四個班照學校常見的叫法,分成甲乙丙丁。主角是丁班,去年總成績最後一名,今年想翻身;去年的冠軍是甲班。一天裡要比七個項目:
| 時段 | 項目 |
|---|---|
| 上午 | 跳繩、丟沙包、兩人三腳 |
| 中午 | 便當時間(存檔) |
| 下午 | 拔河、滾大球、躲避球 |
| 壓軸 | 大隊接力(分數加倍) |
每個項目比完看名次,第一名 4 分,依序 3、2、1 分。最後在頒獎台上看總成績,結尾有三種,看你這一天比得怎樣。學校、班級和人物都是虛構的。
這款遊戲叫《加油!運動會》(SPORTS DAY),是一款懷舊電視遊樂器格式的遊戲,整個遊戲檔 2 MB。規則、程式、畫面、角色、十首歌都是 AI 做的。AI 實際工作約 150 分鐘,按 API 牌價換算約 33 美元。
在瀏覽器直接玩:aixsfc.app/player/?load=sportsday。可以免費玩,想分享給朋友,請給他們這個網址。
怎麼玩









- 跟著音樂按。 大部分項目考的是節奏和時機,不是手速。拔河、兩人三腳、滾大球上方有一條拍子條,三角形滑到圓圈的那一刻按;大隊接力、兩人三腳左下角會顯示該出哪一隻腳,該按的時候變成金色。亂按會亂了節奏,反而輸。
- 跳繩:繩子轉到腳下時按 A。每跳一下繩子快一點,絆到就從慢的重新開始。三個人各跳 20 秒,加起來比。
- 丟沙包:上下鍵選角度,A 開始蓄力,再按一次 A 丟出去。每個沙包的風不一樣:角度低,風的影響小,但力道要抓得準;角度高,容易進,但容易被吹偏。
- 兩人三腳:搭檔喊「一」按左、「二」按右。連續對拍步伐會越跨越大;按錯腳,兩個人一起跌倒。
- 拔河:在「咻」的時候按 A,連續對準,全班的力氣會疊上去。準決賽打甲班,贏了進決賽。
- 滾大球:跟著口令按 A 推球,上下鍵閃過 12 道角錐門,撞到角錐球就停下來。比時間。
- 躲避球:看投手出手前的姿勢:手舉高是高球,按下蹲;身體壓低是低球,按 B 跳;手往後拉是正面的球,按 A 接住,還能救回一個出局的同學。
- 大隊接力:左右鍵跟著腳步的拍子輪流按,對拍就加速。到交棒區按 A 交棒,太早會掉棒。
- 三種難度、自由練習。 簡單(低年級、親子)、普通、困難,差別只在判定時間的寬窄和別班的實力。自由練習可以單獨玩任何一個項目,適合輪流玩。
先做試玩版,再做完
AI 先寫了企劃:七個項目、一天的流程、每個項目「怎麼玩、按哪些鍵」,再決定試玩版先做跳繩、拔河、大隊接力三項,從開幕一路玩到頒獎。試玩版之後補上其他四項,變成完整的一天。
運動遊戲和我們之前做的角色扮演、潛行解謎差很多,所以這次不沿用之前的遊戲引擎,只沿用和類型無關的部分:中文字型和文字框、音效驅動、建置工具。
試玩之後改的主要是手感:大隊接力原本每個八分音符一步太快,改成每個四分音符一步、判定時間放寬;兩人三腳加上拍子條;躲避球出手前的按鍵不算。還有一次是拍子對不準:AI 在模擬器裡量出每一拍的鼓聲落在哪一格,把判定點校正到聽到拍子之後一點點,播放器的聲音延遲也改成固定,不再忽快忽慢。
怎麼確認難度剛好
AI 寫了機器人玩家:它直接讀遊戲記憶體裡的拍子,再依「程度」故意偏一點按。分五種程度:
- 完美:每次都在拍子上。
- 好:都在判定時間內。
- 普通:偏差到判定時間再多 2 格,約四次有一次失誤。
- 隨便:偏差到判定時間的兩倍。
- 亂按:沒有節奏,一直按。
每個項目、每種難度、每種程度各比 6 場(一個項目 90 場)。下表是「普通」程度贏了幾場:
| 項目 | 簡單 | 普通 | 困難 |
|---|---|---|---|
| 跳繩 | 6/6 | 3/6 | 0/6 |
| 丟沙包 | 6/6 | 3/6 | 0/6 |
| 兩人三腳 | 6/6 | 3/6 | 0/6 |
| 拔河 | 6/6 | 0/6 | 0/6 |
| 滾大球 | 6/6 | 4/6 | 0/6 |
| 躲避球 | 6/6 | 4/6 | 2/6 |
| 大隊接力 | 6/6 | 6/6 | 2/6 |
「好」程度在每個項目、每種難度都幾乎全贏,亂按都贏不了。丟沙包沒有拍子,機器人用和遊戲同一套飛行規則算出能進籃的力道範圍,再依程度偏一點。
另外也讓機器人從標題玩到頒獎,三種結尾都走到:
| 機器人 | 難度 | 丁班總分 | 最高的別班 | 結尾 |
|---|---|---|---|---|
| 完美 | 普通 | 32 | 21 | 總冠軍 |
| 普通 | 普通 | 24 | 24 | 總冠軍(同分算丁班) |
| 隨便 | 簡單 | 16 | 26 | 第 3 名 |
| 亂按 | 普通 | 8 | 28 | 第 4 名 |
AI 執行的做法
- 一個項目一個模組。 七個項目各自有規則、對手、畫面,用 65C816 組合語言寫成,共用文字框、計分板和頒獎。對手班級不是照劇本走,是依各班的實力,用和玩家一樣的規則模擬出來。
- 拍子跟著音樂走。 每個項目有一個「節拍器」,用畫面的格數計時(每秒約 60 格),一拍 32 或 40 格,剛好是歌曲的一個四分音符。比賽中不重畫文字,因為重畫一次超過一格的時間,拍子就會慢一格。
- 用耳朵以外的方法對拍。 在模擬器裡錄下每一格的聲音,找出音量突然變大的格(鼓聲、音符的開頭),和節拍器比對;改了程式就重量一次。
- 畫面全部用程式畫。 操場是一張 512 像素寬、左右可以接起來的圖:萬國旗、教室、司令台、四班帳篷和家長、四線跑道。大隊接力的天空、校舍和跑道用不同速度捲動(HDMA)。小朋友有側面 8 種、正面 5 種動作,四個班用不同的顏色。
- 十首歌都是新寫的。 標題、跳繩、拔河、接力、午餐、頒獎、丟沙包、兩人三腳、滾大球、躲避球,用 MML(文字寫的樂譜)寫成,再轉成遊戲機的音源資料。
成本
| AI 工作時間 | 約 150 分鐘(企劃、試玩版和完整版約 132 分鐘,試玩後的手感修正約 18 分鐘) |
| 模型 | Claude Opus 5.5,共約 330 則回覆 |
| AI 輸出 token | 約 38 萬 |
| 處理的 token 總數 | 約 1 億(大部分是快取讀取) |
| 估計費用 | 約 33 美元(以 2026 年 11 月的 Anthropic API 牌價換算;訂閱方案計費方式不同) |
| 其他費用 | 0:字型是開放授權,其餘都是為這款遊戲製作的 |
版本紀錄
| 版本 | 改了什麼 |
|---|---|
| 1.261107.6 | 大隊接力的判定時間放寬 |
| 1.261107.5 | 拍子對準音樂,判定時間內的提示變金色;兩人三腳加上拍子條;躲避球出手前的按鍵不算 |
| 1.261107.4 | 兩人三腳:搭檔的口令改成白色對話框「一 左」「二 右」,草地上顯示該出的腳 |
| 1.261107.3 | 完整的一天:加上丟沙包、兩人三腳、滾大球、躲避球;大隊接力按錯腳也算一步 |
| 1.261107.2 | 大隊接力改成每個四分音符一步,判定時間放寬 |
| 1.261107.1 | 拔河的小朋友不再被切掉 |
| 1.261107.0 | 試玩版:跳繩、拔河、大隊接力 |
還沒做的
- 難度是機器人算出來的,真人玩起來的手感,還需要更多人試玩。
- 節奏項目在手機觸控上還沒仔細試過,判定時間可能需要再調。
想用 AI 做自己的遊戲,在空資料夾執行 npx https://aixsfc.app/skill/aixsfc.tgz 再開 claude,說明在首頁。
來源與授權
- 字型:Cubic 11(俐方體11號),ACh-K,SIL Open Font License 1.1。
- 學校、班級、人物:虛構。
- 程式、規則、畫面、角色、音樂:為這款遊戲從零製作。