;全自動モード (def AUTO_MODE false) ;プレイヤー人数 (def PLAYER_NUMB […]
;全自動モード (def AUTO_MODE false) ;プレイヤー人数 (def PLAYER_NUMB […]
;全自動モード (def AUTO_MODE false) ;プレイヤー人数 (def PLAYER_NUMBER 4) ;パス回数 (def PASS_NUMBER 3) ;トランプカードクラス (def TrumpCard-suitStrs ["▲" "▼" "◆" "■" "Jo" "JO"]) (def TrumpCard-powerStrs ["A" "2" "3" "4" "5" "6" "7" "8" "9" "10" "J" "Q" "K" "KR"]) (def TrumpCard-suits 4) (def TrumpCard-powers 13) (defrecord TrumpCard[name suit power]) (defn make-TrumpCard[suit power] (let [name (str (nth TrumpCard-suitStrs suit) (nth TrumpCard-powerStrs power))] (TrumpCard. name suit power) ) ) ;トランプの束クラス (defprotocol ITrumpDeck (-count[self]) (-shuffle[self]) (draw[self]) ) (defrecord TrumpDeck[__g __deck] ITrumpDeck (-count[self] (count @__deck) ) (-shuffle[self] (swap! __deck shuffle) ) (draw[self] (let [card (nth @__deck @__g)] (swap! __g inc) card ) ) ) (defn make-TrumpDack[& {:keys [jokers] :or {jokers 0}}] (let [ deck (vec(concat (apply concat (for[suit (range TrumpCard-suits)] (for[power (range TrumpCard-powers)] (make-TrumpCard suit power) ) )) (for[jokers (range jokers)] (make-TrumpCard (+ TrumpCard-suits jokers) TrumpCard-powers) ))) ] (TrumpDeck. (atom 0) (atom deck)) ) ) ;プレイヤークラス (defprotocol IPlayer (sortDeck[self]) (addCard[self card]) (removeCard[self cardName]) (existCard[self cardName]) (gameOut[self]) ) (def MPlayer{ :sortDeck (fn[self] (let [sortValue (fn[v] (+(*(:suit v) TrumpCard-powers) (:power v)))] (swap! (:deck self) #(sort-by sortValue %1)) ) ) :addCard (fn[self card] (swap! (:deck self) #(cons card %1)) ) :removeCard (fn[self cardName] (swap! (:deck self) #(remove (fn[card] (= cardName (:name card))) %1)) ) :existCard (fn[self cardName] (keep-indexed (fn[index card] (if(= cardName (:name card)) index)) @(:deck self)) ) :gameOut (fn[self] (reset! (:isGameOut self) true) ) }) (defrecord Player[deck id name isGameOut]) (extend Player IPlayer MPlayer) (defn make-Player[id name] (Player. (atom '()) id name (atom false)) ) ;メイン処理 (loop[i 0](when(< i 100) (println) (recur(inc i)))) (print " /---------------------------------------/ / 七並べ / /---------------------------------------/ ") (let [ trp (make-TrumpDack) p (atom '()) pid (atom 0) ] (-shuffle trp) (loop[i 0](when(< i PLAYER_NUMBER) (swap! p #(cons (make-Player @pid (str "Player " (inc @pid))) %1)) (swap! pid inc) (recur(inc i)))) (swap! p reverse) (loop[i 0](when(< i (-count trp)) (addCard (nth @p (mod i PLAYER_NUMBER)) (draw trp)) (recur(inc i)))) (doseq[pl @p] (sortDeck pl) (printf "\n【%s】\n" (:name pl)) (doseq[card @(:deck pl)] (print (:name card)) ) ) )