2D开发游戏作业:面向对象设计应用——发牌游戏

蓝咒 提交于 2020-03-21 16:34:50

3 月,跳不动了?>>>

1.游戏介绍

四名牌手打牌,电脑随机將52张牌(不合大、小王)发给四名牌手,并在屏幕上显示每位牌手的牌。

2.程序设计步骤

设计类

发牌程序设计出三个类: Card类、Hand类和Poke类。 Card类

Card类代表一张牌,其中,FaceNum字段指的是牌面数字1~13,Suit字段指的是花色,”梅”为梅花,”方”为方块,”红”为红桃,”黑”为黑桃。 Hand类

Hand类代表手牌(一个玩家手里拿的牌),可以认为是一位牌手手里的牌,其中,cards列表变量存储牌手手中的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手等操作。

Poke类

Poke类代表一副牌,我们可以将一副牌看作是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌,而且要进行发牌、洗牌操作,所以增加如下的方法。 主程序

主程序比较简单,因为有四个牌手,所以生成players列表存储初始化的四位牌手。生成一副牌的对象实例poke1,调用populate()方法生成有52张牌的一副牌,调用huffle()方法洗牌打乱顺序,调用deal(players,13)方法分别给每位玩家发13张牌,最后示四位牌手所有的牌。

3.部分代码注释

1.定义扑克牌的牌面: 牌面数字:1—13 梅为梅花,方为方钻,红为红心,黑为黑桃

2.定义翻牌方法

3.定义牌的顺序号

4.生成一副牌

5.洗牌

6.给玩家发牌,每人默认13张牌

4.参考代码

    """ A playing card"""
    RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    SUITS=["梅","方","红","黑"]

    def __init__(self,rank,suit,face_up=True):
        self.rank=rank
        self.suit=suit
        self.is_face_up=face_up
    def __str__(self):
        if self.is_face_up:
            rep=self.suit+self.rank
        else:
            rep="XX"
        return  rep
    def flip(self):
        self.is_face_up=not self.is_face_up

    def pic_order(self):
        if self.rank=="A":
            FaceNum=1
        elif self.rank=="J":
            FaceNum=11
        elif self.rank=="Q":
            FaceNum=12
        elif self.rank=="K":
            FaceNum=13
        else:
            FaceNum=int(self.rank)
        if self.suit=="梅":
            Suit=1
        elif self.suit=="方":
            Suit=2
        elif self.suit == "红":
            Suit = 3
        else:
            Suit=4
        return (Suit-1)*13+FaceNum
class Hand():
    """A hand of playing cards."""
    def __init__(self):
        self.cards=[]
    def __str__(self):
        if self.cards:
            rep=""
            for card in self.cards:
                rep+=str(card)+"\t"
        else:
            rep="无牌"
        return rep
    def clear(self):
        self.cards=[]
    def add(self,card):
        self.cards.append(card)
    def give(self,card,other_hand):
        self.cards.remove(card)
        other_hand.add(card)
class Poke(Hand):
    """A deck of playing cards"""
    def populate(self):
        for suit in Card.SUITS:
            for rank in Card.RANKS:
                self.add(Card(rank,suit))
    def shuffle(self):
        import random
        random.shuffle(self.cards)
    def deal(self,hands,per_hand=13):
        for rounds in range(per_hand):
            for hand in hands:
                top_card=self.cards[0]
                self.cards.remove(top_card)
                hand.add(top_card)
if __name__=="__main__":
    print("This is a module with classes for playing cards.")

    players=[Hand(),Hand(),Hand(),Hand()]
    poke1=Poke()
    poke1.populate()
    poke1.shuffle()
    poke1.deal(players,13)
    n=1
    for hand in players:
        print("牌手",n,end=":")
        print(hand)
        n=n+1
    input("\nPress the enter key to exit.")
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!