通信対戦


作業記録
・先日のアイデアを実装。これ自体は2時間程度でできた。が、しかしズレる。同期できていない。
・通信データをテキストデータからバイナリデータへ変更。通信量云々ではなく、テキストだと小数が劣化してしまうため。
・今までオブジェクトをアップデートする順番はIDの若い順だったのを、作成された順に変更。通信対戦を使わない時はIDの若さがそのまま作成された順番になるけど、通信対戦だとそうとは限らなくなる。(http://d.hatena.ne.jp/i-saint/20050629#p1下)
・オブジェクトをポインタ値でソートしてる個所をいくつか発見して過去の自分を呪いながら修正。んなことしたら当然不確定になる。
・未初期化のメンバをそのまま使ってる個所を発見して以下同文。というかコンパイラ様未初期化メンバくらい警告してくださいおながいします。
・それでもズレる。そのまま現在に至る。

工場の到着地点を設定して自動生産で垂れ流して戦わせる、とかだと完全に同期できる。ユニットを1つでも選んで動かすとどっかズレる可能性があるらしく、50体くらい選択して動かすとほぼ確実にズレる。どっかに不確定要素が混じってるか、サーバーとクライアントで処理の順番が変わる部分がある様子。
延々ソースと睨めっこして疑わしい部分があれば修正してテストして駄目だったら最初に戻るの無限ループ。一箇所でここまで詰まったのは久しぶりな気がする。
終わらないバグの恐怖。檻の中の花。