【IchigoJam】3個ゲーム

今日は12月22日。
同じ「2」という数字が3個ある。
というわけで、[IchigoJam](https://ichigojam.net/) で「3個ゲーム」を作ってみた。

※IchigoJamはjig.jpの登録商標です。

# ルール

3×3に並んだ絵の中から、1種類だけ3個あるものを素早く選ぼう！
30秒間で何回選べるかな？
間違った絵を選ぶと減点だよ！

## 操作方法

* 1～9：絵を選ぶ
* Enter：スタート / リトライ

絵とキーの関係は、以下のようになっている。
3個ある絵なら、3個のうちどれを選んでもよい。

![絵とキーの関係](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/676330bd-dbc0-fb40-1d3a-9420e4eb242c.png)

:::note info
絵とキーの関係は、テンキーに合わせた配置になっている。
テンキーを使ってプレイすることを推奨する。
:::

# プログラム

```text
10 ' 3ｺ ｹﾞｰﾑ
20 LET[9],#EB,#EC,#F1,#FF:CLP:VIDEO5:CLS
30 LOCATE0,1:?"3ｺ ｹﾞｰﾑ":LOCATE0,3:?"ｴﾝﾀｰ ﾃﾞ":LOCATE3,4:?"ｽﾀｰﾄ"
40 IFINKEY()<>10GOTO40
50 CLS:FORI=3TO1STEP-1:LOCATE3,3:?I:WAIT60:NEXT:S=0:V=0:CLS:CLT
60 LOCATE3,0:?DEC$(S,5):FORI=0TO7:[I]=[I/2+9]:NEXT:A=[RND(4)+9]:[8]=A
70 FORI=0TO7:C=RND(9-I):B=[I]:[I]=[C]:[C]=B:NEXT
80 FORI=0TO2:LOCATE2,4-I:?CHR$([I*3],[I*3+1],[I*3+2]):NEXT
90 T=TICK():U=30-T/60:IFU<>VLOCATE0,0:?DEC$(U,2):V=U
100 IFT>=1800GOTO130
110 K=INKEY():IFK<49OR57<KGOTO90
120 IF[K-49]=AS=S+1:GOTO60:ELSEBEEP:S=S-1:LOCATE3,0:?DEC$(S,5):GOTO90
130 LOCATE2,2:?"   ":LOCATE0,3:?"ｴﾝﾀｰ ﾃﾞ":LOCATE2,4:?" ﾘﾄﾗｲ"
140 IFINKEY()<>10GOTO140
150 GOTO50
```

* [OneFiveCrowd で実行](https://onefivecrowd.mikecat.work/#text=RUN%0A&prg=CgAKJyAzuiC53rDRAAAUACZMRVRbOV0sI0VCLCNFQywjRjEsI0ZGOkNMUDpWSURFTzU6Q0xTAAAeADxMT0NBVEUwLDE6PyIzuiC53rDRIjpMT0NBVEUwLDM6PyK03cCwIMPeIjpMT0NBVEUzLDQ6PyK9wLDEIgAAKAAUSUZJTktFWSgpPD4xMEdPVE80MAAAMgA8Q0xTOkZPUkk9M1RPMVNURVAtMTpMT0NBVEUzLDM6P0k6V0FJVDYwOk5FWFQ6Uz0wOlY9MDpDTFM6Q0xUADwAQkxPQ0FURTMsMDo_REVDJChTLDUpOkZPUkk9MFRPNzpbSV09W0kvMis5XTpORVhUOkE9W1JORCg0KSs5XTpbOF09QQBGAC5GT1JJPTBUTzc6Qz1STkQoOS1JKTpCPVtJXTpbSV09W0NdOltDXT1COk5FWFQAAFAAOEZPUkk9MFRPMjpMT0NBVEUyLDQtSTo_Q0hSJChbSSozXSxbSSozKzFdLFtJKjMrMl0pOk5FWFQAAFoAMlQ9VElDSygpOlU9MzAtVC82MDpJRlU8PlZMT0NBVEUwLDA6P0RFQyQoVSwyKTpWPVUAAGQAEElGVD49MTgwMEdPVE8xMzAAbgAcSz1JTktFWSgpOklGSzw0OU9SNTc8S0dPVE85MAB4AEJJRltLLTQ5XT1BUz1TKzE6R09UTzYwOkVMU0VCRUVQOlM9Uy0xOkxPQ0FURTMsMDo_REVDJChTLDUpOkdPVE85MAAAggA4TE9DQVRFMiwyOj8iICAgIjpMT0NBVEUwLDM6PyK03cCwIMPeIjpMT0NBVEUyLDQ6PyIg2MTXsiIAjAAUSUZJTktFWSgpPD4xMEdPVE8xNDAAlgAGR09UTzUw) (高速、非公式)
* [IchigoJam web で実行](https://fukuno.jig.jp/app/IchigoJam/#10%20%27%203%EF%BD%BA%20%EF%BD%B9%EF%BE%9E%EF%BD%B0%EF%BE%91%0A20%20LET%5B9%5D%2C%23EB%2C%23EC%2C%23F1%2C%23FF%3ACLP%3AVIDEO5%3ACLS%0A30%20LOCATE0%2C1%3A%3F%223%EF%BD%BA%20%EF%BD%B9%EF%BE%9E%EF%BD%B0%EF%BE%91%22%3ALOCATE0%2C3%3A%3F%22%EF%BD%B4%EF%BE%9D%EF%BE%80%EF%BD%B0%20%EF%BE%83%EF%BE%9E%22%3ALOCATE3%2C4%3A%3F%22%EF%BD%BD%EF%BE%80%EF%BD%B0%EF%BE%84%22%0A40%20IFINKEY%28%29%3C%3E10GOTO40%0A50%20CLS%3AFORI%3D3TO1STEP-1%3ALOCATE3%2C3%3A%3FI%3AWAIT60%3ANEXT%3AS%3D0%3AV%3D0%3ACLS%3ACLT%0A60%20LOCATE3%2C0%3A%3FDEC%24%28S%2C5%29%3AFORI%3D0TO7%3A%5BI%5D%3D%5BI%2F2%2B9%5D%3ANEXT%3AA%3D%5BRND%284%29%2B9%5D%3A%5B8%5D%3DA%0A70%20FORI%3D0TO7%3AC%3DRND%289-I%29%3AB%3D%5BI%5D%3A%5BI%5D%3D%5BC%5D%3A%5BC%5D%3DB%3ANEXT%0A80%20FORI%3D0TO2%3ALOCATE2%2C4-I%3A%3FCHR%24%28%5BI%2A3%5D%2C%5BI%2A3%2B1%5D%2C%5BI%2A3%2B2%5D%29%3ANEXT%0A90%20T%3DTICK%28%29%3AU%3D30-T%2F60%3AIFU%3C%3EVLOCATE0%2C0%3A%3FDEC%24%28U%2C2%29%3AV%3DU%0A100%20IFT%3E%3D1800GOTO130%0A110%20K%3DINKEY%28%29%3AIFK%3C49OR57%3CKGOTO90%0A120%20IF%5BK-49%5D%3DAS%3DS%2B1%3AGOTO60%3AELSEBEEP%3AS%3DS-1%3ALOCATE3%2C0%3A%3FDEC%24%28S%2C5%29%3AGOTO90%0A130%20LOCATE2%2C2%3A%3F%22%20%20%20%22%3ALOCATE0%2C3%3A%3F%22%EF%BD%B4%EF%BE%9D%EF%BE%80%EF%BD%B0%20%EF%BE%83%EF%BE%9E%22%3ALOCATE2%2C4%3A%3F%22%20%EF%BE%98%EF%BE%84%EF%BE%97%EF%BD%B2%22%0A140%20IFINKEY%28%29%3C%3E10GOTO140%0A150%20GOTO50%0ARUN%0A) (公式、低速)

# スクリーンショット

タイトル画面。

![タイトル画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/cab0e2a8-152e-3962-b426-c0b0b304021b.png)

ゲーム中の画面。
左上に残り時間が、右上に現在のスコアが表示されている。

![ゲーム中](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/9d290036-2b34-6f6d-0dfa-29a92ef1104a.png)

結果画面。

![結果画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/f43ab057-366a-6a94-9867-5e0e3ce6382d.png)

# 解説

* 10行目：`FILES` 対応のタイトル
* 20行目
  * 出現させる絵 (キャラクターコード) を用意する
  * キャラクターコードに対応するパターンを標準のものにする
  * 画面表示の設定を行う
  * 画面を初期化する
* 30行目：タイトル画面を描画する
* 40行目：Enter キーが押されるまで待機する
* 50行目：カウントダウンを行った後、スコア・タイムを初期化してゲームを開始する
* 60～80行目：出題処理
  * 60行目
    * スコアの表示を更新する
    * 3個出す絵をランダムに選ぶ
    * それぞれの絵を用意する
  * 70行目：絵の配置をシャッフルする
  * 80行目：絵を画面に表示する
* 90行目：残り時間の表示を更新するべきなら、更新する
* 100行目：制限時間が過ぎたら、結果画面に遷移する
* 110行目：キー入力を受け付ける
* 120行目
  * 入力されたキーが正解ならスコアを加算し、次の出題を行う
  * 入力されたキーが不正解ならスコアを減算し、表示の更新を行う
* 130行目：結果画面を描画する
* 140行目：Enter キーが押されるまで待機する
* 150行目：新しいゲームを開始する (リトライ)