ブログ内検索

2019年9月20日金曜日

14-4 配当傾斜表示

さて、各ゲーム数が1000を超えてだいぶんPO率も安定してきたところでその画像を貼る。
これによると、アニマドロップ以外はなんかいい感じのPO率になっているのではないかと思う。ガーデンとバルーンが悪いのはしょうがない。
これはやっぱりアニマドロップの初期配置にもPO率依存の設定を加えるほかあるまい…。
全体POは84%で、ラウンドワンが88%らしいので、なかなか再現率が良い…?

さてこの記事での本題に移る。それは、これまで配当はなんかなぞの図形にx軸に水平に数字が描画されていたと思うが、それを今回は反時計回りにπ/18(10度)ほど回転させたいと思っている。
しかし、この数字描画はどうやっているかというと、
例えば5桁表示なら所定の中心座標を取得した後中央にある3桁目は普通にそのマスでよいが、拡大率に応じて2桁目と4桁目は文字を開けなければならない。
そして1,5桁目もそれは同じである。
このようにして、ピクチャ5個を間隔をあけて表示しているというところに、配当文字の傾斜を容易とできない理由がある。

しかし、図を使うことにより、これは簡単に解決できる。
もし中心の座標が分かれば、そこを中心として文字を現在位置から中心座標と等しい距離を保ちながら10度回転させ、さらに自分自身の文字の傾斜度も10度回転させればそれでよい。回転処理、というとすぐさま回転行
列の話になってきて、ウディタでは行列は実装されていないが定義により簡単に導入することも可能である。
がしかし、今回は回転させるのは反時計回りに10度くらいしかないので、もうちょっと初等的な解放を使って求めてみることにした。単純に回転させた軌跡を描いて、そこに直角三角形を描いて実際の相対的な移動を考える方法である。

さて、n桁で上からm番目の桁は、(n+1-2m)/2にaを乗じた距離分、中心から離れている。
ここでaは拡大率依存の文字間である。
例として、n=1,m=1ならば自分自身が中心なので当然距離は0。
距離が0ということは点は一致。詳しくは距離空間の定義を参照。
n=6,m=2ならば3a/2である。
これは、6桁目で2文字目、つまり一万の位であり、
一万と千の位には定義から文字間a、そして千と百の位は、この間に中心があるので
中心からの距離としては線の位はa/2。よって合計して3a/2である。

中心との距離さえわかってしまえば、反時計周りにθ(>0)回転させるということは、
x軸方向に(n+1-2m)/2 * (1-cosθ)移動し、
y軸方向に(n+1-2m)/2 * sinθ 移動するということに置き換えられ、これは
中心座標と自身のピクチャ座標に依存しない。
というわけで、中心座標を入力せずに、引数としては回転角度、桁、昇順での桁番号を取得するだけで複数の数字を一つのピクチャとみた回転処理ができるわけである。

余談だが、ウディタでは数字をピクチャとして描画する機能があり、これを使えば数字の拡大などは楽だが、なぜか回転できない。結局これを自分で作るしかないわけである。

プログラムへの組み込み方としては、
さきにn+1-2mを計算させておいて、1000-(cosθ*1000)を計算。それから最後に2*1000、つまり2000で割ればよい。でないと問題が生じる。
具体的には、2*0.5とかをウディタで計算させるとき、2*5/10としなければならず、2/10をしてから*5するのはNG。なぜなら2/10は0を返してしまい、それに5をかけても0だからである。この点に注意して常に配当計算やPO計算を行っている。もちろんこういうゲームを作り始めた初期(2年くらい前?)は、これの計算でやらかしてたりする。

そうしてプログラムは以下のように組んだ。
要するに桁数を取得(このもうちょっと上の行なので表示されてない)して、各桁の数字に対して先ほどのべた座標移動を施す。そうして以下のように配当表示が進化した。
確かに配当の表示がアニマロッタっぽくなったような気がする。
ついでに数字のピクチャも若干金色の明度をあげた。

さて、今度は話を戻してアニマドロップの初期配置によってなるべくPO率を設定できるようにしてみる。これはコモンイベント579番で、800行くらいある。