2018年3月22日木曜日

ゲームの進展状況75 8ゲーム作戦

今度のゲームの案を悩んでいるが、とりあえずまずはスペースの確保が必要となる。よく考えれば、ゲーム画面サイズをちょっと下部分を増やすことができるのだが、どうしてもこれははっきりいうと…かっこ悪い。

やっぱりアニマのマルチモードのように、きれいに6つゲームを配置したい。

ところで、新しいゲームをどうするかの話だが、ビンゴ系、チェーンボンバー、アニマツリーやアニマドロップ、ハニーエイトのシステムはすでに組み込んだことになる。
となると、あとはハッピーフラワーとビンゴバルーン…。
しかしこれを再現するだけでは面白くない。なにかもうちょっと発展したゲームを作りたいと思っている。

…しかしここで我はとあることに気づいた。
3つのゲームのどれもこれもが、実は右側にスペースをあけられる。
(ちなみに強引にピクチャを全部並立的に左に移動する方法もあるが、これだとちょっと処理の遅延でピクチャが大量の処理実行時変な挙動をする可能性が高いので没)
だいたいゲームタブは245×240ピクセルとなっている。
もうちょっとタブを小さくしても様子が分かりそうなので、ゲームタブの占有領域を横を245から360に拡張することが可能と判断した。そうすると、1/2のサイズになるが横が1.5倍になるので実際タブの大きさは横だけを考えると0.75倍。
これはいけるのではないか…?
しかも、0.75倍なら4つ縦に配置してももとの縦の長さと変わらない。
もうこれは将来8ゲーム運用確定か…?

そうなると、なんと8個のゲームを配置することが可能になる。賑やかになるだろう。
うち6個はすでにBET画面が完成しているが、適当に増設するとする。
さて、そうと決まれば上の画像におけるタブ内のピクチャを移動させる必要がある。
面倒だからタブ内まとめて75%に縮小するか…。縮小ゲーム画面は別の処理が必要になるがこれは0.75倍にしてちょっとズームの中心をいじるだけで解決。
タブ、リーチ文字などのピクチャを確認してこれらにズーム処理をほどこせばいい。
あまり連続的な動きを必要としないので、並立ピクチャ処理をかけても大丈夫だろう。

それにきっと8ゲーム同時進行してもウディタはやってくれるだろうと信じている。
それに向けて用意をするか…?

2018年3月18日日曜日

ゲームの進展状況74 JPCの確率設定

さて、一通りのJPCシステムが完成したことになる。
先述したとおり、やっぱり5連鎖以上のWILD効果が大きすぎる。
70球にしたいというのにもう40球で全面JPリーチという有様。
アニマロッタで40球でリーチというのはそうそうお目にかかれるものではない。
あっちは40球まででリーチがかかると盤面の速度が40球を超えても変わらない、という謎仕様があるがプログラム的に考えると音楽変更と盤面速度変更は同じフラグの条件下で成立するのではないか疑惑。

さて、そこでいよいよこのデロセアロッタ(勝手に命名)のJPCの突破確率を求めようと思う。
もちろん、理論的に計算するわけではない。そんなことをしていると一生かかっても終わらないと思う。

とりあえずなんとかしてJP確率を20%弱とするのが目標。
現時点ではほぼ100%といってもいい激甘設定。

ではどうやってJP確率が分かるのか。それは簡単な話である。
JPCを10000回くらい繰り返せばいいわけで、その中で演出を抜けばできる。
そういうわけで、演出やウェイト等を抜いた確率統計専用のRPGエディターファイルを別途作成することになる。

さて、我が求めたい確率は、とりあえずWILDなどの確率を弄って、JP確率を知ることである。
たぶん4割か5割くらいにはJP失敗時にはなると見積もっているので。

ただ、これだけの操作と演出が入っているということは、当然プログラムもそんななまやさしいものではない。1回分JPCの処理をするのに一瞬で処理しきれない。なぜなら落下と連鎖処理などに関してリーチ処理を行うだけで数秒とまるくらいなので。
もしこれがアニマのような単純なルールならば、我はおそらく数分~10分くらいでプログラムを書き上げて確率を直ちに100000回くらい統計をとってもとめることはたやすいだろう。

とりあえず次の記事からは、いよいよペイアウト率ではないが、JPCの確率について述べていこうと考えている。一応ボーナスも含めて、内部のシステムはたぶん完成なので。
なぜならもう他にボーナスを書き入れるスペースがないから。

そういうわけで、RPGエディターをコピーしていろいろやっていくわけだが、今日は雷珠の実装でちょっと疲れた上、なぜか明日は午前3時30分に起こされるので、なんか今週はハードな気がしないでもないが。気にしないでおこう。


ここまでデロセアロッタを造る気になったのも、JPで10000超えを全然出せない我が指をくわえて他の人物の5桁、6桁動画を見るのは敗北感を味わっているような気がしたからか…?
というよりもともとゲーム作成が好きだったから、というのも言える。

なにしろ我は小学校の座右の銘で、みんながありきたりな「夢」「希望」「友情」などを書いているのに我だけ堂々と「遊び」と書いたくらいなので。
高校でも最後のあいさつかなんかに「想像に思いを寄せるのが好きだ」とかいう感じの文章を書いたということから、特に我は遊びが好きな人物なのである。
ただしただ遊ぶだけではなく、その中には高度で知的な遊びが含まれている。

我はそれを昇華してデロセアロッタやビンゴの確率を求めるなど、特に数学の中でもこういうゲーム関係の話に特化している方であるのはそういう理由がある。

思えばはじめてゲーム、というものを知ったのは小学校低学年で、ぷちぷちおみせっちとかいうゲームを買って、ニンテンドーDS(ライトの前の一番最初の機種)でやっていた。もうこのころから自分でいろいろ想像遊びが始まって、だいたい中学前半で暗黒の帝王とかが出てきて、高校に入るとその世界がより広がり、大学になるとさらにその世界が拡張した、という感じで。

いったい何千枚の紙とどれだけのボールペンを使って自分オリジナルのマリオのようなコースや、殴り書きマンガを書いたことか…。
つまりなにがいいたいかというと、遊びの対象が小学校からほとんど変わっていない、という驚きの点にある。

小学校→ゲームつくりたい、レゴやりたい、遊園地行きたい(ジェットコースターNG)
中学校→ゲームつくりたい、レゴやりたい
高校→ゲームつくりたい、レゴやりたい
大学→ゲームつくりたい、レゴやりたい、浮きたい、遊園地行きたい(ジェットコースター目当て)

そのため我はやはり子供に受けるタイプな感じらしく…。



ゲームの進展状況73 JPC画面強化

さて、いよいよボーナス表を右側に配置することに成功。
これ実はそれぞれピクチャとして表示しているので、座標指定するのもなかなか面倒。

JPの種別がいいほど、良いBOMBの出現率があがる。だが実際、2%というと画面にだいたい2個くらい現れるので、序盤の段数稼ぎには有効。
最大連鎖ボーナスでは、後半になれば連鎖数を稼げるが、それと同時に起爆範囲の広いBOMBが出るので、そこまで連鎖回数は増えない良いバランス。
WILD出現率は多くしてもバランス崩壊なしないはず…。大事なことは上が消えるかどうかなので。
だがさすがに8%はやりすぎかもしれないので修正候補。
同時落下ボーナスは何個か分からないので別にそれの表示を考えている。
ここで新実装の雷珠。これにHITすると6方向すべて消えることになり、これはすなわち一番上に配置されて連鎖でこれがまきこまれると全消し確定というとんでもないもの。
そうでなくてもそれがある段以下はすべて消えるというとんでもないもの。
なので通常時は雷珠は出ないようにしている…がせっかく実装したので見てもらいところ…。
重複ボーナスは、同じ番号に所定回数以上入るとその番号のHIT範囲が周囲2マス、3マスに拡張されるということ。
これは実際のアニマのJPCで赤ポケットはほぼ確実に発生するであろうことから、意外に後半で助けられるボーナスだと思う。
なおこのシステムを実装するためにはそれぞれの番号に何回INしたか25個の変数を追加する必要があることはいうまでもない。

現在JP種別ボーナスのみ組み込んでいる。
なにしろ雷珠の挙動プログラムにそこそこてこずったもので…。

ゲームの進展状況72 雷珠システム実装

ちょっと、ボーナス表でネタ切れを起こしたので、同時落下数ドロップボーナスで新たなる「雷珠」を実装することにした。
 上記のように雷珠に連鎖で引火?すると派手なエフェクトとともに周囲6方向のドロップ全部を消し、さらにそれらがBOMBならばそれらは爆発する。要するにチェーンボンバーの青爆弾に似ている。
そして6方向のマスは完全に消える。なんか左下が消えている…気がするがきのせいか…?
 
この実装は同時落下数ボーナスで考える予定。
 
 
あっ分かった…この問題。左上、右上、左下、右下のループ回数に誤りがあって、とにかくどこかの「辺」に達すれば処理を終了するのだが、条件を見落としていて上の辺のみを考えていた。
横の辺に達したときも考える必要があると分かった。
なので、たとえば左上に達したら終わるプログラムを組まなければならない…。
 
これに結構いろいろかかった。ちょっと終了条件をきつくしすぎたりして端っこが消えない不具合等に悩まされたがこれでたぶん解決。

ゲームの進展状況71 ボーナス表配置

右側にいろいろなボーナスを配置した。これらの出現率がアップするということはどこかの出現率がダウンするが、BOMBのほうは通常ドロップ、WILDのほうは番号出現率を代わりに下げる。なぜならこちらのほうが配当等を獲得するには上位互換であるからである。ほとんどの場合で。

2018年3月14日水曜日

ゲームの進展状況70 連鎖ボーナス

JPC右側を埋めるべく、新たにJPCの生成確率を左右させる連鎖ボーナスを付与することにした。
主に期待度をあげる、というのは基本的にはBOMBの数を増加させることだと思われるので、
連鎖した数によって、次回のBOMBの出現率をあげようと思う。
たとえばこんな感じ。
連鎖ボーナス
n連鎖 BOMB出現率+m(n)%(その代わりに番号の出現率が減少) (5<=n<=10あたり)
落下ボーナス
50個以上一気に落下でWILD出現率増加(こっちは空白出現率や通常ドロップ出現率を削る)

これらのボーナスを考慮しようと思っている。
あとJPの種別によるボーナスも。
ビッグで一律BOMB出現率2%UP,SUPERで4%、ULTIMATEで6%アップなど。

番号出現率は最低で15%なので、ULTIMATE効果とBOMB効果の合計でもだいたいMAXで15程度なので、ぎりぎりか…。ただこうなると番号がHITしにくい問題が、あるが、これはつい最近実装したはずれドロップのボーナスで通常ドロップが「ぱじゃれん」するのでOK。これの確率は変えないようにする。

よって方針が決まったので、早速着手することにする。

現在の様子。


アニマロッタのプログラミング

ちょっと余談。アニマロッタのプログラムでもっとも簡単と思われるものから順に列挙していく。
演出なども含めた難易度。
1位 ダブルアップチャンス HIT時番号が光るくらいか…?
2位 新クリスタルチャレンジ ほとんど画像を表示するだけ。
3位 JPC システムのみは簡単。容易に確率計算できる。ただJP獲得後の演出は…。
4位 アニマツリー これも容易に確率計算できるほどプログラムは楽…と思う。
5位 ワンダーチャンス リーチなどの演出くらい。
6位 ビンゴガーデン 注意すべきはユーザー側の任意操作だけ。
7位 ハッピーフラワー つぼみ(赤花)の挙動等に注意すればいいだけ。
8位 ビンゴバルーン すべてのラインを定義するのがちょっと面倒。しかしたぶんそれくらい。
9位 ビンゴファーム 単純に数が多く、我の2つ目のゲームのような感じだがこれに比べて簡単
10位 ハニーエイト はちみつの広がりの挙動に注意。あと周囲1マス定義が面倒。
11位 チェーンボンバー 爆弾として再落下するのが難しめ。連鎖処理時の早い置換に注意。
12位 アニマドロップ 連鎖処理が面倒、そして落下処理の判定が難しい、さらに段数生成も…。

まあ要するにみていて面白いゲームが難しいことになる。
だが基本的にこれらのゲームは、普通に再現可能である。昔はこれらを再現しようとしたが、やっぱり一部独自のシステムをいれたほうが面白いと思ったので、
1ゲーム目はハニーエイトの亜種、2ゲーム目は連鎖とビンゴのシステム、3ゲーム目はチェーンボンバーと継続システム、そしてあにまだまシステムを取り入れ、ワンダーチャンスはそのまま、JPCはアニマドロップの強化版として生まれ変わった。

この中でもおそらくもっとも一見難しいのが、どういう条件でアニマドロップでドロップが落下するのか、そして爆弾が上から落ちてくるチェーンボンバー。
まあ理論的には、ただ単に機能的に順にグループ番号を定義していってそれと隣接するマスを同グループとして繰り返すことで1つ目の問題は解決され、2つ目の問題は連鎖で消えるときに番号を取得して専用の変数帯に格納すればいいだけなので、実をいうと難しくない。

あといえることは、連鎖系のシステムは、楽しいゲームだが、いざつくるとなると難しめなものが多い。上のランキングで下位に位置するものは連鎖システムが多いことが分かるだろう。
あと処理速度的に、常時マスなどが動き回るものは苦手。並立で組み込もうとするとどうしても一瞬残像が残るので。もう少し処理がはやければ…。

なので、アニマロッタのプログラミングは、意外にすんなりとつくれるものが結構ある。

だが我には工学系の知識がないので、実際の物理抽選機と連動させられないのが非常に残念。なんかあれでも数学知識の行列とかをつかうらしい。

とりあえずいえることは、数学知識があったほうがいい、ということになる。
何しろ変数と数値を扱いすぎるゲームなので。
まだ我にはコンパクトにプログラミングを作る能力はそこまで高くないので、変数を大量生成してコマンド入力でも処理が遅くなって困っていたりする。

意外にyoutubeなどをみても自作アニマロッタ(画面側)などが全然載っていないことをみると、みんな抽選機のほうに興味があるらしい…。

ゲームの進展状況69 JPCの空いた右側

今日は3月14日ということでホワイトデーらしいがまあ我には関係ない話なのでおいておく。

JPCの右側に空いた部分があることは以前も述べたとおり。
そこで、ここに何を埋め込むのがいいか…。

アニマロッタのJPCはオッズ表が左にあり、右側は普通にルール説明あるいは空白。
だが我のゲームではどうしても、なんか空白はあまりよろしくないと判断。
GETドロップにオッズの重みをつけることはプログラムを少しいじるだけなのでそう難しくはないが、それをする明確な理由が無い。
 
BOMBなどの説明はやっていればたぶん視覚的にわかるだろうし…。

そこで、連鎖数や一挙落下数による次回のドロップ生成確率ボーナスをつけようと思った。
あとJPCの種別(通常、BIG、SUPER、ULTIMATE)に対して常時BOMBなどの出現率にボーナス等。これらを考えていきたい。

2018年3月12日月曜日

ゲームの進展状況68 JPCシステム改良1

とりあえず下
の2つの数字が何かを示して、あと全消し1,2回目は配当を表示するようにし、爆弾の連鎖ウェイトを調整、BGMの追加、ドロップ部分の背景をダイヤ模様にした、などさまざま。
だが依然としてJPC関係で配当はまだ加算されない。やる意味なし。
ところで、右側にはずれドロップのインターフェイス?を追加。
これで現在の当たらなかったドロップの経過がわかる。
まだ段数300段あたりまで15段ずつ生成確率を設定。ただし実際は100~150段で終わることが多いのでほぼ確実にお目にかかることのない超レア設定。上がそれにあたる。241~252段目の補充で上記のような出現確率になる。どうやったかというと…もちろんとある場所にとある変数を入れるだけの話。このドロップ生成確率はある変数ひとつによって管理されているから。

ゲームの進展状況67 JPCほぼ完成

だいぶんカットしたが、だいたいこれがJPCの流れとなる。
ちなみにALLラインでないのにJPCにいくのは意図的にとある変数を1にしているため。
これで強制的にJPCへ移行することになる。

まあ、昔のお粗末な我のRPG(笑)に比べれば、ましなできに仕上がったといえる。よかった。

2018年3月11日日曜日

ゲームの進展状況66 ゲームのはしわたし完了

とりあえず、ダイレクトクリスタルとクリスタルチャンスからのJPCへの接続がたぶん完成。
あと、JPCから通常画面へ戻る処理も作った。
理論的には、ゲームのひとつの流れが完成したことになる。

ここまでくるのにどうやら100時間くらいかかっているらしい。上のやつを見れば括弧外に100hくらい、括弧内に150hくらいになっている。

ということは、かなり雑ではあるが、一通りゲームをプレイできるようになったというわけである。

ゲームの流れはアニマロッタと同じく、3ゲームでクリスタルを12個集めて、集め終わればクリスタルチャンス突入。それでALLラインそろえばJPCに移行し、JPCで3回全消しすればJP獲得。

このような流れでゲームが進んでいく。
まずはこのように
クリスタルチャンスでALLラインをそろえるのが目標。
まだラインのピクチャが汚いし何ラインかわからないし、おまけにはずれ時オッズアップなども作りたいし、そもそも残り球数も書かれていないしJPC獲得の文字もないので、これらはまた追加すべきところ。
 このようにRESULTでJPCを獲得したことが明記され…。
(RESULT画面が雑すぎなので改善点)
 JPチャンスへと移行するときこのように演出が入る。まわりの削っていないのは修正点。
そしてJPC画面へ。まだ未完成だがシステムとしては機能する。まだJP獲得してもメダルは増えないが。
ちなみに1ゲーム目キャンディドロップはハニーエイトの類似ゲーム、2ゲーム目はビンゴファームの類似ゲーム、3ゲーム目はチェーンボンバーの類似ゲームで、クリスタルチャンスはワンダーチャンスほぼそのもの、JPCはアニマドロップのシステムを採用したもの。

ゲームの進展状況65 獲得配当表示

とりあえず1/4000に設定して、なんとか配当表示までこぎつけた。
最初のスカスカ状態から、なんとか上部分が埋まってきた。
ちなみに下のほうにある数字で、左が獲得個数、右が配当。

しかしこれだけでは当然華やかでないので、せっかく作った周囲2マス、周囲3マスのHITも組み込もうと思っている。本来は何もHITするものが無かった場合、としたいのだが、これだけ番号とその数が多いとなかなか起こらない。しかし番号が少なくなった場合、救済措置として有効。

今回のHIT番号がなかったときの爆発は、4段階考えており、
1回目HIT番号がなければ、なにか適当な通常ドロップが消える。
2回目は、適当な通常ドロップの周囲1マスが消え…という風にしていき、4回目以降はクラッシュドロップでいう超爆発が起こって周囲3マスが「ぱんじゃーん」といいながらたくさん消える。
ちなみにこれのプログラムは直ちにわかって、適当に1~63あたりの乱数を選んで(本物も上半分がたしか爆発していたはずで、これにちなんでいる)さらにその番号に対応するマスの種別、番号を所得し、番号が0かつ種別が0であればそれが処理対象。違えばループでやり直し。
番号0だけではBOMBの可能性があり、種別が0ではうずうず、番号の可能性があるのでこの2つの条件が必要。ちなみに空白はともに-1という設定にしている。

あとはやっぱりドロップの演出をしたい…ところだが、これは落下など、ピクチャの移動をふくむので並立できゅっきゅっと回転などの処理をおこなうと、例のピクチャ残像事件が起こるとみている。
なので、なかなかドロップの演出にこぎつけないでいるのが現在の問題点。
加えて番号がINするごとにリーチ処理をするので、その頻度の多さとリーチ算出にかかる時間(連鎖中も番号がHITする設定なので連鎖中にこのリーチ処理が介入するとかくかくになる)のせいで全消し、などのリーチ文字が表示しづらいのも問題。
なにしろこれだけで予備変数6を3000以上まで拡張したんやから…。


あと、HITする演出の前に、ストック部分での番号から直線状にその番号のマスに向かって光が進出、というようなツナガロッタのワンダーチャンスのような演出もつくりたい。これは簡単で、各ストックの場所に対して番号を取得、そして136or137マスの各番号を取得して、それらの番号とストックの番号が一致すれば初期ピクチャ表示座標はストックの場所で、絶対座標をマスに関して取得し、そこへ処理時間30フレームあたりをかけて移動。

これはとっくにツナガロッタを演出しようとしたころからやっているので、そこまでむずかしいことではない。さすがにチェーンボンバーなどは当時は再現できなかったが。

ここだけの話、手間や時間はかかるが、アニマロッタを自分で制作するのも、ゲーム画面だけならそう不可能な話ではないわけである。

RPGツクールはどうやらピクチャの描画に最大数があるらしく、我のゲームのようにピクチャを数千個使うような大型ゲーム作成ができないのが残念。その点ではフリーソフトながらウディタはすばらしいと思っている。…まあそういう自分も一昔前はしょぼすぎる手抜きRPG程度しか作れなかったが。本当はそれらも見せたいが、とある時期にデータ全消失したので無理。これは非常に
非常に残念。

思えばあのころ暗黒の帝王とかいう概念が出だしたのだった…。だいたい中学1年の終わり頃。
ちなみに今になってもその世界観はほぼ変わっていない、というかより進化してしまっている。
一応別にRPGを作成していたので。

ゲームの進展状況64 ドロップ確率表示

ちょっと画面がさびしいので、ドロップがどれくらいの確率で生成されるか書き加えてみることにした。…リーチ処理は処理が重すぎて断念。またいずれ。

これでプレイヤーは次何がどんな確率で生成されるのか期待を持てる。

右側には全消しの回数や特定のマスで大量消えを示すものや、GET個数による配当表示をしるしていく予定。クリスタルチャンスおよびダイレクトJPCの額決定が行われていないのでまさかの0WINだが、普通にJPCに突入するとこれはちゃんと0以外になって機能する。

さて、配当に関する話だが、とりあえず25段ごとにドロップの色が変わり、だいたい黄色か赤色のドロップの境目の100段前後で終わる感じでそれでだいたい1000個弱のドロップGET、といった具合になる。アニマロッタベースでいくと、基本的には失敗時JP額の4割程度が配当として得られることを考慮すると…。

だいたい800個で2割程度がいいのではないかと思っている。
となると、1個につきJP額の1/400割つまり1/4000、すなわち1個消すとJP額の1/4000を入手できるようにすればいいと思う。これに全けしのボーナス配当をくわ得ればちょうどいいくらい。

たとえば500ならば、1/4000は1個当たり0.125WINの計算になる。つまり、8個ごとに漸く配当が1ずつ上昇していく、という感じになる。ウディタの特性上。
もちろん独自で四捨五入システムをつくることはできる。
桁数をひとつ多くしたりして、最後の桁数で四捨五入の判定をして、ひとつ多くした桁数をもどし、その判定に基づきもっとも下の位に四捨五入を施す、という具合。
だが、アニマロッタ自体チェーンボンバーに5BETすると中央2ラインが2WINとでるように、明らかに切捨てである。よってこちらもそれを採用することにする。

全消しをすると、1回目はJP額の5%、2回目はJP額の10%、3回目はJP獲得、ということにする。
いわゆるクラッシュドロップシステムを採用している。
当初は全消し5回にする予定だったが、いろいろと実験したところ、たぶん3回でもそう簡単に取れないし、かといって無理、というわけでもない?と踏んだわけで。

たとえば500WINのJPで800個入手、全消し2回の状態ならば、全消しボーナス15%分で75WIN、ドロップの入手個数で20%分で100WIN、合わせて175WINと4割近くになってくる。

もちろんJPを獲得すれば、それらのボーナスはなし。これはアニマロッタと同じ。
まずJP額を失敗時配当が超えることはない。
なぜなら全消し2回以内で、3400個のドロップを消すことはほぼ完全に不可能だからである。
(全消し2回は15%分、残り85%をドロップGETでかせぐので、これは4000*0.85=3400個分に相当)
一面あたりだいたい空白率を10%と仮定すると、ドロップは平均的に136.5*0.9でだいたい120個少し。これをぎりぎり全消しには行かない状態で消していったとしても30回近く連鎖、落下処理などを行っている、これには平均的に2つの番号でほぼ全消し状態を達成せねばならないが、この連鎖の間隔は10秒と定めているため、最低でも必要条件として300フレーム(5秒)間隔でボールがINしないと達成不可能。したがって、平均300フレーム間隔にしてない我の番号制御では無理なわけである。

ちなみにここで余談。切り捨て問題は意外と初心者には詰む問題かもしれない。
たとえばウディタで3割、を表現したいときはどうするか。
この場合、適切な除算を行えない(5割などなら、÷2でいける)ので、2つの方法が考えられるだろう。

1,まず1割を求めてからそれを3倍
2,さきに3倍してから10で割る

これらは数学的には同値である。なぜなら任意の自然数nをとると
n*0.1*3=0.3nであり、n*3/10=0.3nだからである。
だがこれを切り捨てのウディタでやると…。
n=100の場合は、1のほうは1割は10,3倍すれば30。2のほうは3倍で300。10で和って30。
しかしn=25の場合は…。
1では1割は2.5だが切捨てで2。これを3倍して6。
2では3倍して75。これを10でわり7.5となる。切捨てで7。
このように2つの値が異なってしまう。実際の値は7.5なので、6のほうはほど遠い。
なので2のほうが良い。
まあ要するに、どれだけもともとの数字の情報を保持できるか、退化させないかということで、
できるだけ除算は最後にとっておいたほうがいいわけである。
実はこの操作ミスで、気づいていないだろうが3つ目のゲームで若干表示配当と入手配当に
誤差があるのだが、それはこれが原因。ま…まさかこんな細かい点には誰も気づかないだろう。



2018年3月10日土曜日

ゲームの進展状況63 最難関・リーチ処理

さて、我の作るゲームはなぜか新しく作るごとにシステムの構造がややこしくなっている…ということを踏まえると、今回のJPCのリーチ処理はかなり難しい(変数を膨大に使う)であろうことが分かる。
さて、リーチ処理というのは、現在の状態をどこかに保存し、その保存した領域内で1~25の番号を代入してみて結果をさぐりその結果をcselfか何かに出力して、各マスの番号を取得しその番号でのリーチ状況を見て、演出を決める、というのが普通のやり方?だと思う…。
この場合、演出はスキップするため、演出のためだけに必要な変数はカットできるので、いくらか演出つきより処理は早くなる。

とりあえずまずはJPCの説明をする。
10秒の猶予が与えられ、この間に番号がランダムな時間間隔で入っていく。そして10秒たてばその入っていったストックが全部HITすることになる。そして落下処理や段数増加が行われる。
そしてまた10秒猶予が設けられ…というのを番号が60個分入るまで繰り返す。
GETした(落としたあるいは消した)ドロップ数はJPC失敗時の配当に影響し、全消しの回数でJPになるかどうかが決まるシステム。

つまり、リーチ処理は、ただ単に1~25に入るとどうなるか、ではなく、
この10秒間の猶予の間に、それまで入ったストックの番号たちに依存して次入る番号のリーチ状況が定まる、という点に注意。
まあこれは、現時点での状況を把握して、それプラス1~25のいずれかに入った場合、を調べればいいだけなので見かけに反して難しくは無い。

だが、これ…。

どんだけ変数使う…?

とりあえず、まずはリーチを演出なしで表現するため、
番号HITの処理、連鎖処理、落下におけるグループ分け、落下処理の4つを改造してこれ専用につくる必要がある。段数増加以降は、直近の配当やJP判定を行うのでこれは依存せず、しかもランダム要素なので不要だし意味をなさない。
もしこれをやるなら、ランダム性をリーチ処理に入る前に決定しておかねばならない。
いわゆる、RPGでいうと何回リセマラしても結果は決まっている、というやつ。

実際には退避したものへの操作はせず、もともとのものを書き換え(一瞬なので並立実行していなければ書き換えてもOK)て後で退避のものを戻す(そのほうが書き換えが少なく楽)ことを行う。

2018年3月9日金曜日

ゲームの進展状況62 アニマドロップ演出強化

もう少し分かりやすく連鎖の演出を付け加えてみる。
このように、3つのボムによって起爆する範囲が違う。
ただのBOMBだけでなくSボム、Hボムまで混ぜたことにより、華やかさはアップ。
なお演出は意外に結構難しめな試行錯誤を繰り返した。なんといっても演出のピクチャ表示に関する条件が煩雑で。

ゲームの進展状況61 アニマドロップ基礎完成

ちょっと演出を付け加えて、上からの補充の回数によって色を変えたりと、アニマドロップにかなり近い感じのゲームになってきた。

まだ背景や配当、周囲の演出やグラフィックは用意していないが、ほぼアニマドロップ、といっていいほどにはなったと思う。

ここ2,3日はアニマロッタで実際の音を録音するとともに、これに着手していた。
JPCはこれをメインにしていく予定。
ちなみにドロップのHITは、とりあえずランダムな数字2つを選んで、内ひとつは周囲1マスHIT、もうひとつは周囲3マス(超爆発)ということに暫定的に設定している。
WILDは何がHITしてもHIT扱いになる。

まだアニマドロップ特有の、補充された段数が増加すればするほどBOMBなどの出現率が変更する、というのは未実装。だがこれはそんなに難しくない。
ちなみに上記の画像、動画は、
初期   番号配置50% ボム20% 空白5% WILD3% ただのドロップ22%
補充分 番号配置50% ボム20% 空白10% WILD3% ただのドロップ17%
という風に設定している。たぶん補充されたドロップのほうが気持ち空白が多いのは設定の違い。
実際のアニマドロップはある程度ランダムでありながらも決まったパターンで出てきたりすることが多いが、それを作るのが面倒なのでとりあえず以後もこれで代用するだろう。

わざわざ複数のエフェクトを同時に処理するために大量の退避用変数を導入することとなってしまい、早くも予備変数6は1000超え。
現時点での変数の使用状況について…。(一部未使用もあるが、だいたい使用済み)
通常変数 主に初期確率設定 17枠
予備変数1 キャンディドロップ関係 462枠
予備変数2 ビンゴボンバー関係 1119枠
予備変数3 ほりほり関係 769枠
予備変数4 クリスタルチャンス・JPC関係 838枠(現時点)
予備変数5 クリスタルステップ関係、あと何か 103枠
予備変数6 退避、演出に関する変数 1275枠
予備変数7 ゲームをまたいで保存される変数群 44枠
予備変数8 予備6と似たような役割429枠(ただもしかすると1000近いかも)
予備変数9 ゲーム進行に関する変数 24枠
あとはできるだけ変数を使わないように、コモンイベント内で処理している。
これでもがんばって変数を減らした方…。
我はこれら3000を超える変数と、コモンイベント200個以上の各変数を把握せねばならないので、そう簡単なお話ではない。

さて…そろそろ周囲の演出と、リーチ判定および個数など配当の話に入っていくことになる。

具体的な案としては、JPCやJPC失敗時配当は全消しや落下・消去ドロップ数に依存させようと思っている。
まあそれらは違う記事で書くか…。

あ、ちなみに上の動画、テストプレイすると1マス目、10マス目、11マス目が消えるという不具合があることに気づいて、どうやらこれはマス0を読みにいったせいで、左下と右下に相当する1,10,11のマスに作用したことが原因と発覚。よってマス0が対象で選ばれた場合、処理をスキップするように変更してこの問題は解決。これに気づかないと、全消しを手助けしてしまう…。

2018年3月8日木曜日

ゲームの進展状況60 連鎖処理2

やはり予想通り、変数を数百個追加など、なかなか一筋縄ではいかない作業となった…が、やっていることはそこまで難しくは無い…が、面倒。
現在ようやく通常BOMBに関する連鎖の処理を終わらせたところ。
実をいうともうこの段階でほぼアニマドロップのシステムは完成といってもよいのだが、せっかくのプチ自作ということでSボムとHボムを作って、よりJPCのにぎやかさを演出したい。
なので、変わらずがんばってこれらのボムを作る予定。

連鎖流れとしては、

自身のマスを-1にして空白として、連鎖対象でなくす。

以前のビンゴなどでもおきた、1回の137ループでの順序に依存する段階重複を避けるために別に変数の退避場所を設けてここで連鎖の状況を操作

その退避場所からもどしてきて再び消去・周囲のマスへの判定
(それに加えてピクチャ一括演出のために変数137個増築)

これくらいになってくると我の文章力がないのか、非常に言葉にあらわしにくい。
なんか実際に見てもらえればたぶん分かるはず…なんだが。

ちなみにSボム、Hボムに関する記述を終えたら、あとはいよいよ70球のボールで抽選するというメインの処理に入っていく。(まあ正直このSボム、Hボム処理は後付けでも良い)

なおすでに、HIT→周囲消滅→連鎖していく→上にくっついていないものは落ちる→ドロップ補充、の流れはすでにほぼ完成している。システムの根幹はほぼ出来上がったといってよい。

アニマドロップと違うのは、当選部分が複数存在する、ということで一気にピクチャエフェクトをつけられるようにすでに演出部分は改造済み。
たとえば、所定時間内に3球入った場合、それら3つの番号とWILDであるうずうずドロップの周囲1マスが爆発するようになるので、HITは複数に及ぶ。
そこから各HITした場所から連鎖が始まっていくというゲームになる予定。
その連鎖時の効果音は、youtubeからいい効果音がないかアニマロッタ4プレイ動画を探りながら吟味している。これも意外に大変。

ゲームが進行するにしたがって、HIT時の周囲のマスの広がりがクラッシュドロップ並みに大きくなったり、BOMBの格が上がったりしていく予定。

そして、リーチ時はあのJPリーチのBGMを流しながら、リーチの番号を激しくアピール。
過去最大のにぎやか状態を演出しようとたくらんでいる。

とりあえず現在の状況は下のような感じ。


ゲームの進展状況59 連鎖処理1

さて、段数取得が終わり、所定の位置までドロップを補充するシステムがほぼ演出、内部処理ともに完成。あとはいよいよ連鎖処理となる。

基本的にここの処理はそうすぐに終わるものではないので覚悟が必要。
だが、よく考えればまずは番号のHIT処理が行われなければ連鎖も何も議論できないので、とりあえずHIT処理から行うことにする。

今回爆弾に番号は振り当てておらず、番号はぐるぐるドロップに存在し、またWILDとして(なにがHITしてもそれが消える)うずうずドロップにも26として一応存在する。まだ番号をピクチャとして描画はしていないが。

HITした場合、周囲6マスを消す、という操作をおこなうことになるが、周囲6マスの取得はすでにプログラム内にそれを補助するよいものがあるので簡単。
消す、という動作は、-1にする、ということなので、周囲2マス(クラッシュドロップのHITor大爆発),周囲3マス(クラッシュドロップの超爆発)のHIT処理も、ただ単に周囲1マスHITの和集合としてとらえるだけでよいのが非常に楽。

2018年3月7日水曜日

ゲームの進展状況58 落下判定3(完成)

プログラムの基礎として、落下判定は完成。
この2つの画像を見比べれば分かる。もっとも上の段にくっついているドロップは落ちないが、そうでないドロップたちは下の画像で落下(60フレームで500ピクセルY座標増加)しているのが分かる。

たしか実際のアニマドロップは下に落ちきる前に不透明度を下げて消していたと思うが。

次はドロップの補充をもっとも下の段が13段目になるまで行う処理を作るが、これはあの前作った連鎖の段数補充と同じ話なのでわざわざ書くことも無いだろう。

ゲームの進展状況57 落下判定2

先ほどのプログラムにループをかけて、ちょっとつぎたしてグループごとに番号をナンバリング。
上記の画像では、グループは8個あることになり、結局この場合に落下しないものはもっとも上の部分にそのグループ番号が存在する1,2のみとなり、それ以外は全部落ちることになる。
なぜなら上にグループ番号が存在することと、落下することは、こういった形の場合同値であるからである。(証明はたぶん相当難しいが、とりあえず各列ごとに最上段上の位置が違う場合はこの限りではないことが分かる)

ちなみに右下は10で始まるパターンのため、136個しか存在しないことによるちょっとしたバグだが、正直1以上について落下判定をこれから実施するので、-1が出ようが関係ないので、ここの136個、137個による場合分けは必要だが不要。

ゲームの進展状況56 落下判定1

アニマドロップでは、上にくっつくものがなくなった場合、一気に落下する。これがアニマドロップの醍醐味である。さて…それをプログラミング的に解釈するとどうなるか。

とりあえず1マス目を考えて、これと同じグループ(落ちるのならば一緒に落ちるドロップたちの集合)を算出していく。全方向に放射するような形でこのグループを算出。

そして、その先に何も無いマスがあれば処理中断。それまでこれを繰り返し続ける。全てのマスに対してこれ以上新たに進めなくなったとき、終了。

たとえば1からはじめるとすると、右、右下にあれば一番上の段が11個ならば、次の対象は2と12その次、2に対して3と12,13であり、12に対して1,2,13,22とどんどん増加していくことになる。
まあとりあえず下位のプログラムとして、周囲6マスがつながっているかどうかの判定を行うものを作ってみる。

あ、それと空白の存在を忘れていたので急遽種別と番号を-1として定義。

そして、とりあえずグループ1を視覚化した。
とりあえず今は一番番号の若いものを1とし、それと連結しているものを全て1というグループにするように。ただこれを作るのにそこそこ時間がかかった。なぜか左上から自身に来るときにグループ情報の受け渡しができず、以降が0になるという問題が。
しかしこれはどうやら1行プログラムに抜けがあっただけだったことに気づいて、完成。
上の画像では、もっとも上のBOMBが若い番号なので、それとくっついているもののみが1というグループに属することになる。

なぜグループを作ったりするのか。
それはこれがまとまった落下処理に直結するからである。

実は、落下するかどうかは、グループという言葉でいいかえると
あるグループの中にもっとも上の段と連結しているものが存在しないことが落下することの必要十分条件となるので、もうここまでくればもっとも上の段にグループの数字が存在するか、もしなければそのグループは全部落とす、という簡単な処理に結び付けられる、ということに今気づいた。
まあグループ付けすることは必要だろうという気はしていたが…。

あとはその他のグループに2,3,…と順に振っていけば、ほとんど落下処理の完成は目前。


ちなみにこのグループ化する内部処理は結構難しく、
まず1つグループ名を定めて、まわり6マスが空白でなければそのグループ名と同一になり、それを繰り返すことにより順番にグループが定義されていく。ただしいつかのビンゴのように、定義の順に関する問題があるので、都度グループ情報を更新していっている。ここの説明はかなり難しいし、おまけに言葉で説明するのも相当難しいと思うので省略。
図を描いたら分かりやすいと思うが…。

ゲームの進展状況55 下に降りる操作ほぼ完成

このように…といっても画像なので分からんが、上から次々と段になったドロップの組が生成されていく、という処理を完成させた。

もっとも上の段が10個構成か11個構成かで変数のシフトの具合が変わり、またピクチャの表示もかわるため、何気に簡単、とまではいかないが、難しくも無い。

これはHITして消滅そして落下でさらに消滅の後に、アニマドロップのように空いている段数分だけ補充されるイベントとして後々機能することになる。

次とりかかるべきは、BOMBの爆発範囲、連鎖処理、落下の判定、この3つである。
これらができれば、もうほぼ基本的な枠組みは完成したといっていいだろう。

これはいわゆるアニマドロップのプログラムの応用版。何しろJPCなので派手にしたい。

うれしいことに、爆発範囲の設定は、場合分けが2つなので非常に楽。
落下の判定も、案は考えてある。

2018年3月6日火曜日

ゲームの進展状況54 アニマドロップのシステム構築

さて、JPにアニマドロップのシステムを導入しようと考えている。

まずアニマドロップの性質として、マスは8,7,8,7,8,7,8,7,8という9段構成になっている。
これはマスが68マス存在することになる。

しかし我のつくるアニマドロップ風のゲームは、JPチャンスであるからより華やかでなければならない。
加えてJPC中は通常ゲームが動作をしないので、思う存分これに処理を集中させられる。

とりあえず45×45がドロップの大きさ。配当や説明を付け加えるため、横幅のピクセルはだいたい600くらいにしたいところ。となると大体横13,14個くらい。
しかしここは調子に乗って、15個にしようと思う。つまり、15,14,15,14の繰り返しを考える。
縦は500ピクセルほど占有する予定で、15,14の一塊につきsqrt[3]を考えると、45(sqrt[3]+1)でおよそ45*2.7が121.5くらいになるので、5セットくらいぶち込む予定。つまりは10段組み込む。

ただこれだと横長になるという問題をはらんでいて…。
なので正方形にしようと思う。縦はもう余裕がないので8段くらいにしておいて、これで486ピクセルくらい。となると横は45でわった商が11くらい。

決まった。上から11,10,11,10,11,10,11,10,11,10,11,10,11という組み合わせ。
これでマス変数は137個。cself内で収まることが期待できる。

まあ何はともあれ配置してみなければ実感がわかない。














こんな感じ。これはなかなかいい。これをベースに作成開始や。








ゲームの進展状況53 アニマドロップ

JPCは、大量のボールで抽選するアニマドロップ風のゲームにしようと考えた。

そのためには、まず形状(本物は板?状)を考える必要があり、
そして次に落下の判定が必要。
上とつながっていないドロップを全部落とす、というもの。

これについて、いい案が思い浮かんだ。
まず全てのマスに対して、それ自身が未HITの場合、周囲6マスに対象を広げて、そのそれぞれに対して同様の操作を実行。それを繰り返していき、この操作が有限回で終了すればそれは独立した区域、すなわち落ちるべきかたまりとなる。
ただし、一番上の位置まで達したならば、これは落ちるべきものではないとの判断を下す。

これを利用すれば、たとえば下の状況を考えると…。
スウィートJP82とかかれているものを考える。
これは、たとえば全ての緑ドロップは、確かに下方向に広がれば空白ではあるが、これは同時に一番上に達することになる。下のほうを選ぶと、上まで達する時間は長いが、それでも高々有限回である。とくに入り組んだ構造では、なかなか上に達しないことがある。
この場合、どんどん対象を広げることを考えると、すでに端に達したものは判定を終了することにする。
しかしこれの問題点は、各マスに対してこの判定を行わなければならない、ということである。

だがよく考えると…。

あらかじめあるマスに対して判定した途中のマスを格納しておき、以降の対象のマスの判定でその格納値があれば先ほどのマスの対象の結果を参照すればいいのではないかと思った。

こうすれば、たとえば上のJP82のものでは1マス目ですでにすべてのマスに対して対応できたことになる。いうなれば、分離された領域の数が多くなればなるほどこの処理は時間がかかることになる。

まあとりあえずは、以前キャンディドロップで周りのマスの判定をしたが、これがかなり大変だった。
しかし上記のような形ならば、左上、右上など相対的な位置の参照の場合分けが少なくて済む。

決まった。

JPCは大量のクラッシュドロップ(アニマドロップ)風の連鎖ゲームとして、その落下数の総数あるいは全消しの回数などをもとにして考えようと思っている。

…しかし、大量のボールで抽選となると、どんどん入っていくわけで、とにかくピクチャ表示が大変になる。

…まあいずれにせよ、まずはピクチャの座標の設定からはじめなければならない。
円を接させるような構造をする関係上、sqrt[3]が登場する。
すでにキャンディドロップでのドロップの画像は準備されているので、これと同じ大きさで配置しようと思っている。

さて、過去言及したが結局使わなかったぐるぐるドロップとうずうずドロップ。
これらのドロップは、番号が新たに配置されたり、BOMBの一部がグレードアップ(範囲拡大)したりするようにさせようかと考えている。

だが、これ、頭ではだいたいのイメージを理解していてもこれを表現するとなるとそれはそれは大変。

2018年3月3日土曜日

ゲームの進展状況52 倍率JPC演出

さて、JPC突入後は、ビッグ以上ではちょっとした演出がかかる。
それをとりあえず再現することにした。

みたところによると、輪がきゅるきゅるっと中央に集まって、各種別の背景がアップで出てきて、その後左右から種別の名前がでてきて融合、次にJACKPOTの文字が出現し、左右に消えたあと、倍率が表示。その後小さくなりながら上へ。
ちょっと英語になっているが気にしない。実際は本物みたいなあの演出をある程度再現。
まだ開発?段階なので後ろにクリスタルチャンスが残っているが気にしない。

ところで、せっかくなのでやっぱりJPCの演出、アニマロッタとは違うものにしようかと考えている…が、案が思い浮かばない。


ゲームの進展状況51 ついにJPC作成開始

ようやく、いろいろと画像を動画などからとってきて、素材が用意できてきた。

これらをもとに、いよいよJPCの作成を開始しようかと考えている。

とりあえず下画面を作成することに。
…しかしこのくりぬく作業、想像以上に大変や…。
挙動を似たようなものにするため、わざわざピクチャを分けてすでに考えている。
このフォント、なかなかいいものがみつからなかったのでしょうがないのでがんばってくりぬくことに。

新しいアニマ系ゲームの作成に伴うブログ移転

https://zisakukarako.blogspot.com/ というブログで、今度は自作カラコロッタをつくってみようということにした。 今度は自作アニマロッタ風ゲームでの反省を生かす予定。 どこまで続くかは不明。 さらに、自作アニマロッタまで作ろうと試みている...