;全自動モード (defconstant AUTO-MODE nil) ;プレイヤー人数 (defconsta […]
;全自動モード (defconstant AUTO-MODE nil) ;プレイヤー人数 (defconsta […]
;全自動モード (defconstant AUTO-MODE nil) ;プレイヤー人数 (defconstant PLAYER-NUMBER 4) ;パス回数 (defconstant PASS-NUMBER 3) (defmacro definit (this slots &body body) (let ((self (first slots)) (slots (rest slots))) `(defmethod initialize-instance :after ((,self ,this) &key) (with-slots ,slots ,self ,@body)))) (defmacro defmet (funcname args this slots &body body) (let ((self (first slots)) (slots (rest slots))) `(defmethod ,funcname ((,self ,this) ,@args) (with-slots ,slots ,self ,@body)))) ;トランプカードクラス (defconstant TrumpCard-suitStrs #("▲" "▼" "◆" "■" "Jo" "JO")) (defconstant TrumpCard-powerStrs #("A" "2" "3" "4" "5" "6" "7" "8" "9" "10" "J" "Q" "K" "KR")) (defconstant TrumpCard-suits 4) (defconstant TrumpCard-powers 13) (defclass TrumpCard()( (power :initarg :power :reader power) (suit :initarg :suit :reader suit) (name :reader name) )) (definit TrumpCard(self name suit power) (setf name (format nil "~A~A" (aref TrumpCard-suitStrs suit) (aref TrumpCard-powerStrs power))) ) ;トランプの束クラス (defclass TrumpDeck()( (g :initform 0) (deck :reader :deck :initform '()) (jokers :initarg :jokers :initform 0) )) (definit TrumpDeck(self deck jokers) (loop for suit from 0 below TrumpCard-suits do (loop for power from 0 below TrumpCard-powers do (push (make-instance 'TrumpCard :suit suit :power power) deck) ) ) (loop while (< 0 jokers) do (decf jokers) (push (make-instance 'TrumpCard :suit (+ TrumpCard-suits jokers) :power TrumpCard-powers) deck) ) ) (defmet -count() TrumpDeck(self deck) (length deck) ) (defmet shuffle() TrumpDeck(self deck) (let ((seed (make-random-state t))) (loop for i from 0 below (length deck) do (rotatef (nth i deck) (nth (random (- (length deck) i) seed) deck)) ) ) ) (defmet draw() TrumpDeck(self g deck) (let ((card (nth g deck))) (incf g) card ) ) ;プレイヤークラス (defclass Player()( (deck :initform '() :reader deck) (id :initarg :id :reader id) (name :initarg :name :reader name) (isGameOut :initform nil :reader isGameOut) )) (defmet sortDeck() Player(self deck) (flet ((sortValue(v) (+(*(suit v) TrumpCard-powers) (power v)))) (setf deck (sort deck #'(lambda(a b) (< (sortValue a) (sortValue b))))) ) ) (defmet addCard(card) Player(self deck) (push card deck) ) (defmet removeCard(cardName) Player(self deck) (setf deck (delete-if (lambda(v) (string= cardName v)) deck)) ) (defmet existCard(cardName) Player(self deck) (position cardName deck :test (lambda(cardName card) (string= cardName (name card)))) ) (defmet gameOut() Player(self) (isGameOut t) ) ;メイン処理 (loop for i from 0 below 100 do (format t "~%") ) (princ " /---------------------------------------/ / 七並べ / /---------------------------------------/ ") (let ( (trp (make-instance 'TrumpDeck)) (p '()) (pid 0) ) (shuffle trp) (loop for i from 0 below 4 do (push (make-instance 'Player :id pid :name (format nil "Player ~d" (1+ pid))) p) (incf pid) ) (setf p (nreverse p)) (loop for i from 0 below (-count trp) do (addCard (nth (mod i PLAYER-NUMBER) p) (draw trp)) ) (dolist (pl p) (sortDeck pl) (format t "~%【~A】~%" (name pl)) (dolist (card (deck pl)) (princ (name card)) ) ) ) (quit)