日別アーカイブ: 2019-09-15

ビンゴカードの作り方3

再利用などについて

動作や行動について何度も繰り返して利用されるのが一般的です。そのため大きな組織では分厚いマニュアルが用意されています。ソフトウェアやプログラミングにおいても繰り返し利用されることがほとんどです。

そのためには、切れ目にはきちんとした管理がなされなければなりません。お店のレジスターでは購入者ごとに買い物額が累計されるので、開始時には合計値を0にしますが、その前に一日の売り上げや支店ごとの売り上げ管理のために累計加算がなされます。

下記のサンプルはsumというグローバル変数を利用する前にリセットすべきであることを示しています。これに対しsumationという関数のローカル変数totalは毎回、利用される直前にクリアされます。

<script>
var sum=0;							//グローバル変数
for(var i=0; i<=10; ++i) sum+=i;
alert("SUM10="+sum);				//55
for(var i=0; i<=20; ++i)	sum+=i;
alert("SUM20="+sum);				//265
sumation(10);						//55
sumation(20);						//210

function sumation(n){				//総計算出
var total=0;						//ローカル変数
  for(var i=0; i<=n; ++i) total+=i;
  alert("N="+n+" TATOL=" + total);	//10 55, 20 210
}
</script>

このビンゴ運用研究システムでは、複数のビンゴカードを作成するに当たり、1回目、2回目とプログラムコードを再利用(リユース, reuse)するために、ヒットした回数をリセットしたり、画面を初期状態に戻さなければなりません。

この処理を再利用処理と呼ぶことがあります。再利用処理を含むシステムは通りいっぺんのことを成し遂げ終了するシステムよりも複雑・難解になります。

多人数で起きる事象の研究

ビンゴは2~3人で行うものではありません。ある程度の人数がそろわないと著しく面白みを欠きます。パソコンやスマホ画面は小さく参加者全員のカードを表示することは難しいですが、特定者を選択して時分割に表示することは容易です。

複数人数で起きる事象を独りビンゴを重ねて行うことでおおむね実態に近い体験が可能です。

また、このシステムはビンゴカードを紙で配布しないで参加者のスマホに送付する方式を目指しています。

並びステータス監視を改良

並びは縦5組、横5組、斜め2組の合計12組を制御します。25ポジションがどの組に属するかを制御するには下図に示しテーブルを使うように改訂しました。

テーブルの数値3は縦横、7は縦横左斜め、11は縦横右斜め、15は縦横左斜め右斜めに属します。縦はB~O列、横は一~五行、左斜めは\斜、右斜めは/斜でできごと欄に表示されます。

例えばG列二行に位置する数字にヒットした場合、左のテーブルを参照すると11を得ます。11は縦横右斜めの3組に関与し、横はc4(G列)、縦はc6(二行)を、右斜めはc11(/斜)をカウントアップします。

左の制御テーブルを使用すればカウントすべき組の扱いが簡潔になります。

改良されたビンゴゲーム

ビンゴマシンのボールを入れた籠をクリックしてスタートです。

🎑動作の説明

  1. ビンゴマシンのボールを入れた籠をクリックすると籠が回転し始めビンゴ番号が2秒間隔で確定します。
  2. 選ばれたビンゴ番号がビンゴカードの中にあればヒットになり該当する組の通算回数をカウントアップしピッという確定音が鳴ります。
  3. ヒットしたボールの色がシアンから薄い赤に変化しビンゴカードに穴をあけた状態に変化します。
  4. カウントアップされた値は縦横斜めの所定位置に累計値が表示されます。4でリーチ、5でビンゴ状態です。該当表示欄にできごととして表示されアナウンスが流れます。
  5. ビンゴカードの中に無ければブッという音が鳴ります。
  6. ビンゴが完成し「おめでとう」がアナウンスされビンゴ籠が停止したら、再びビンゴ籠をクリックすると次のビンゴカードを発行することができます。

次回の予定

次回は音声の作り方や設定について語る予定です。

追加説明

サンプルコードの全貌は故あって非公開です。ANDビット演算(たとえばa = b & c;)の文法エラーを解決できずやむを得ず、a = ((a | b) ^ a) ^ b;と代替していることが一因です。