Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
パズルゲームの作り方 / how to make puzzle games
Search
kaityo256
PRO
September 24, 2026
Programming
26
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
パズルゲームの作り方 / how to make puzzle games
2026年9月24日研究室ミーティング
kaityo256
PRO
September 24, 2026
More Decks by kaityo256
See All by kaityo256
What is XAI?
kaityo256
PRO
0
180
勾配ブースティングと決定木の話 / gradient boosting and decision trees
kaityo256
PRO
7
1.8k
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
6.1k
この講義について / 00-setup
kaityo256
PRO
2
520
GitHubによるWebアプリケーションのデプロイ / 07-github-deploy
kaityo256
PRO
2
440
演習:Gitの基本操作 / 04-git-basic
kaityo256
PRO
1
710
演習:Gitの応用操作 / 05-git-advanced
kaityo256
PRO
1
400
演習:GitHubの基本操作 / 06-github-basic
kaityo256
PRO
1
510
バージョン管理とは / 01-a-vcs
kaityo256
PRO
2
530
Other Decks in Programming
See All in Programming
Heart of Swift Concurrency
koher
0
950
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
460
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
AHC070解法紹介
eijirou
0
130
Family mrubyの進捗
kishima
1
130
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
560
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
370
FreeBSDでZabbixを動かす
kenkino
0
310
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
410
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
550
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
380
Featured
See All Featured
The Curse of the Amulet
leimatthew05
3
15k
The browser strikes back
jonoalderson
0
1.7k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
420
Scaling GitHub
holman
464
140k
Balancing Empowerment & Direction
lara
6
1.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
KATA
mclloyd
PRO
35
15k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Unsuck your backbone
ammeep
672
58k
Transcript
パズルゲームの作り方 慶応義塾大学理工学部物理情報工学科 渡辺 2026年9月24日 1 29
渡辺研でのゲーム研究 ゲームを題材とした卒論や修論 • • • • • 湯瀬遼「マインスイーパーを題材とした機械学習モデルの開発と解析」(2022年度卒業論文) 石井千温「どうぶつしょうぎを題材としたドメインフリーAIの作成と解析」(2023年度卒業論文) 佐藤孝太「リアルタイム対戦型ゲームAIの開発と解析」(2024年度卒業論文)
孫田悠河「倉庫番を題材とした機械学習による環境の難易度定義」(2024年度卒業論文) 湯瀬遼 「ガイスターを題材とした不完全情報ゲームへの機械学習の適用」(2024年度修士論文) その他、多数のプロジェクトが進行中 どうぶつしょうぎAI https://semimaru141.github.io/dobutsu_front/ AIによる倉庫番の難易度評価 https://yuga-jp.github.io/sokoban-web-app/ 2 29
ゲームの研究をしているんだから ゲームくらい作れますよね? Challenge accepted. 3 29
渡辺が以前作ったゲーム 2000年2月17日 https://forest.watch.impress.co.jp/article/2000/02/17/anahoriwars2.html 修士1年の時リリース 2001年1月12日 https://forest.watch.impress.co.jp/article/2001/01/12/hoshikoubou.html 修士2年の時リリース(修論提出直前……) 4 29
パズルゲーム制作 パズルゲームで最も面倒なのはステージ制作 • 難しいステージを作るのは難しい • たくさんステージを作るのは大変 そこで:たくさん作って、選ぶ 問題を大量に自動生成 あとでよさそうなのを選ぶ 5
29
最近作ったゲーム AIの助けを借りて二つのパズルゲームをリリース https://kaityo256.itch.io/hodoku https://kaityo256.itch.io/stardust-sweeper ステージを大量に自動生成して、あとで抽出した 6 29
AIを使ったゲーム開発 この発表で伝えたいこと • AIをどう使ってゲームを開発したか • 実際の制作で難しいのはどこか • どのようにステージを自動生成したか • 難易度制御と評価をどうやったか?
7 29
ゲーム制作ワークフロー(1/2) 1. ウェブ版ChatGPTと相談して仕様を決める (トークン消費を抑えるため) ゲームの全体的な仕様 Me PLAN.md ステージジェネレータの仕様(C++) ChatGPT PLAN_maker.md
ゲーム実装の仕様(GDScript) PLAN_game.md 8 29
ゲーム制作ワークフロー (2/2) 2. 作った仕様をCodex (ChatGPT)に食わせる PLAN_maker.md Stage Generator 3. ステージの生成
ランダムに大量生成 ここが一番難しい よさそうなのを選ぶ できた奴をゲームへ 9 29
Hodoku Hodoku: 「ほどく」から Features • ブラウザで直接遊べる • シンプルなマウス or タッチ操作
• 4レベル、全40ステージ構成 Rules • 二つの宝石を選んで位置を交換する • 各宝石は他の二つの宝石とボンドでつながって いる • 上下左右に隣接するとボンドが白くなる • 全てのボンドを白くすると、交差の無い閉ルー プが完成してクリア • クリアしたらピクセルアートに https://kaityo256.itch.io/hodoku 10 29
Hodoku: パズル生成 1) 全てのグリッドを通るハミルトン 閉路をランダムに作成 2) ピクセルアートに対応させて宝石 の色を決める 3) 解が一意になるようにいくつかの
宝石を固定 4) 固定されていない宝石をシャッフル Normal gem Fixed gem 11 29
Hodoku: ハミルトン閉路 (1/2) 全てのグリッド点を通るハミルトン閉路をランダムに作りたい しかし、バックトラックで力任せに探すと大きなグリッド サイズで時間がかかりすぎる 12 29
Hodoku:ハミルトン閉路 (2/2) (1) 𝑁 × 𝑁のサイズのグリッドで全域木を作る (2) それを2𝑁 × 2𝑁に拡張する
(3) 元の全域木を周回するように辺を追加、 削除する Edges to add Edges to remove 13 29
Hodoku: 全域木の作成 (1) 𝑁 × 𝑁 のグリッドを用意 (2) ランダムに辺を追加 (3)
閉路ができたらバックトラック (4) 全域木ができたら完成 全域木はバックトラックで現実的な時間で作成可能 14 29
Hodoku: テクニック (1/2) 固定宝石とその間のボンドの長さで解の形が限定さ れる マンハッタン距離が2の宝石が、長さ2のボンドでつなが れている場合 それらが直線上に並んでいたら、パスが確定 曲がっている場合は、以下の二通りに限定 15
29
Hodoku:テクニック(2/2) ボンドがハミルトン閉路を作るという条件から除外 される状態がある × 〇 × 〇 この宝石が孤立するからありえない 固定宝石が端や角にあると問題が簡単になる 16
29
Hodoku: 難易度調整 グリッドサイズが大きくなると難易度が急上昇する グリッドサイズが増えるにつれて可能な状態が指数関数的に増える 固定宝石で難易度を調整できる • • • • うまく配置された固定宝石はゲームのヒントになる
しかし、固定宝石の効果は周りの状態に強く依存する 固定宝石の効果をどのように数値化すればよいか? 所望の難易度にするためには、どこに固定宝石を置けばよいか? このパズルの難易度評価、調整はまだできていない 17 29
Stardust Sweeper Features • ブラウザ上でプレイ可能 • 4レベル、全100ステージ Rules https://kaityo256.itch.io/stardust-sweeper •
• • • 「ぷよぷよ」と「倉庫番」を組み合わせたルール ブロックは一度に複数押すことができる 同じ色のブロックが4つつながると消える 星ブロック(オールマイティ)や透明ブロック(お じゃまぷよに相当)など、特殊ブロックがある • 全てのブロックを消したらステージクリア 18 29
Stardust Sweeper ブロックは何個でも押せる 同じ色が4つつながると消える このブロックが消える 壁は動かせない × 19 29
Stardust Sweeper 星ブロックは、どの色と でもつながる 透明ブロックは、単体では消せな いが、隣接するブロックが消える と自分も消える 20 29
ステージ生成 (1/2) ステージをランダム生成すると、ほとんどの場合にお いて「解けない」ステージになってしまう これらは端にあるので動かせない 3つ隙間があり、残り赤ブロック が2個しかないので、どうやって も消せない(詰み) 21 29
ステージ生成 (2/2) ステージの周囲にはブロックを生成しない 最初に壁を生成しない (必ず解ける) 解答パスを邪魔しないように壁を生成する この方法なら「必ず解ける」ステージ を生成できるが、壁が非常に多いス テージが生成されがちになる 22
29
ステージ抽出 ステージジェネレータで7000問のステージを生成 • ここからどんな基準でどうやってステージを選べばよいか? • 選んだステージをどういう順序で並べるべきか? 強化学習を使った難易度推定を試みる 23 29
強化学習による難易度推定 (1/2) 無駄行動ペナルティ 最初、無駄行動(ステージの状態を変えない行動)にペナルティを課した × すると、エージェントは無駄行動ペナルティを避けるために、通路を 無駄に往復するように 結局、アクションマスクを採用し、無駄行動をさせないように。無駄行 動以外の行動について強化学習を実施 24
29
強化学習による難易度推定 (2/2) Feeding policy 最初、生成した7000ステージからランダムにエージェントに出題してい たが、エージェントは何も学習できず →段階的学習を採用 • 最短パスが1, 2ステップの簡単な問題を出題
• 成功率が50%を超えたら「次のステージ」へ • 難易度を上げた場合も、「一度解けた問題」も混ぜて出題することで成功体 験を維持 強化学習を(ノートPCで)半日実施したが、結局5ステップの問題までしか解 けるようにならなかった。生成された問題の最長パスは367ステップなので、 強化学習エージェントでは全く太刀打ちできず。 25 29
経験的難易度評価 (1/2) 強化学習による評価をあきらめ、経験的な評価値を採用 特徴量 • 最短解答ステップ数 (最も重視) • 部屋の広さ •
狭い部屋と広い部屋の二種類用意 • 狭い部屋は外周に壁を配置することで表現 • 星ブロックの有無 • 透明ブロックの有無 • 色の組み合わせ • (4, 0, 0, 0) : 1色のブロックが4つ→ 最も簡単 • (5, 0, 0, 0), (6, 0, 0, 0) : 1色が5、6個→少し難しい • (4, 4, 0, 0): 4つのブロックが2色→ 一番難しい • (4, 4, 4, 0): 4つのブロックが3色→ 逆に簡単に ↑おそらく解の存在を担保するので精一杯になるから 26 29
経験的難易度評価 (2/2) 2色のステージは、最初の色を消すまでが難しい 最短173ステップ 最短165ステップ 最初の色を消すのに26ステップ 最初の色を消すのに86ステップ 右のステージの方が左のステージよりも圧倒的に難しい しかし、先ほどの経験的な難易度評価では左の方が難しいと判定 27
29
仕様とコードの行数 (PLAN*.md):2080 lines 仕様 ソースコード (*.gd):2304 lines (PLAN*.md):4979 lines 仕様
ソースコード (*.gd):2690 lines 新しいゲームを作るためには、最終的に生成されるソースコードと 同じかそれ以上の行数のきっちりした仕様を用意する必要がある 28 29
まとめ たくさん作って、選ぶ • ステージを大量に自動生成し、あとでそこから選ぶことでパズルゲーム を制作した 難易度評価は依然として経験的 • パズルの難易度評価を完全に自動化はできず、人間による経験的な基準 に強く依存 AIによる開発にも、きっちりした仕様は必要
• 主にAIがコードを書くにせよ、ゲームのルールやその他の仕様はわりと 詳細に用意する必要がある(その仕様もAIと相談して作ったが)。 アルゴリズムの知識は(まだ)必要 • AIは最初、時間がかかりすぎたり、メモリを使いすぎたりするコードを 生成してきたため、適切に指示を出す必要があった. 少なくとも今はまだ AIは開発を加速するが、人間の想像力を超えてはくれない 29 29