マガジン

記憶ゲームにヒントを一度だけ使える権利を足す

遊びを見つける

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

一人が小さなパズルを試し、制作者がノートを持って様子を観察するテストプレイ風景
記事のテーマをもとに制作したAI生成の写真風イメージ。

光った順に押す記憶ゲームで、列が6つ目に入ったところを考えてみます。5つ目までは覚えられたものの、6つ目の自信がありません。ここでヒントを使えば確実に進めますが、ヒントは一度きりです。もっと長い列で使うべきかもしれません。このとき、プレイヤーは「覚える」と「いつ使うかを決める」を同時に抱えることになります。 この記事で確かめるのは、この「使うか取っておくか」の判断が加わると、緊張感がどう変わるかです。成績が上がるかどうかは二の次です。ヒントが残っているあいだ、使った直後、使わずに終わった後で、感じ方がどう動くかを読みます。結果はここには書きません。読者が自分で遊び、記録し、読む手順を用意しました。

この記事の目次
  1. 何を比べるのか
  2. 準備するもの
  3. 手順と記録の取り方
  4. 結果の読み方
  5. 起こりやすい誤り
  6. 次の行動

何を比べるのか

比べるのは、ルールだけが違う2つの条件です。列の長さや速さは揃えます。

  • 条件A(ヒントなし):列を見せるのは各ラウンドで一度だけです。
  • 条件B(ヒント一度だけ):1ゲームに1回、現在のラウンドの列をもう一度見せられます。使うかどうかも、使うタイミングも自由です。

ミスの扱いも揃えておきます。後述のコードでは、ミスしても列は見せ直さず、同じラウンドを最初から押し直す設計にしました。ミス後に自動で列が見えると、それが第二のヒントになり、「一度だけ」の意味が崩れます。ミスが3回で終了するのは、公式作品「こだまの森」(間違い3回で終了)に合わせた設定です。

準備するもの

自分で動かせる最小の記憶ゲームを用意します。次のHTMLを memory.html という名前で保存し、ブラウザで開いてください。外部ライブラリは不要です。HINTS を 0 にすると条件A、1 にすると条件Bになります。

html
<!doctype html>
<meta charset="utf-8">
<style>button{width:72px;height:72px;margin:4px;font-size:20px}.on{background:gold}</style>
<p id="msg">開始を押してください</p>
<div id="pad"></div>
<button id="start">開始</button>
<button id="hint"></button>
<script>
const HINTS = 1; // 0=なし, 1=一度だけ
let seq = [], pos = 0, left = HINTS, busy = true, miss = 0, logs = [];
const $ = id => document.getElementById(id);
const keys = [0, 1, 2, 3].map(i => {
  const b = document.createElement('button');
  b.textContent = i + 1; b.onclick = () => press(i);
  $('pad').append(b); return b;
});
const wait = ms => new Promise(r => setTimeout(r, ms));
function refresh() { $('hint').textContent = 'ヒント 残り' + left; $('hint').disabled = left < 1; }
async function show() {
  busy = true; $('msg').textContent = '見てください';
  for (const i of seq) {
    await wait(300); keys[i].classList.add('on');
    await wait(500); keys[i].classList.remove('on');
  }
  busy = false; pos = 0; $('msg').textContent = '同じ順に押します';
}
function next() { seq.push(Math.floor(Math.random() * 4)); show(); }
function press(i) {
  if (busy) return;
  if (i === seq[pos]) {
    if (++pos === seq.length) { busy = true; setTimeout(next, 600); }
  } else {
    miss++; pos = 0; logs.push('ミス:R' + seq.length);
    if (miss >= 3) { busy = true; $('msg').textContent = '終了。成功は' + (seq.length - 1) + 'まで ' + logs.join(' '); }
    else $('msg').textContent = 'ミス ' + miss + '/3。最初から押し直します';
  }
}
$('hint').onclick = () => {
  if (busy || left < 1 || !seq.length) return;
  left--; logs.push('ヒント:R' + seq.length); refresh(); show();
};
$('start').onclick = () => { seq = []; miss = 0; left = HINTS; logs = []; refresh(); next(); };
refresh();
</script>

終了時の画面に、最後に成功したラウンドと、ヒントとミスが起きたラウンド(Rの後ろが列の長さ)が出ます。ヒントは、列を見せ終えて入力できる状態のときだけ押せます。

追加で、紙とペン、1回ごとに録画するスマートフォンかストップウォッチがあるとよいです。ふたりで行うなら、片方が遊び、片方が記録します。

公式作品「こだまの森」で試したい場合は、作品を開き、聴き直しに回数の上限があるかを先に確かめてください。聴き直しは15点減るので、「ヒントを使うと代償がある」別のルールになります。点数ではなく、到達ラウンドで比べる方が条件を揃えやすいです。

手順と記録の取り方

  1. 条件A・Bをそれぞれ3ゲーム以上遊びます。順番は A・B・B・A・A・B のように入れ替え、慣れの影響が片方に偏らないようにします。
  2. 各ラウンドを終えるたびに、緊張度を1(落ち着いている)から5(かなり張りつめている)で口頭か手元に書きます。ゲームを止めない短さにします。
  3. 次の項目を1ゲームにつき1行で書き留めます。
  • 条件、単位:A/B
  • 最後に成功したラウンド、単位:ラウンド番号
  • ヒントを使ったラウンド、単位:番号、または「使わず終了」
  • ミスが起きたラウンド、単位:番号(複数可)
  • ラウンドごとの緊張度、単位:1〜5
  • 条件Bのみ:ヒントを押す直前に迷った秒数、単位:秒(目安で可)
  1. ゲームが終わるたびに、一言だけ感想を書きます。「早く使いすぎた」「使う前に終わった」など、自分の言葉で十分です。

人数は1人でも行えますが、複数人に遊んでもらうと個人差と区別しやすくなります。その場合も、各人が同じ回数を遊ぶようにしてください。

結果の読み方

数字を並べる前に、見る順番を決めておきます。「成績」と「体験」は別に読みます。

ヒントを使ったラウンドの位置を見ます。 序盤(最初の数ラウンド)に集中していれば、ヒントを「持っている不安」を早く手放したいという動きが出ている可能性があります。自分の最長記録に近いラウンドに集まっていれば、取っておく判断が働いていると読めます。散らばっていれば、使う基準がまだ定まっていないと読めます。

「使わず終了」の数を見ます。 多い場合は、使うべき場面が来る前にミスで終わっているか、使う踏ん切りがつかないまま終わっています。感想欄に「使えばよかった」とあれば後者です。「使う前に終わった」とあれば前者です。

緊張度の推移を、条件Bの中で「使用前」と「使用後」に分けて見ます。 使用前に緊張度が高く、使用後に下がるなら、権利は「いつ使うか」の圧を生み、使うことで解消されていると読めます。使用前から低めで推移するなら、残っていること自体が安心材料になっている可能性があります。どちらになるかは、やってみないと分かりません。

条件AとBの緊張度の平均を比べます。 同じラウンド帯(例えばラウンド4〜6)で並べてください。差が小さいなら、ヒント権は緊張の総量より、緊張が起きる位置を変えている可能性があります。そのため、ラウンドごとのグラフを手書きで作ると違いが見えやすくなります。

到達ラウンドは補助的に見ます。 条件間の差が小さく、緊張度の動きだけが違うなら、ヒントは成績ではなく体験を変えているという読み方になります。

ゲーム数が少ないうちは、1回の偶然で傾向が逆転します。平均より中央値、または各ゲームの並びそのままの方が実態を読み違えにくいです。

起こりやすい誤り

  • 列が毎回ランダムなため、難しさにばらつきが出る。 同じ数字が続く列は覚えやすく、バラバラな列は難しいです。ゲーム数を増やすか、同じ列を使い回したいときは Math.random() の部分を固定の配列に置き換えてください。
  • ヒントを使うと列が長く見えて、体感が変わる。 ヒントでは現在の列がもう一度光るので、その時間も緊張に影響します。これは条件Bの一部ですが、速度(300msと500ms)は変えないでください。
  • 慣れで後の条件が有利になる。 順番を入れ替えるのはこのためです。入れ替えても後半のゲームほど成績が上がる傾向が見えたら、前半を練習として捨てる方法もあります。
  • 緊張度の自己申告が、ゲームの終わりに近づくほど印象に引きずられる。 その場で書くか声に出すようにし、ゲーム後にまとめて思い出して書くのは避けます。
  • 「一度だけ」を守れない。 ミス後の再表示や、頭の中で別のヒントを足すと条件が崩れます。コードは配布のまま変更しないでください。

次の行動

まず条件Aを1回、続けて条件Bを1回遊び、ヒントを押す直前の迷いを感じ取ってみてください。そのうえで、順番を入れ替えて3ゲームずつ記録を取れば、自分のデータで読めます。手元のゲームをもとにルールを変え、アソバースに投稿するなら、HTMLを直接アップロードする方法があります。直下に index.html として置き、ファイル名を揃えてください。