コンピューターが決めた3桁の数字を、ヒット(数字と位置が正しい)とブロー(数字は正しいが位置が違う)というヒントを手がかりに当てていく。正解の決め方、判定方法、ゲームクリアの条件、不正な入力を弾く仕組み、スマホでも使えるテンキー入力など、単なる「数当て」に見えて実際にはルールの量が多い。これらを1つずつ整理したうえで、Codexに渡すプログラム仕様書としてまとめる。
ゲームに必要な戦略性とは
コンピューターがランダムに選んだ数字を、プレイヤーが1回で当てられるかどうかは運次第である。これは「くじ引き」であってゲームではない。ゲームと呼べるためには、プレイヤーの判断や選択によって、その後の展開や勝敗が変わるという性質、すなわち戦略性が必要である。

戦略性を持たせるには、あらかじめ決められたルールが要る。プレイヤーが1回answerを入力するたびに、コンピューターがそのanswerを評価してヒントを返し、プレイヤーは次のanswerをそのヒントをもとに考える。この「入力→ヒント→次の入力」という繰り返しの中に、プレイヤーが推理を組み立てる余地が生まれる。第3章で作ってきたツールが「入力に対して1つの結果を返して終わり」だったのに対し、ゲームには、この繰り返しと判断の余地こそが本質的な違いになる。
戦略性を持たせるには、あらかじめ決められたルールが要る。プレイヤーが1回answerを入力するたびに、コンピューターがそのanswerを評価してヒントを返し、プレイヤーは次のanswerをそのヒントをもとに考える。この「入力→ヒント→次の入力」という繰り返しの中に、プレイヤーが推理を組み立てる余地が生まれる。第3章で作ってきたツールが「入力に対して1つの結果を返して終わり」だったのに対し、ゲームには、この繰り返しと判断の余地こそが本質的な違いになる。
ヒット&ブローのルール
本項で作る数当てゲームは「ヒット&ブロー」と呼ばれるもので、数字当てゲーム「マスターマインド」の数字版に当たる([マスターマインド:title=マスターマインド])。ゲーム開始時に、コンピューターは0〜9の数字から異なる3つを選んで3桁の数を決める。最初の桁には0を使わない。この正解はプレイヤーには表示しない。

プレイヤーは、正解だと思う3桁の数字を入力して「回答」ボタンを押す。コンピューターは、入力された数字について次の2種類のヒントを返す。
プレイヤーは、正解だと思う3桁の数字を入力して「回答」ボタンを押す。コンピューターは、入力された数字について次の2種類のヒントを返す。
| ヒント | 意味 |
|---|---|
| ヒット | 数字と位置の両方が正しい |
| ブロー | 数字は正しいが、位置が異なる |
正解が583の場合を例に、判定を下表に示す。
| プレイヤーの予想 | 判定 | 説明 |
|---|---|---|
| 567 | 1ヒット・0ブロー | 5の数字と位置が正しい |
| 538 | 1ヒット・2ブロー | 5は位置も正しく、3と8は位置が違う |
| 835 | 0ヒット・3ブロー | 3つとも含まれるが、すべて位置が違う |
| 124 | 0ヒット・0ブロー | 正解に含まれる数字がない |
| 583 | 3ヒット | 正解 |
3つの数字と位置がすべて一致し、3ヒットになった時点でゲームクリアとなる。クリア時には、正解の数字、正解までにかかった回答回数、「もう一度遊ぶ」ボタンを表示する。基本ルールでは回答回数に制限を設けず、少ない回数で正解することを目指すが、ゲーム性を高めたい場合は10回以内に正解するという制限を加えてもよい。
入力チェックと入力サポート
ヒット&ブローには、ルール上そもそも回答として受け付けてはいけない入力がある。こうした入力は回答として扱わず、回答回数にも含めない。下表の入力は、いずれもエラーとして弾く。
| 入力例 | 却下する理由 |
|---|---|
| 12 | 3桁ではない |
| 1a3 | 数字以外の文字が含まれている |
| 112 | 同じ数字を複数回使用している |
| 012 | 最初の桁が0になっている |
| 過去に入力した数字と同じ | 同じ回答を重ねても新しい情報が得られない |
また、スマホでのプレイを想定し、画面にテンキーを表示して、タップまたはマウスクリックで数字を入力できるようにする。3桁の数字を入力する欄、「回答」ボタン、現在の回答回数、過去の回答履歴(入力した数字とそのヒット数・ブロー数)、「最初から遊ぶ」ボタンを画面に表示する。
数当てゲームのプログラム仕様書
以上を踏まえて、数当てゲーム「pahooHitAndBlow.html」のプログラム仕様書を示す。これがCodexに渡すプロンプトそのものになる。
プログラム仕様書(プロンプト)
# 目標 コンピューターが決めた3桁の数字を、ヒットとブローのヒントを手がかりに当てる数当てゲーム「ヒット&ブロー」を作る。
# プログラム・ファイル名 HitAndBlow.html
# プロジェクト・フォルダ作成 - プログラム・ファイル名の拡張子を除いた主ファイル名と同じ名前のサブフォルダを作成し、以降の作業はサブフォルダで行う。 - すでにサブフォルダがあれば、そのサブフォルダに移動して以降の作業を進める。
# ゲーム・ルール - ゲーム開始時に、コンピューターが0〜9の数字から異なる3つを選んで3桁の数を決める。 - 同じ数字は2回以上使用しない。 - 最初の桁に0は使用しない。 - 正解はプレイヤーに表示しない。
## 入力 - ユーザーは、正解だと思う3桁の数字をテキストボックスに入力する、または画面のテンキーをタップ/クリックして入力する。 - ユーザーが「回答」ボタンをクリックしたら、回答の判定処理を開始する。
## 判定ルール - ヒット:数字と位置の両方が正しい。 - ブロー:数字は正しいが、位置が異なる。 - 3つの数字と位置がすべて一致し、3ヒットになった時点でゲームクリアとする。
## 入力チェック 次の入力は回答として受け付けず、回答回数にも含めない。エラーの理由を画面にメッセージ表示する。 - 3桁ではない。 - 数字以外の文字が含まれている。 - 同じ数字を複数回使用している。 - 最初の桁が0になっている。 - 過去に入力した数字と同じ。
## 処理 - ゲーム開始(正解の決定)、回答の受付、入力チェック、ヒット・ブローの判定、回答履歴の記録、ゲームクリア判定を行う。
## 通信 なし。
## 出力 - プログラム上部にタイトル「数当てゲーム(ヒット&ブロー)」、バージョン番号、製作者「(c)pahoo.org Powered by Codex」と記載する。 - ゲームのルールを画面に表示する。 - 3桁の数字を入力する欄を表示する。 - 「回答」ボタンを表示する。 - 画面にテンキーを表示し、タップまたはマウスクリックで数字を入力できるようにする。 - 現在の回答回数を表示する。 - ゲームクリア時には、正解の数字、正解までにかかった回答回数、「もう一度遊ぶ」ボタンを表示する。 - 常に「ギブアップ」ボタンを表示する。 - 「記録表示」ボタンをクリックすると、後述の ##記録 を表示する。 - スマホで表示するとき、テンキーまで一画面に収まるようにする。 - スマホで数字入力時に、スマホのフリック入力を開かないようにする。
## 例外・エラー処理 - 無限ループに陥ったり、システム・エラーが出たときは、画面にエラー情報を表示して終了すること。
## 記録 - プレイ年月日日時 - 正解の数字 - 正解するまでの平均回答回数 - 最小回答回数 - 最大回答回数 - ギブアップ回数
# テスト観点・合格条件 - Codexが、正解の数字を3パターン仮に決め、それぞれ3回ずつ実行する。 - 入力チェック・判定ルール・ゲームクリア条件が仕様通りに動作すること。 - 前提条件、制約条件が守られていること。
# 前提条件 - タイトルは「数当てゲーム(ヒット&ブロー)」、バージョン番号、著作権者を表示する。 - 仕様で分からないことがあれば、ユーザーに質問すること。 - JavaScriptを使った1本のプログラム・ファイルにすること。 - クライアントPCのブラウザ(OSやブラウザの種類は問わない)で動作すること。 - スマホでも利用できること。 - httpサーバなどやNode.jsなどサーバ技術は使わず、ブラウザの機能で完結すること。 - コーディングは「Airbnb JavaScript Style Guide」にのっとること。 - プログラムファイルにコメントとして次の情報を記載すること。 -- プログラムの名称 -- バージョン -- 目的 -- 動作環境 -- 著作権表示および使用条件 -- インストール方法 -- お問い合わせ
# 制約条件 - インターネットとのデータ送受信は行わないこと。 - 外部ライブラリを使用する場合は、下記のサイトに限定すること https://cdn.jsdelivr.net/ https://cdnjs.cloudflare.com/ https://ajax.googleapis.com/ https://code.jquery.com/ https://ajax.aspnetcdn.com/ - プログラムがMIT Licenseに違反していないこと。
# 合格判定 - テスト結果を表示し、合格かどうかをユーザーに質問する。 - 質問が正しければ、以降の処理を進める。
# 簡易取扱説明書の作成 1)HTMLファイルと同じ場所に、簡易取扱説明書のテキストファイルを作成する。ファイル名は "README.txt" にする。 2)説明書には以下の項目を含める。各々の項目は "# 項目名" と表記する。 - プログラムの名称 - バージョン - 目的 - 動作環境 - 著作権表示および使用条件 - インストール方法 - 使い方 - 変更履歴 - お問い合わせ
# 著作権表示および使用条件 このプログラムは OpenAI社の Codex によって作成し、作者が動作を確認しました。 このプログラムは外部とのデータ通信を行いません。
本アプリケーションはMIT Licenseです。 商用を含む無償利用が可能です。自由に改造できます。 再配布の際は、下記の著作権表記、およびURLと本使用条件を必ず明記してください。
Copyright by (c)studio pahoo https://www.pahoo.org/
MITライセンスについては、下記のリンク先を参考にしてください。 http://ja.wikipedia.org/wiki/MIT_License http://www.opensource.org/licenses/mit-license.php
なお,本アプリケーションの利用または改造することによって生じた得失については一切関知いたしません.また,二次利用先の組織・企業・団体の目的・内容・活動については一切関知いたしません.
# お問い合わせ ぱふぅ家のホームページ https://www.pahoo.org/ - サイト案内 - お問い合わせ
# リソース管理 1)今回の作業が、新規作成(評価用)、新規作成(配布用)、メジャーバージョンアップ、マイナーバージョンアップ、不具合修正のいずれに当たるか、ユーザーに質問する。 2)バージョン番号を次のルールで変更し、プログラムファイル、簡易取扱説明書、このプロジェクトのプロンプト(ファイル名は PROMPT.md にする)をGitにコミットする。 -新規作成(評価用)‥‥バージョン0.1.0 -新規作成(配布用)‥‥バージョン1.0.0 -メジャーバージョンアップ‥‥バージョン番号の整数部分を+1 -マイナーバージョンアップ‥‥バージョン番号の小数の1番目を+1 -不具合修正‥‥バージョン番号の小数の2番目を+1
# 配布ファイルの作成 1)プログラムファイル、簡易取扱説明書、このプロンプトを1つのZIPファイルに圧縮する。ZIPファイル名は、"プログラム主ファイル名_バージョン番号.ZIP" の形式にする。 2)完了後、作成したZIPファイルの保存場所を教える。
「## 正解の決め方」と「## 判定ルール」にヒット&ブロー特有のルールを、「## 入力チェック」に回答として受け付けない5つの条件を、「## 出力」にテンキー入力・回答履歴・クリア画面といった表示内容を、それぞれ書き込んである。この仕様書をCodexに渡すと、入力チェックと判定ロジックを備えたヒット&ブローが生成される。
完成したヒット&ブローの画面(パソコン)
完成したヒット&ブローの画面(スマホ)
参考サイト
- ヒットアンドブローゲームのルールと遊び方:あそびバンク
- マスターマインド(ヒット&ブロー)の攻略法:Mathlog
(この項おわり)

たとえば「数当てゲーム」では、コンピューターがランダムに選んだ数字をそのまま当てるだけでは、プレイヤーの判断が入り込む余地がなく、ゲームとは呼べない。そこで本項では、あらかじめ決められたルールに従ってプレイヤーが推理を重ねる数当てゲーム「ヒット&ブロー」を作る。