ZAPAnet総合情報局 > ZAPAブログ2.0 > ドラクエ8モンスター度チェックを作る上で

ドラクエ8モンスター度チェックを作る上で

2006年04月10日 プログラミングTIPS
ドラクエ8モンスター度チェックを公開してから、何人かの方に遊んでいただけたようで幸いです。
(ちょっとドラゴンクエストVIIIの流行時期を逃していますが、成分解析が人気であることを受けての作成なので、その辺はご勘弁を…。ドラクエ9が出たらまた作ってみようと思います)

なぜか「くさった死体」とか「死霊の騎士」とか「マミー」とかに似ている人が多いような気もしますが、多分気のせいです。心が腐ってるからそうなるというわけでもありません。
一応全モンスター(ボスモンスターを除く)の中からランダムで選ばれるように作ってあるので、「メタルキングが出にくい」とか「はぐれメタルが出にくい」とかそういった要素はありません。
実は100人に1人「大当たり!」が出るようにもなっているので(ビックカメラ風)、出たらラッキーだと思ってください。(ちょっと期待はずれな結果が表示されるかもしれませんが…)

ドラクエ8モンスター度チェックのシステムは、PHPを使って作りました。
以下はこのシステムを作った上での簡単なまとめです。
 

ドラクエ8モンスター度チェックシステム

1.ドラクエ8に登場するモンスターのリストを作成
全モンスターの一覧は→大人のためのドラゴンクエスト8攻略情報 モンスターページに作ってあったので、ここからボスモンスターを除きリストを作成して、プログラム内の配列に格納。
2.入力フォームの作成
HTMLタグを使って名前入力欄とsubmitボタンを作成。
3.入力された名前から一定の数値を作成
数値作成を完全にランダムにしてしまうと、名前を入力するたびに数値が変わってチェック結果が変わってしまうため、一定の数値になるように工夫。今回は入力された名前から16進数→10進数→桁減らしと処理して一定の数値を求め、擬似乱数発生系列のseedに決定。使った関数はbin2hex、hexdec、srand。
4.求めた数値を元にモンスターに似ている割合を決める
求めた数値から1〜100までのランダムな値を取り出し、取り出された値の合計が100になるまで繰り返し。(2回目以降は1〜100-取り出された値の合計値までのランダムな値を取り出す)
5.割合を大きい順に並び替える
PHPのrsort関数を使って並び替え。
6.割合の数と同じ数だけのモンスターを1.のリストから取り出す
PHPのarray_rand関数を使って簡単に取り出し。
7.結果表示
今までの処理を元に結果を表示。割合の数が1つだけ、つまりは100%の時には、特別な表示を行うように設定。(実は100%になった時にバグが発生していて、その時に追加した機能だとかは秘密事項
8.チェック結果をブログやホームページに簡単に貼り付けられるようにする
「→この結果をブログやホームページに載せる」リンクを作り、HTMLタグなどをコピーできるようにする。
9.自分のサイトにチェック用入力欄を貼り付けられるようにする
入力フォームのタグを設置。ところが、元のページの文字コードEUC-JP以外のページに設置すると文字化けすることが発覚。formタグにaccept-charset="euc-jp"を設置してもIE6.0のバグで機能せず。�のダミー法などもうまくいかず、結局はjavascriptで対応。
 formタグにonsubmit="return false;" target="_blank"
 inputタグにonclick="document.charset='euc-jp'; document.name.submit();"
を追加。これにより、submit時に無理矢理ページをeuc-jpに変換させてから送信させ文字化け回避。元のページのエンコードが変わってしまう点、javaスクリプトに対応していないブラウザがある点などに関しては、諦め。
10.テストして公開
自分でいろいろテストしてみて、問題が無いようなので公開。テストしてみないと気付かない点もいろいろあるためこの作業はかなり重要。


以上のシステムを全て紙に書き起こし、この順番にそって作っていったかというとそうでもなく、上の処理はできあがったPHPのプログラムを見ながら書き起こしたものです。

実際は、
1.名前を入力してもらう
 ↓
2.入力された名前を元に一定の数値を決める
(一定の数値にしないで完全にランダムにしてしまうと、チェックするたびにチェック結果が変わってしまい、「名前」を入力してもらう意味が無くなってしまいます)
 ↓
3.一定の数値を元に似ているモンスターを決定し表示する
この流れだけを頭にプログラムを作っていきました。
本当はもっとしっかり仕様書を書くクセを持っていた方が良いのかもしれませんが、単純なシステムなので省略することにしました。
PHPにbin2hex、hexdec、srand、rsort、round、array_randなどの便利な関数があることを調べて、プログラムを順に作りシステム自体は完成。
最後に、Webシステムっぽくブログで紹介できる機能も追加して終了しました。


どんな結果が出るかは自分でもわからないので、いろいろ試してレアなモンスターに似ている人を探してみるのも楽しいかもしれませんね。