アルカディアでテトリスを作ろう!(6) mod7編【VOICEROID解説】

アルカディアでテトリスを作ろう!(6) mod7編【VOICEROID解説】

アルカディアでのテトリスの作り方のその6です。計算回です。動画中で紹介してるネットのは下記です。いやーすごい。 https://graphics.stanford.edu/~seander/bithacks.html#ModulusDivision レトロハードなら、割り算は掛け算シフトが最強やろと思ってたら、掛け算も任意長のシフトもないやんけ!ってなりましたね。舐めてました。動画に載せなかったバージョンやその.asm、パラメータ探しに使ったC++コードがgithubの方にあるので、興味がある人は眺めてみてください。 https://github.com/alcadia-kiritan/tetris/blob/main/06/spec.md コメントや広告やいいねありがとうございます。m(_ _)m---------------------------------------以下追記です。>> 8で割った余りを求めて7が出たら再抽選とかどうだろうネタあざす!やってみました。残念なことにだいぶ偏ってました。スペック的に乱数アルゴはxorshift8/16辺りしか使えないんですが、こいつらビット単位で見ると周期短めのパターンがあるので、&7とかとる奴はダメなようです。実は&7して7が出たら0~6を順次返す、とかを検証時にやってます。これも恐らく同様の理由でダメでした。>> xorshit+範囲分けでも傾向出るのか modでも分布は偏るし仕方ない気もするがはいだいぶ出ます。modを使うとかなり緩和されます。素数は偉大ですね。xorshift8だと、1つ前の数値の2倍±αとかになってることが多いので、範囲分けだと似たパターンがめっちゃ出てダメでした。xorshift16だと、範囲分けでも多少はばらつくんですが、mod7に比べると偏りがまだ倍ぐらいは強かったです。ピースの頻度の検証に使ったコードは下記です。並んだ1/2/3ピースの出現頻度とかを調べてます。&7再抽選のやつも先ほど加えました。 https://github.com/alcadia-kiritan/tetris/blob/main/04/xorshift16.cpp

http://www.nicovideo.jp/watch/sm40977763