マガジン

もしゲームを遊ぶたびにルールが少しずつ変わったら

遊びを見つける

執筆にClaudeを使用しています。

速さ、選択肢、ミスの許容を三つの異なる仕掛けで表したゲーム模型のイラスト。
記事のテーマをもとに制作したAI生成イラスト。

あるパズルゲームを遊ぶ場面を考えてみます。1回目で「このボタンは3進む」と覚えたとします。2回目には4進むようになっていて、3回目は5進みます。説明は何も表示されません。この状況では、前回の経験を使って上達する「学習」と、前提が崩れて戸惑う「驚き」のどちらが、遊びの手ざわりを決めるのでしょうか。 ゲームの面白さの一部は、規則を覚えて上手くなることにあります。一方で、予想が外れた瞬間の驚きにも別の面白さがあります。ルールが毎回変わるゲームでは、この二つがぶつかります。覚えたことが次の回で使えなくなると、学習は積み上がりません。ただし、変化がまったくなければ驚きも生まれません。 この記事では、勝ち負けを測れる形に言い換えます。そのうえで、数十行のコードで「毎回少しずつルールが変わる」ミニゲームを作り、自分で答えを出す手順を示します。結果は書きません。同じ問いを自分の手で確かめるための設計書です。

この記事の目次
  1. 「学習が勝つ」「驚きが勝つ」を測れる形にする
  2. 変化の「型」で勝敗が変わるかもしれません
  3. 手元で試すミニゲーム
  4. 記録の取り方と結果の読み方
  5. 公式作品で「変わらないルール」の基準線をとる
  6. 次の行動

「学習が勝つ」「驚きが勝つ」を測れる形にする

「どちらが勝つか」は、そのままでは測れません。まず、何が起きたら学習で、何が起きたら驚きなのかを決めておきます。

学習は、ルールの変わり方に気づき、変化後の状況でも上手く対応できる状態と考えます。測る指標は、実際にかかった手数から、その回の最短手数を引いた「ムダ手数」です。ムダ手数が回を重ねるごとに小さくなれば、学習が進んでいると読めます。

驚きは、変化の直後に判断が止まる、手数が跳ねる、といった乱れとして現れると考えます。測る指標は同じムダ手数ですが、見る場所が違います。全体の傾向ではなく、ルールが変わった直後の1回に注目します。

つまり、同じ記録から二つの読み方ができます。

  • ムダ手数が全体として下がっていれば、学習が優勢です。
  • 毎回ほぼ同じ高さで上下していれば、驚きが学習を打ち消しています。

ここで注意が一つあります。「学習が勝つ」は「ゲームが面白い」と同じ意味ではありません。上達しても退屈なゲームはありますし、毎回戸惑うのに目が離せないゲームもあります。この実験が答えるのは、学習と驚きの力関係までです。面白さの判定には、遊んだ本人の感想を別に残します。

変化の「型」で勝敗が変わるかもしれません

ルールの変え方には、少なくとも三つの型があります。どれを選ぶかで結果は変わりそうですが、これはまだ仮説です。

  • 数値だけが動く、例:ボタンの増分が毎回1ずつ増える、起こりそうなこと(仮説):規則性に気づければ学習が積み上がりやすい
  • 規則が入れ替わる、例:足し算だった操作が、ある回から掛け算になる、起こりそうなこと(仮説):変化の直後に大きく乱れやすい
  • ランダムに動く、例:毎回、増分がでたらめに決まる、起こりそうなこと(仮説):学べる規則がなく、驚きだけが残りやすい

数値だけが動く型は、変化に「規則」があるので、それ自体を学習の対象にできます。たとえば「毎回1ずつ増える」と気づけば、次の回の状況を予想できます。ルールが変わるのに学習も成り立つのは、この型だけかもしれません。

ランダムな型は、変化のたびに完全な驚きになります。ただし、そこから「でたらめだと分かる」ことが学習になる場合もあります。変化が予測できないと知っていれば、状況を観察して素早く合わせる、という別の上手さが育つ可能性があります。

変化の大きさも要因です。小さすぎると、プレイヤーは変化に気づかないまま古い知識で遊び続けます。大きすぎると、前の回の経験が使えず、学習が成り立ちません。この中間の幅にゲームとして成立する範囲がありそうですが、実際にどこにあるかは、人とゲームによって違うはずです。手元で確かめる価値がここにあります。

手元で試すミニゲーム

次のHTMLを rule-drift.html のような名前で保存し、ブラウザで開きます。外部ライブラリもサーバーも使わず、このファイルだけで動きます。

html
<!doctype html><meta charset="utf-8">
<p id="s"></p><p id="n"></p>
<button id="ba"></button> <button id="bb"></button> <button id="bu">一手戻す</button>
<ol id="log"></ol>
<script>
const T=23, FIX=5, $=i=>document.getElementById(i);
let a=2, r=0, h=[];
const sum=()=>h.reduce((p,c)=>p+c,0);
function best(){
  const d=new Map([[0,0]]), q=[0];
  while(q.length){
    const x=q.shift(); if(x===T) return d.get(x);
    for(const s of [a,FIX]){ const y=x+s;
      if(y<=T && !d.has(y)){ d.set(y,d.get(x)+1); q.push(y); } }
  }
  return null;
}
function nextRound(){
  do{ a=a>=T?3:a+1; }while(best()===null);
  r++; h=[]; draw();
}
function draw(){
  $("s").textContent=`第${r}回 目標${T} A=+${a} B=+${FIX}`;
  $("n").textContent=`合計 ${sum()}/手数 ${h.length}`;
  $("ba").textContent="+"+a; $("bb").textContent="+"+FIX;
}
function push(v){
  if(sum()+v>T) return;
  h.push(v); draw();
  if(sum()===T){
    $("log").insertAdjacentHTML("beforeend",
      `<li>第${r}回 A=+${a} 手数${h.length} 最短${best()}</li>`);
    nextRound();
  }
}
$("ba").onclick=()=>push(a);
$("bb").onclick=()=>push(FIX);
$("bu").onclick=()=>{h.pop(); draw();};
nextRound();
</script>

遊び方は単純です。ボタンAとBを押して、合計をちょうど目標の23にします。Bは常に+5で、Aの増分だけが回ごとに変わります。合計が目標に届くと、その回の手数と、その回のAで可能な最短手数が下に記録されます。最短手数は幅優先探索(近い状態から順に調べる方法)で、プログラムが計算しています。

Aの増分は回ごとに1ずつ増える規則にしてあります。ただし、目標をちょうど作れない組み合わせの回は飛ばされます。そのため、増分が飛んで見える回があります。ここが「規則は見えるが、完全には一定でない」という小さな揺らぎになっています。画面には変化の説明を出していません。プレイヤーが自分で気づく設計です。

型を変えて試したい場合は、nextRound の中の a=a>=T?3:a+1 を書き換えます。たとえば a=Math.floor(Math.random()*20)+3 にすると、ランダムな型になります。その場合は best() が null(到達できない)になる回をループで飛ばす仕組みがそのまま効きます。

記録の取り方と結果の読み方

記録は「何を・どの単位で・何回」を先に決めておくと、読み違いが減ります。

  1. 何を:各回の手数と最短手数(画面のログから写します)。それに加えて、一手戻すを押した回数を自分で数えて書きます。戻すと手数が減る作りなので、ログの手数だけでは迷いを取りこぼします。
  2. 単位:1回(1ラウンド)ごとに、手数から最短手数を引いたムダ手数を出します。
  3. 何回:1セッションで15〜20ラウンドを目安にします。ボタンAが一巡する手前まで続けると、規則性に気づく時間が確保できます。
  4. 条件の比較:数値だけ動く型と、ランダムな型を別のセッションで遊び、同じ形の表にまとめます。

結果は次のように読みます。

  • ムダ手数が右下がりに減る場合、変化の規則を捉えて学習が勝っていると判断できます。
  • ムダ手数が上下するだけで下がらない場合、驚きが学習を打ち消しています。
  • 特定の回だけ急に跳ねる場合は、その回で何が変わったかを見直します。たとえば、増分が飛んだ回に跳ねたなら、飛んだ事実が驚きの原因だと読めます。
  • ランダムな型で、ムダ手数は大きくても戻す回数が減っていく場合は、規則ではなく「状況を見て合わせる」学習が起きている可能性があります。

起こりやすい誤りも挙げておきます。

  • 最初の数回を学習と取り違える:初回は、ルールの変化以前に、ゲームそのものに慣れていません。最初の3回ほどは集計から外して比べます。
  • 同じ人が条件を続けて遊ぶ:先に遊んだ型の経験が、後の型に影響します。順序を入れ替えて遊ぶ、または時間を空けて遊ぶようにします。
  • 一人の結果を一般化する:自分で遊んだ記録は、自分の傾向を示すだけです。他の人にも当てはまるかを知りたい場合は、複数人で同じ手順を行い、人ごとの記録を並べます。
  • 最短手数を目指しすぎる:プレイヤーに最短を求めると、ゲームではなく計算課題になります。遊びの記録としては、無理のない速さで進めて構いません。

公式作品で「変わらないルール」の基準線をとる

アソバースの公式作品には、遊ぶたびにルールが変わる作品はありません。そのため、固定ルールの作品を「学習だけが働く場合の基準線」として使えます。同じ問いの裏返しとして、固定ルールでは学習がどれだけ伸びるのかを見ておくと、ミニゲームの結果と比べやすくなります。

  • かたちのあいだ:同じ配置の再挑戦ができます。同じ盤面を繰り返し遊んで手数が減るかを見ると、ルールが固定のときの学習の曲線が分かります。ヒントは最短とは限らない点に注意してください。
  • 時計じかけの台所:時間制限なしの見習いと、1皿28秒・配膳6秒・ミス3回までの本番があります。条件の違う二つのモードで、同じ手順がどう変わるかを比べられます。
  • 小さな軌道:全軌道予測(点線)を消して挑めます。予測という手がかりの有無で、学習の効き方が変わるかを観察できます。

これらはルールそのものは変わらず、「条件」を自分で変える遊び方です。ルールを動かした場合との違いを考えるときの、比較の足場になります。各作品の細かな挙動は、実際に作品を開いて確かめてください。

次の行動

上のコードを保存し、「毎回1ずつ増える型」を15ラウンド遊んで、ムダ手数を記録します。次に、同じファイルでランダムな型に書き換えて、同じ条件でもう一度遊びます。二つのグラフを並べたとき、学習が勝つのか、驚きが勝つのかが見えてきます。そのうえで、ルールが変わるゲームを自分で作るなら、変化を数値だけにするのか、規則ごと入れ替えるのかを選んでみてください。