ちまちまとLogPSM訳してはいるんですが,ちょっと飽きてきました。
そんなわけで,息抜きとしてプログラム書こうかなと思いました。
いつもはグラフィックス系のプログラムばっかり書いているので,
たまにはちょっとゲーム寄りのプログラムも書いてみたいなぁーと思い立ったが吉日。
早速書いてみました。
最近知り合いの方とボードゲームをやる機会があるのですが,そのボードゲーム教育向けにはすごく良いのですが,ゲームとしてはかなりツマラナイ。
ちょっと手を加えてやれば面白くなりそうなのに残念だなぁーと思っていたのですが,「そうだ!自分でつくればいいんじゃね?」と安直に思い立ちました。
そういうわけで,すごろくゲームをつくってみようかなーと思います。
すごろくゲームの肝といえば,やっぱりサイコロ。
よっしゃ!作るか! …と思い立ちましてサイコロシミュレータ作ってみました。
サイコロを振るプログラム自体は (乱数 % 6) + 1 で速攻で実装が終わるのですが,アニメーションどうしようかな?と詰まりました。
まず困ったのがどうやってサイコロ回転させるということです。
適当に回転させると目が偏るし,縦回転だったやつが急に横回転になるのも何か変な感じするしなぁーと悩む。
HavokとかPhysXとか使ってガチでシミュレーションさせるのもいいんですが,今度は終了条件決めるの面倒じゃね?と悩む。
結局わからないので,桃鉄参考にすればいいんじゃん!と思い,土日でひたすら桃鉄のサイコロを研究・考察して作成したのが,動画のサイコロシミュレータです。
まだ1個しかサイコロ振れませんが,なんとかしてサイコロ5個までは対応したい & 音つけたいです!!
ちなみにサイコロの軌跡は完全に手付けです。そのため,位置決めが結構面倒くさい。だから2個とか3個とかサクッとつくれていないんですよねぇ~。
正射影で計算して45度回転させるのも手かなぁ~なんて思ったのですが,結局実装のコストとか考えて手付けアニメーションにしました。
とりあえず今は普通のサイコロのテクスチャ使っているのですが,「これサイコロのテクスチャ変えれば,”ごきげんよう”できるんじゃね」とか色々と面白いことに使えそうな気がします。
あと,乱数は0 ~ uint32_tの最大値 だと,偏りが出来て各目の確率がぴったり 1/6 にならないので,乱数が6の倍数になるようにきちんと生成範囲は調整を加えています。
※追記
サイコロ5つまで対応してみました!!
あと,折角なのでGithubでソースコードを公開しました。
下記からダウンロードできます。
https://github.com/ProjectAsura/dice