プログラマ向けゲームを作る技術

黒曜(@kokuyouwind)

$ whoami

  • 黒曜

  • @kokuyouwind

  • 株式会社Misoca

  • Rails/SREエンジニア

技術書典

技術書典

Programming Party

Programming Party

  • カードを使ってプログラム仕様を決定し、プログラミングするゲーム

  • ​​毎回違う仕様が生成される

    • ​設計力・瞬発力・仕様の読解力

  • 相互レビューして良いコードに投票

    • ​コミュニケーションゲームの側面

あるリポジトリからの脱出

あるリポジトリからの脱出

  • GitHubを使った脱出ゲーム(Web謎)

  • コマンドラインでコマンドを打って
    ​謎解きをすすめる

    • 「歴史を書き換えて謎を解く」体験

  • エンジニアの知識を使った謎解き

    • 原作ものの謎解きに似た文脈共有

プログラマ向けゲームをどうやって作るか?

(技術の話はほとんどない)

ゲーミングできそうなテーマを見つける

ゲーミングできそうなテーマ

  • FizzBuzzはいろんなアレンジが加えられる

    • 割り切れる条件に使う数を変える

    • 出力する文字列を変える

    • 条件の種類を増やす

    • 入力値を負の値に拡張する

    • etc...

ゲーミングできそうなテーマ

  • ゲーム自体のルールが変わっていくことをゲームにしたら面白そう?

    • e.g. : ルール追加大富豪

  • 単純な基本仕様に追加仕様が積み重なる

    • Programming Party

ゲーミングできそうなテーマ

  • Gitの「歴史改変」自体がゲームっぽい

    • コミットを組み替えて正しい歴史にする

    • 「間違った歴史に閉じ込められる」のは
      ​脱出ゲームの設定にありそう

  • GitHubでWeb謎が配布できそう

    • あるリポジトリからの脱出

プレイヤー層を想定する

プレイヤー層を想定する

  • どういった層をターゲットにするか

    • そもそもニッチなので、絞りすぎると
      誰にも遊んでもらえない

    • ターゲットを広くするほど
      使えるネタに制約がかかる

  • 言語を絞らず初級者想定くらいが無難?

小さな課題で肉付けする

小さな課題で肉付けする

  • 適切な難易度の小さな課題を作る

    • 小さな成功体験による動機づけ

    • 知識を活かせると楽しい

  • いろいろなネタを使う

    • 中高レベルの数学、パズル

    • エンジニアの基礎知識

小さな課題で肉付けする

小さな課題で肉付けする

マクロヒープモックフラグ

コンパイラマージクロージャ

クイックテクノロジーアセンブラ

インタプリタバブルクラス

整列の次を読め

小さな課題で肉付けする

マクロヒープックフラグ

コンパイラマージロージャ

クイッククノロジーアセンブラ

インタプリタバブルラス

整列の次を読め

小さな課題で肉付けする

ちょっとした技術の話

ちょっとした技術の話

  • 「正答」を入れたときだけ出力を得られる

    • 謎解きではよくあるやつ

    • 単なる暗号化・復号化でよさそう

  • 複数の「正答」に別の出力を出したい

    • 同じ謎を複数回解くのもよくある

    • どうやる?

ちょっとした技術の話

$ cat key
invalid
$ ./run.sh
error: invalid key
$ echo 'key1' > key
$ ./run.sh
これは正しいkeyです
$ echo 'key2' > key
$ ./run.sh
これは別の正しいkeyです

ちょっとした技術の話

#!/bin/sh
cd `dirname $0`
file=$(md5sum key | cut -c 1)
openssl aes-256-cbc -d -in data/$file \
  -pass file:key

ちょっとした技術の話

組み合わせでちょっと変わったことができる

(シェル芸感)

まとめ

  • 身近なものをテーマにして掘り下げる

  • 想定層に合った小さな課題で肉付けする

  • ニッチなゲーム考えるのも楽しいよ

  • Programming Party Replay Book頒布中

    • ​BOOTHで売ってます(宣伝)