Pythonトランプゲーム10時半(学堂オンライン-Pythonプログラム設計基礎)タスク1-10

66851 ワード

トランプゲーム-10時半
  • 前言
  • 10時半ゲームルール紹介
  • ミッション8-トランプ類
  • 任务8-手札类
  • 任务9-一副牌類
  • タスク9-プレイヤークラス
  • タスク9-荘家類
  • タスク10-Game.pyフルコード
  • TenPoinHalf_class.pyフルコード
  • 学堂オンラインカリキュラムリンク
  • 前言
    コードファイルはTenPoinHalf_に分かれています.class.pyとGame.py 2つのファイルは、デフォルトで同じディレクトリで実行するときにGameを実行するのを容易にするために実行されます.pyファイル
    10時半のゲームのルールの紹介
    アイテム名:簡易な10時半のカードゲームを設計します.
    プレイヤー:2人から4人で游んで、1人の荘家で、残りは暇な家です.目標:手に持っているカードの点数の和を10時半を超えないようにできるだけ大きくする.牌数:大王の52枚の牌点牌を1枚取り除く:A、2、3、4、5、6、7、9、10、そのうちAは1点の他の牌が自分の点数である.人牌:J、Q、Kは「人牌」と呼ばれ、いずれも半点とされている.
    トランプ:荘家自身からトランプを始め、時計回りに順番に閑家張に最初のトランプを配った.
    要牌:プレイヤーは自分のベースカードの点数によってカードを必要とするかどうかを選択することができ、勝算があると思ったら、カードを補充する必要はありません.逆に、荘家の下家から始まり、順番に荘家に補札申請を提出する.最大4枚までお願いできます.荘家は閑家の補札情報を受け取った後、必要な人にカードのトップから順番にカードを引かなければならない.1ラウンドごとにカードを補充し終わった後、もし誰かがまた補充しなければならないならば、依然として荘家に要求することができて、カードを補充する前後の順序が混乱してはいけないことに注意します.各閑家がカードの補充を要求しなくなった後、荘家は自分のカードをめくって、実際の状況を考慮してカードの山の中でカードを補充しなければならない.
    爆牌:持牌総点数が10時半を超えると、爆牌と見なされます.閑家はトランプを爆発させた後、もうトランプをもらうことができず、自分が賭けたチップを荘家に送った.
    勝負:荘家も補札したくない(この間爆発は起こらなかった)と、全員の持札を公開し、勝負を決める.もし荘家閑家がトランプをしたら、荘家は大きい.荘家の点数が最大(最も10時半に近いか、10時半に等しい)で、各家が注いだチップを取り出すことができます.逆に、荘家より点数の多い人がいれば、荘家は彼に自分が賭けたチップを支払わなければならない.互いに点数が同じなら引き分けと見なす.もし誰かが4枚のカードを補充したが、爆発が起こらなかったら、五龍(この基本的なカードは全部で5枚)と呼ばれ、その点数が表す意味は10時半よりも大きい.
    ミッション8-トランプ類
    (1)花色、数値、init()コンストラクタ、_を含むトランプを表すカードクラスを作成する.str()__関数、単一のカードのサイズを計算する関数などのメンバー.
    TenPoinHalf_class.py
    class Card:  #           Card 
        def __init__(self, suit, rank):  #         、  、  
            self.suit = suit
            self.rank = rank
            self.value = 0.0
            Card.calculate(self)
    
        def __str__(self):
            return "      %s,   %s,   %.1f" % (self.suit, self.rank, self.value)
    
        def calculate(self):  #           
            if self.rank == 'A':
                value = 1
            elif self.rank == 'J' or self.rank == 'Q' or self.rank == 'K':
                value = 0.5
            else:
                value = float(self.rank)
            self.value = value
    

    クエスト8-手札類
    (2)手札類Handを作成し,手札をクリアする方法,1枚札を追加する方法,1枚札を出す方法,手札点数を計算する方法を含む.
    TenPoinHalf_class.py
    class Hand:  #     Hand
        def __init__(self, name):
            self.name = name
            self.handcard = []
            self.handvalue = 0.0
    
        def __str__(self):
            return "  {}     ,   {:.1f}".format(self.name, self.handvalue)
    
        def clearhand(self):  #       
            self.handcard.clear()
            self.handvalue = 0.0
    
        def addcard(self, card):  #       
            self.handcard.append(card.pop(0))
            Hand.handcalculate(self)
    
        def givecard(self, card):  #          
            self.handcard.remove(card)
            Hand.handcalculate(self)
    
        def handcalculate(self):  #           
            value = 0
            for i in range(len(self.handcard)):
                value += self.handcard[i].value
            self.handvalue = value
    

    タスク9-1セットのカード類
    (3)4つの手札オブジェクトを含むリストを作成する(4)52枚のカードを含む1枚のカードオブジェクトを作成し,4つの手札オブジェクトに順番にカードを発行することを実現する.最後に4つの手札のカードとその総点数を印刷します.
    1つのカードクラスを作成し、1つのカードクラスを継承しますが、カードを生成したり、カードを洗ったり、カードを発行したりする方法が追加されました.
    TenPoinHalf_class.py
    class Deck(Hand):  #       ,        
        def __init__(self):
            self.card = []
            Deck.producecard(self)
            Deck.refresh(self)
    
        def producecard(self):  #    
    
            for suit in ['♥', '♠', '♦', '♣']:
                for rank in [
                        'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',
                        'Q', 'K'
                ]:
                    self.card.append(Card(suit, rank))
    
        def refresh(self):  #   
            from random import shuffle
            shuffle(self.card)
    
        def deal(self, hand):  #   
            hand.append(self.card.pop(0))
    

    タスク9-プレイヤークラス
    トランプを呼ぶかどうか、トランプを爆発させるかどうか、トランプに負けるかどうか、トランプに勝つかどうか、引き分けなどの方法を含むプレイヤークラスを作成します.
    TenPoinHalf_class.py
    class Player:  #    
        def __init__(self, name, chip):
            self.name = name
            self.chip = chip
            self.hand = Hand(name)
    
        def __str__(self):
            return "   {}       {:.1f} 
    "
    .format(self.name, self.chip) def bid(self): # if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']: print(" ! , !
    "
    ) return True else: print(" {}
    "
    .format(self.name)) return False def overflow(self): # if self.hand.handvalue > 10.5: print(" !
    "
    ) return True else: print(" !
    "
    ) return False def winlose(self, value): # if self.hand.handvalue > value.hand.handvalue or len( self.hand.handcard) == 5 > len(value.hand.handcard): print("win") return True else: print("lose") return False

    ミッション9-荘家類
    プレイヤークラスを継承し、トランプを呼ぶかどうかを書き換える荘家クラスを作成します.
    TenPoinHalf_class.py
    class Banker(Player):  #        ,       
        def bid(self):  #           
            if input("     {}     ?     Y>>".format(self.name)) in ['Y', 'y']:
                print("          !    ,  !
    "
    ) return True else: print(" {}
    "
    .format(self.name)) return False

    ミッション10-Game.pyフルコード
    (1)タスク9に基づいて本タスクのコード作成を完了する.(2)タスク8とタスク9で作成されたクラスをTenPoinHalf_という名前に個別に置く.classコードファイルにあります.(3)Gameというコードファイルを作成し,その中にGameクラスを作成する.(4)ゲームのメイン関数main()をGameコードファイルに作成する.(5)コードをデバッグし,10時半のゲームのすべての機能を実現する.
    Game.py
    import TenPoinHalf_class as a
    
    
    class Game:
        def __init__(self, id):
            self.id = id
            self.players = []  #       4         
            self.chips = [0.0, 0.0, 0.0, 0.0, 0.0]
            while True:
                try:
                    p = int(input("       (1-5)>>"))
                    if 1 <= p <= 5:
                        self.nums = p
                        break
                    else:
                        pass
                except Exception:
                    print("
    Error:
    "
    ) for i in range(self.nums - 1): self.players.append( a.Player(input(" {} >>".format(i + 1)), 100)) self.players.append(a.Banker(input(" >>"), 100)) def main(self): # self.deckcard = a.Deck() # 52 for i in range(self.nums - 1): while True: try: p = float( input(" {} 20 >>".format(self.players[i].name))) if 0.0 < p <= 20.0: self.chips[i] = p break except Exception: print("
    Error:
    "
    ) for i in range(self.nums): # 4 self.deckcard.deal(self.players[i].hand.handcard) # self.players[i].hand.handcalculate() # # 4 print(self.players[i].hand, '
    '
    , *self.players[i].hand.handcard, '
    '
    ) for i in range(self.nums): while self.players[i].bid(): # self.players[i].hand.addcard(self.deckcard.card) # print(self.players[i].hand, '
    '
    , *self.players[i].hand.handcard, '
    '
    ) if self.players[i].overflow(): # self.players[i].hand.clearhand() # break # elif len(self.players[i].hand.handcard) == 5: print(" !
    "
    ) break for i in range(self.nums - 1): if self.players[i].winlose(self.players[self.nums - 1]): # or print(" {} !".format(i + 1)) self.players[i].chip += self.chips[i] self.players[self.nums - 1].chip -= self.chips[i] print("{} {}
    "
    .format(self.players[i].name, self.players[i].chip)) else: print(" {} ".format(i + 1)) self.players[i].chip -= self.chips[i] self.players[self.nums - 1].chip += self.chips[i] print("{} {}
    "
    .format(self.players[i].name, self.players[i].chip)) print(" {} {}
    "
    .format(self.players[self.nums - 1].name, self.players[self.nums - 1].chip)) print(" {}
    "
    .format(self.id)) def play(): n = 1 x = Game(n) twice = 1 while True: print("
    {} "
    .format(twice)) x.main() if input(" ? Y>>") in ['Y', 'y']: twice += 1 else: break print("

    "
    ) print(*x.players) if __name__ == '__main__': play()

    TenPoinHalf_class.pyフルコード
    TenPoinHalf_class.py
    class Card:  #           Card 
        def __init__(self, suit, rank):  #         、  、  
            self.suit = suit
            self.rank = rank
            self.value = 0.0
            Card.calculate(self)
    
        def __str__(self):
            return "      %s,   %s,   %.1f" % (self.suit, self.rank, self.value)
    
        def calculate(self):  #           
            if self.rank == 'A':
                value = 1
            elif self.rank == 'J' or self.rank == 'Q' or self.rank == 'K':
                value = 0.5
            else:
                value = float(self.rank)
            self.value = value
    
    
    class Hand:  #     Hand
        def __init__(self, name):
            self.name = name
            self.handcard = []
            self.handvalue = 0.0
    
        def __str__(self):
            return "  {}     ,   {:.1f}".format(self.name, self.handvalue)
    
        def clearhand(self):  #       
            self.handcard.clear()
            self.handvalue = 0.0
    
        def addcard(self, card):  #       
            self.handcard.append(card.pop(0))
            Hand.handcalculate(self)
    
        def givecard(self, card):  #          
            self.handcard.remove(card)
            Hand.handcalculate(self)
    
        def handcalculate(self):  #           
            value = 0
            for i in range(len(self.handcard)):
                value += self.handcard[i].value
            self.handvalue = value
    
    
    class Deck(Hand):  #       ,        
        def __init__(self):
            self.card = []
            Deck.producecard(self)
            Deck.refresh(self)
    
        def producecard(self):  #    
    
            for suit in ['♥', '♠', '♦', '♣']:
                for rank in [
                        'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',
                        'Q', 'K'
                ]:
                    self.card.append(Card(suit, rank))
    
        def refresh(self):  #   
            from random import shuffle
            shuffle(self.card)
    
        def deal(self, hand):  #   
            hand.append(self.card.pop(0))
    
    
    class Player:  #    
        def __init__(self, name, chip):
            self.name = name
            self.chip = chip
            self.hand = Hand(name)
    
        def __str__(self):
            return "   {}       {:.1f} 
    "
    .format(self.name, self.chip) def bid(self): # if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']: print(" ! , !
    "
    ) return True else: print(" {}
    "
    .format(self.name)) return False def overflow(self): # if self.hand.handvalue > 10.5: print(" !
    "
    ) return True else: print(" !
    "
    ) return False def winlose(self, value): # if self.hand.handvalue > value.hand.handvalue or len( self.hand.handcard) == 5 > len(value.hand.handcard): print("win") return True else: print("lose") return False class Banker(Player): # , def bid(self): # if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']: print(" ! , !
    "
    ) return True else: print(" {}
    "
    .format(self.name)) return False

    スクールオンラインレッスンリンク
    https://next.xuetangx.com/course/SZIIT61021001122/1515546