SCAN BATTLE VS のつくりかた

バーコードの先に、どんなしくみがある?

身近な商品の番号が、モンスター戦士に変身。能力を配分して、3手の順番で勝負するゲームには、計算と画面づくりの工夫が詰まっています。

コードを知らなくても読めます。中学生を中心に、コンピューターに興味がある高学年のみなさんへ。

Rのファイター、ピコSSRのファイター、ノヴァSRのファイター、オラクル

1はじめに考えること

「好きなファイターを見つけたい」を約束にする

SCAN BATTLE VSは、スマホ1台を交代で使う2人対戦ゲーム。バーコードを読み取り、力・守備・スピード・運にポイントを配分し、通常攻撃・必殺技・防御の順番を考えます。

「気に入ったバーコードを取っておきたい」という希望から、同じ番号なら何度読んでも同じファイターになる約束を決めました。毎回違う結果なら、見つけたお気に入りを再び呼び出せません。

作りたい体験

発見して、工夫して勝つ

身近なものからキャラを見つけ、配分や作戦を変えて試せる。

具体的な約束

何を固定し、何を選べる?

キャラと色は番号から決める。ポイント配分、必殺技、3手の順番は自分で選べる。

こうした約束を仕様(しよう)と呼びます。システムエンジニアは、希望を聞いて、使う場面と必要な動きを整理します。

2使う道具

道具に任せる仕事、自分で決める仕事

カメラの映像からバーコードを読む部分には、ZXingというライブラリを使います。ライブラリは、ほかの人も使えるようにまとめたプログラムです。キャラを選ぶルールやダメージの計算は、ゲーム独自のプログラムで作ります。

このゲームの道具と役割
道具何をする?
React / TypeScript準備、コマンド選択、バトルの画面とルールを作る。データの種類の間違いも見つけやすくする。
ZXing / カメラAPI許可されたカメラの映像からバーコードの番号を読み取る。
HTML / CSS / SVG文字、ボタン、配置、色、光のアニメーションや紋章を作る。
Canvas 2Dバトル中の光の粒子、盾、斬撃、衝撃波を描く。
Web Audio波形を組み合わせて短い効果音を作る。初期設定はOFF。
ローカルストレージお気に入りやバトル速度を、そのブラウザに保存する。
Vite / Vitest開発と公開用ファイルの作成、動作の自動チェックを支える。

ゲームの処理はブラウザ内で動きます。公開するHTML・画像・プログラムはXServerから届けます。

3番号をファイターに変える

同じ材料に、同じ計算をする

最初に、全角数字や空白を整理し、桁数と最後のチェック用の数字を確かめます。12桁のUPCは、先頭に0を付けた13桁のEANと同じ番号として扱います。書き方が違っても、同じ商品なら同じ結果にしたいからです。

番号を読む表記とチェック値を確認決まった計算レア度・キャラ・色を選ぶ

番号とルールの版を、ハッシュという一定の計算で数値に変換します。その数値から、まずレア度、次にそのレア度のキャラ、最後に色を決めます。同じ番号・同じルールなら結果も同じ。この性質を決定論的と呼びます。

レア度の割合は「毎回のくじ」とは少し違う

今の設定はRが60%、SRが35%、SSRが5%。多くの異なる番号を試したときの分かれ方を、この割合に近づけています。特定の番号を読み直しても、別のレア度へ引き直すことはできません。少数の番号では、この割合ぴったりになるとも限りません。

基本キャラ32種類と色3種類で96通り。画像は基本キャラごとに用意し、色違いは画面上で色合いを変えて表現します。

もう少し知りたい:ルールを変えたいとき

公開済みのルールは版を残し、新しい設定は別の版として追加する設計です。割合やキャラの一覧を変えると、同じ番号でも結果が変わる可能性があります。お気に入りには番号だけでなく、使ったルールの版も保存します。

バーコードから商品の価格や名前を調べているわけではありません。数字をキャラクター選びの材料にしています。

4算数をゲームにする

計算の答えだけでなく、途中も見せる

配分できるポイントはRが10、SRが12、SSRが14。これは特性を加える前に、自分で配れる合計です。基本キャラの特性を適用し、その後に色の特性を適用して、実際の能力を決めます。

特性には「守備+2」のような加算だけでなく、倍率や能力の入れ替えもあります。順番によって答えが変わるため、いつ適用するかを決めます。倍率の小数は切り捨て、能力は0未満にならないようにします。

自分のポイント配分基本キャラの特性色の特性バトルで使う能力

ダメージのミニ実験

攻撃側の力は6、守備側の守備は3。会心・ミス・回避を省いた、命中したときの計算を試します。

7ダメージ通常攻撃:最大(1, 4 + 6 − 3) = 7

4は今のルールの基本攻撃値。防御すると半分にし、小数は切り上げます。この模型ではカウンターを省いています。

ゲームでは能力の変化やダメージの計算を、折りたたんだ説明で確認できます。「なぜその答え?」を見られると、次の配分や作戦を考える材料になります。

5状態と順番

秘密の3手を、どうやって進める?

通常バトルでは、両プレイヤーが通常攻撃・必殺技・防御を1回ずつ並べます。選び終わるまで相手の順番を表示しません。スマホ1台を渡し合うので、交代画面で次の人に操作を知らせます。

REDが秘密で選ぶ端末を交代BLUEが秘密で選ぶ両者の1・2・3手目を実行

3手目までが1ターン。次は3アクションを選び直せます。防御が効くのは、相手と同じ手番です。スピードの高い方から攻撃し、同速ならターンごとに先攻を交代します。HPが0になったら、残りの行動は止めます。

ミス、回避、会心は順番に判定します。ミスなら回避や会心の判定へ進みません。防御して生き残ったときは、今のルールでは10%で受けたダメージを返すカウンターが発動します。

もう少し知りたい:オートバトル

3アクションの並べ方は6通り。オートでは両者がそれぞれランダムに順番を決め、演出後も操作を挟まず次のターンへ進みます。相手の順番を読んで有利な並びにする処理はありません。通常と同じ計算や確率を使います。

対戦はHP30から開始し、最大20ターン。それでも決着しなければ残りHPで比べ、同じなら引き分けです。

6見やすさとわくわく

答えを決めてから、かっこよく見せる

戦闘の計算を先に行い、「誰が何をして、何ダメージだったか」という記録を作ります。アニメーションはその記録を順番に再生します。演出をスキップしても、音をOFFにしても、もう一度ダメージを抽選しません。

ルールの仕事

結果を計算する

順番、ミス、回避、会心、HPの変化を記録する。

演出の仕事

結果を伝える

記録に合わせて絵を動かし、光・文字・音を出す。

グレートパンチは炎の拳、シールドバッシュは六角形の盾、スピードラッシュは青い連続斬撃。名前と色だけでなく形や動きも変えます。バーコードを読んだときは光の粒子を集め、光が弾けてファイターが現れる演出にしました。

速さと情報の量も、遊びやすさになる

バトルが速すぎると状況を追いにくいため、「ふつう」を初期設定にし、「はやい」も選べるようにしました。スマホではファイター紹介を読み取り欄の上に置き、特性も一緒に表示します。能力の詳しい計算は折りたたみ、必要なときに読めます。

効果音は最初OFF。ONにする操作から再生を準備し、OFF・スキップ・一時停止では音を止めます。端末の「動きを減らす」設定にも対応し、派手な動きを省いても文字で結果を伝えます。

キャラクターから、歴史にもつながる

3頭身のモンスター戦士には、世界の偉人から着想した装備や装飾があります。人物の名前・簡単な説明・参考リンクを紹介欄で読めます。キャラと人物の対応を一覧で管理し、追加時にモチーフが重ならないか確認できます。

7確認と公開

「一度動いた」から「安心して変えられる」へ

同じ番号で同じ結果になるか、3アクションが重複しないか、OFFのときに効果音を作らないか。こうした約束を、決めた条件で繰り返し確かめるのが自動テストです。

  • 番号のチェック値が違うときに、間違いを伝えられる。
  • 同じ番号の生成結果が、変更で意図せず変わらない。
  • 秘密のコマンドが交代画面で見えない。
  • オートは一時停止でき、再開後は決着まで進む。
  • 演出を動かしても、戦闘の乱数を余分に使わない。

前に動いていた機能を変更後も確かめることを、回帰テストと呼びます。楽しさや読みやすさは人の目でも確認します。スマホ幅でボックスと親の幅を比べると、左に寄ってしまう問題を見つけられます。

公開した後も、確かめる

自分のPCで確認する「ローカル」でテストとビルドを行い、GitHubへ変更を保存します。公開環境の「本番」では、前の版をバックアップしてから切り替えます。公開後に必要なファイルが届くか、ローカルの成果物と内容が一致するかも調べます。

もう少し知りたい:お気に入りとキャッシュ

お気に入りは、そのブラウザのローカルストレージにあります。別端末へ自動で移ったり、ブラウザのデータ削除後に戻ったりはしません。

画像などをブラウザが再利用するしくみを「キャッシュ」と呼びます。更新したプログラムのファイル名を変え、古い版が残りにくいようにしています。

自分のアプリ案で考えてみよう

図書の記録、持ち物チェック、部活の対戦表。作ってみたいものを一つ選び、紙に書いてみてください。

  1. 誰が、どんな場面で使う?
  2. 同じ入力なら、いつも同じ結果にしたい?
  3. 結果を計算する順番で、答えが変わる?
  4. 友達に見せていい情報と、秘密の情報は何?
  5. 音や動きがなくても、結果を伝えられる?

紙に画面を描いて友達に使うまねをしてもらうと、必要な説明や使いにくさに気づけます。

AIと作るときも、体験を確かめる

このゲームは、企画者がルールや遊びたい体験を伝え、AIが実装やテストを支援して作っています。「速すぎる」「何が起きたか分かりにくい」といった感想を、具体的な改善へ変えてきました。AIが作った結果も、約束と実際の動きに照らして確認します。

遊んで気づく言葉にする作る確かめる