見出し画像

なでしこさんでゲーム「2択de大石泉すき」

あーあ……今週もいつの間にか残り数時間だよ……
なんでなかなか書けないんだろう……
やっぱり自分はクソ頭が悪くてクソ無能でクズすぎるんだ……

……と嘆いたところで、クソ頭が悪くてクソ無能でクズすぎることは変わらない……
とりあえず目の前の締切に向けて何か書かなくちゃ……
まあ、またなんか適当なものを雑に作ってごまかすか……
IchigoJam だと実機で動作確認してスクリーンショットを撮るべきな気がして、そのコストがかかるから、今回はなでしこでやろう……

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

ルール

2択で1文字ずつ選んで、「大石泉すき」を完成させよう!
間違った文字を選んでしまうと、即失格だから気をつけよう!

プログラム

2択de大石泉すき (なでしこ3貯蔵庫)

解説

画面を切り替える処理

全体枠は「div」のDOM部品作成。
それの「行揃え」に「中央」をDOMスタイル設定。
それにDOM親部品設定。
タイトル画面は「div」のDOM部品作成。
カウント画面は「div」のDOM部品作成。
ゲーム画面は「div」のDOM部品作成。
結果画面は「div」のDOM部品作成。

画面リストは[タイトル画面, カウント画面, ゲーム画面, 結果画面]。

●(画面に)画面切替とは
  画面リストを反復
    変数の表示方法は「なし」。
    もし、対象が画面と等しいならば
      表示方法は「ブロック」。
    ここまで。
    対象の「ボックス表示」に表示方法をDOMスタイル設定。
  ここまで。
ここまで。

タイトル画面に画面切替。

各画面用の枠 (div) を用意し、関数1個で指定した画面だけを表示できるようにする。

各画面の作成

タイトル画面にDOM親部品設定。
「2択de大石泉すき」のラベル作成。
それの「文字サイズ」に「200%」をDOMスタイル設定。
2回、改行作成。
『「大」「石」「泉」「す」「き」の各文字を素早く選ぼう!』のラベル作成。
改行作成。
「間違えると即失格だから、気をつけてね!」のラベル作成。
2回、改行作成。
スタートボタンは「スタート」のボタン作成。

カウント画面にDOM親部品設定。
カウントラベルは空のラベル作成。
それの「文字サイズ」に「500%」をDOMスタイル設定。

ゲーム画面にDOM親部品設定。
左ボタンは空のボタン作成。
それの「文字サイズ」に「400%」をDOMスタイル設定。
それの「幅」に「2.5ex」をDOMスタイル設定。
それの「高さ」に「2.5ex」をDOMスタイル設定。
空のラベル作成。
それの「ボックス表示」に「inline-block」をDOMスタイル設定。
それの「幅」に「3ex」をDOMスタイル設定。
右ボタンは空のボタン作成。
それの「文字サイズ」に「400%」をDOMスタイル設定。
それの「幅」に「2.5ex」をDOMスタイル設定。
それの「高さ」に「2.5ex」をDOMスタイル設定。

結果画面にDOM親部品設定。
結果ラベルは空のラベル作成。
それの「文字サイズ」に「300%」をDOMスタイル設定。
2回、改行作成。
結果詳細ラベルは空のラベル作成。
2回、改行作成。
リトライボタンは「リトライ」のボタン作成。
空のラベル作成。
それの「ボックス表示」に「inline-block」をDOMスタイル設定。
それの「幅」に「1ex」をDOMスタイル設定。
タイトルボタンは「タイトルに戻る」のボタン作成。

部品を並べ、それぞれの画面を作成する。

変数の用意

問題リストは[
  ["大", "犬", "太", "人", "ナ"],
  ["石", "右", "厂", "ナ", "口"],
  ["泉", "白", "水", "梟"],
  ["す", "ナ", "む", "る", "十"],
  ["き", "さ", "キ", "木", "る", "ぎ"]
]。

カウントは3。
開始時刻は0。
次問題は0。
左正解フラグは偽。
正解選択肢は空。
誤答選択肢は空。

ゲームの状態を表す変数を用意する。
それぞれの変数の意味は以下の通り。

  • 問題リスト:出題する文字の配列

  • カウント:ゲーム開始前のカウントの値

  • 開始時刻:ゲームを開始した時刻 (タイム測定用)

  • 次問題:次に出題する文字の位置

  • 左正解フラグ:出題中の問題の正解は左のボタンか

  • 正解選択肢:正解として表示している文字

  • 誤答選択肢:不正解として表示している文字

問題リストの各要素が、それぞれの問題で使用する文字のリストを表す。
使用する文字のリストは、最初の要素に正解の文字を、その後の要素に不正解の文字を格納する。

出題処理

●出題とは
  定数の問題データは問題リスト@次問題。
  正解選択肢は問題データ@0。
  誤答選択肢は問題データ@(1から((問題データの要素数)-1)までの乱数範囲)。
  左正解フラグは(2の乱数)が0と等しい。
  もし、左正解フラグならば
    左ボタンに正解選択肢をDOMテキスト設定。
    右ボタンに誤答選択肢をDOMテキスト設定。
  違えば
    右ボタンに正解選択肢をDOMテキスト設定。
    左ボタンに誤答選択肢をDOMテキスト設定。
  ここまで。
  次問題を1増やす。
ここまで。

現在の問題を出題し、解答を受け付ける準備をする。
具体的には以下の処理を行う。

  1. 現在の問題のデータを問題リストから取得する

  2. 問題のデータから選択肢を取得する

  3. 正解にするボタンを決め、ボタンの表示を設定する

  4. 次の問題の位置を更新する

解答処理

●正解時処理とは
  もし、次問題が(問題リストの要素数)未満ならば
    出題。
  違えば
    定数の完了時刻はシステム時間ミリ秒。
    定数のタイムは(完了時刻-開始時刻)÷1000。
    結果ラベルに「クリア!」をDOMテキスト設定。
    結果詳細ラベルに"{タイム}秒で「大石泉すき」を選択できました!"をDOMテキスト設定。
    結果画面に画面切替。
  ここまで。
ここまで。

●誤答時処理とは
  結果ラベルに「失格!」をDOMテキスト設定。
  結果詳細ラベルに"「{正解選択肢}」のかわりに「{誤答選択肢}」を選んでしまいました!"をDOMテキスト設定。
  結果画面に画面切替。
ここまで。

正解、および不正解のときの処理を行う。
正解のときは、次の問題があれば出題し、なければクリアタイムを計算して結果を表示する。
不正解のときは、失格の結果を表示する。

カウント処理

●カウント開始とは
  カウント画面に画面切替。
  カウントは3。
  カウントラベルにカウントをDOMテキスト設定。
  1秒毎には(タイマーID)
    カウントを1減らす。
    もし、カウントが0超ならば
      カウントラベルにカウントをDOMテキスト設定。
    違えば
      タイマーIDのタイマー停止。
      ゲーム画面に画面切り替え。
      次問題は0。
      出題。
      開始時刻はシステム時間ミリ秒。
    ここまで。
  ここまで。
ここまで。

ゲーム開始前のカウントを行う。
タイマーを使用して1秒ごとにカウントダウンし、カウントが0になるタイミングで出題を開始する。

ボタンの処理

{関数}カウント開始でスタートボタンをクリックした時。
{関数}カウント開始でリトライボタンをクリックした時。

左ボタンをクリックした時には
  もし、左正解フラグならば
    正解時処理。
  違えば
    誤答時処理。
  ここまで。
ここまで。

右ボタンをクリックした時には
  もし、左正解フラグならば
    誤答時処理。
  違えば
    正解時処理。
  ここまで。
ここまで。

タイトルボタンをクリックした時には
  タイトル画面に画面切替。
ここまで。

それぞれのボタンを押したときの処理を行う。

  • タイトル画面

    • 「スタート」ボタン:カウント画面に遷移し、カウントを開始する

  • カウント画面

    • ボタンは無い

  • ゲーム画面

    • 左ボタン / 右ボタン:文字を選ぶ

  • 結果画面

    • 「リトライ」ボタン:カウント画面に遷移し、カウントを開始する

    • 「タイトルに戻る」ボタン:タイトル画面に遷移する

改造のアイデア

これらの実装は、読者への宿題とする。

  • ハイスコアを記録・表示する

  • キーボードでの操作に対応する

  • 問題のバリエーションを増やす

  • デザインを改善する

まとめ

なでしこで、2個のボタンから正しい「大石泉すき」の文字をなるべく早く選ぶゲームを作ることができた。

いいなと思ったら応援しよう!

コメント

ログイン または 会員登録 するとコメントできます。
なでしこさんでゲーム「2択de大石泉すき」|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1