たこぜりー研究室

大腸菌DNAは4.64Mbp。酵母は13Mbpで、ヒトは3Gbp

スポンサーサイト

#
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

安心神話の崩壊

#38
最近、描画部分改良にあわせるための、カードを捨てる部分の再実装に手をつけました。

ところが


これがうまくいかない……。まぁ自分が悪いんだけど。

まず致命的な点。

pm.Current()->Pop(pm.Current()->GetSelected())
つかこれでネーミングのセンスのなさがばれるな。
まぁいいや。

pm.Current() で今ターンのプレーヤーへのポインタを取得。
Pop(int card) でcardを捨てる。捨てたカードの場所を返す。
GetSelected() で今選択されているカードの中で降順で1つだけ取得。

これだとカードを出す順番を思いっきり無視しているのでうまくいかない。

で、Pop() と GetSelected() をハイブリッドさせちゃおうということでこんな新メンバ関数誕生。

int PopSelect(bool findPlus, int &discard);

カードはマイナスイオン、プラスイオン、特殊カードの順に並んでいる(はず)ので、プラスから捨てるかどうかの引数と、
と結局何のカードを捨てるのか、わからなくなるので1個分参照渡し。


……

これでもうまくいかん。つかむしろ悪化。カードを捨てることができてない。

よくよく考えてみると、PopSelect() 内で Sort() を呼び出していることに気づく。
実は

Sort() は、カードの選択状態をクリアしてるんだよなー

まずい。

といっても、Sort() を呼び出さないと、カードの不完全検索ができない。
完全検索ならカードがどういう順序で並んでいようが構わないが……。

うーん、仕方ないか。不完全検索はカードがソートされている保障なしでいくか。引数増やして、必要ならばソートするようにフラグを立てるとか。
複数枚のカードを出している途中で手札がソートされているのは変だしな。



でも、これだけでは説明できない、むしろもう出くわさないだろうと思っていたような嫌な現象に出くわしたので……、これだけでは解決しなさそうだ……。
まぁいいや、なんとかする。今年度中までに完成させようヽ(´ー`)ノ


たぶん

コメント


コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURL:  http://takojelly.blog2.fc2.com/tb.php/38-fb641603
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。