- 263 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:32:48 ]
- じゃんけんだと、手の種類が2個だと勝敗が決まってるんだよな。
3のときと1のときはあいこだよな。 いちいち判定しないで #仮想コード players.find(winner_hand(*hands.uniq)) if hands.uniq.size == 2 とかでいけるんじゃないの? Handクラスを作ってTyoki<-Paa<-Goo<-Tyokiとリンクリストみたいにして負けた方をincompatibleとして持つなら def stronger(other) @incompatible == other ? self : other end これだとwinner_handはいらなくて、 hands.uniq.inject{|a,b| a.stronger b}/*hands.uniq.size == 2*/で勝つ方の手が決まる。 まあ真偽値返すようにしてsortして[0]使うんでもいいけど。 Tyokiとかはインスタンスが違っちゃいかんのでHansの定数にするかシングルトンにするかクラスのまま使うかすること。 あとloopでgame呼ばないでgame側でloopしたほうがよさそうなのと win_patternは普通にクラス定数の方がいいんじゃねえかと思うのと gameでwinnerに@playersを代入してるけどインスタンス変数のまま使えばいいじゃんってのと コンストラクタでやってる色々は引数にした方がいいんじゃねえかとか。 あとオブジェクト指向っぽくするならCOMPlayerとHumanPlayerを作ってVisitorパターン使ってplayさせてみるとか。 といってもVisitorパターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
|

|