This comment is reply for 8258 saws: 麻雀ゲームの部分的な作成がお題になります...(麻雀ゲーム1). Go to thread root.
saws #8263(2008/12/30 03:52 GMT) [ Ruby ] Rating0/0=0.00
こんな感じで. Playerクラスは拡張性を与えるために追加してみました.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
class Mahjang Tu, Num = :t, 14 Hai, Tuhai = [:m, :s, :p, Tu], [:wt, :sh, :et, :nh, :hk, :ht, :tu] module WisePlayer def think unless @tumo puts [*1..Num].map{|c| format("% 3d", c)}.join(?,) + ' 0=tumo', self true until (0..Num).include?(i = gets.to_i) @tumo = true if i.zero? end @tumo ? Num : i end end class Player def initialize @hai, @ho = [], [] @tumo = nil end attr_reader :ho def to_s @hai.map{|p| [p.name, p.num]}. map{|n,m| n != Tu ? " #{n}#{m+1}" : " #{TuHai[m]}"}.join(",") end def repai() @hai = @hai.sort_by{|h| [h.name, h.num]} end def size() @hai.size end def get(a) @hai << a end def think() Num end def set() @ho << @hai.delete_at(think-1) end end def initialize pi = Struct.new("Pi", :name, :num) @players = Array.new(4){Player.new} @players[0].extend(WisePlayer) @hi = Hai.map{|s| Array.new(4){Array.new(9){|i| pi.new(s,i) unless s == Tu && i >= 7}}}. flatten.compact.shuffle init_set end def init_set cycle{@players.last.size >= Num-1} @players[0].get(@hi.delete_at(3)) end def play cycle(true){@hi.size <= Num} @players.each{|p| puts p} end private def cycle(play=nil) @players.cycle{|p| p.get(@hi.shift) if p.size < Num p.set if play p.repai break if yield} end end if __FILE__ == $0 m = Mahjang.new m.play end
Rating0/0=0.00-0+
[ reply ]
saws
#8263()
[
Ruby
]
Rating0/0=0.00
こんな感じで. Playerクラスは拡張性を与えるために追加してみました.
Rating0/0=0.00-0+