基于Python的斗地主游戏

import random
#牌类,54张牌,大小,花色,大小王
class Card:
    def __init__(self):
        self.card_number=None
        self.card_color=None
        self.card_king=None
#棋牌类,每个玩家的牌列表,3份牌
class Game:
    def __init__(self):
        self.card=None
#玩家类,发牌,换牌
class Person:
    def __init__(self):
        self.player1 = None
        self.player2 = None
        self.player3 = None
    def changeCard(self):#换牌操作
            self.player1, self.player2 = self.player2, self.player1
            self.player2, self.player3 = self.player3, self.player2
#牌库,牌的数目
#类的实例化
a=Card()
a.card_color = ['♠', '♣', '♥', '♦']
a.card_number = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
a.card_king = ['RJ','BJ']  # RJ:red joker,BJ:black joker
game1,game2,game3=Game(),Game(),Game()
game1.card,game2.card,game3.card=" "," ",""
card_list=[]#牌列表,存储54张牌
for i in  a.card_king:
    card_list.append(i)
for i in a.card_color:
    for j in a.card_number:
        card_list.append(i+j)
#发牌
for i in range(17):
    pai1=random.choice(card_list)
    card_list.remove(pai1)
    pai2 = random.choice(card_list)
    card_list.remove(pai2)
    pai3 = random.choice(card_list)
    card_list.remove(pai3)
    game1.card = game1.card + pai1 + " "
    game2.card = game2.card + pai2 + " "
    game3.card = game3.card + pai3 + " "
#换牌
p=Person()
p.player1=game1
p.player2=game2
p.player3=game3
print("交换前")
print("玩家1:",p.player1.card)
print("玩家2:",p.player2.card)
print("玩家3:",p.player3.card)
p.changeCard()
print("交换后:")
print("玩家1:",p.player1.card)
print("玩家2:",p.player2.card)
print("玩家3:",p.player3.card)

思路:首先定义三个类:牌类,54张牌,存储牌的花色,大小,大小王;棋牌类,即每个玩家的手牌;玩家类,实现换牌与发牌功能。每个类中都使用了构造函数,使用了实例变量。然后就是对类的实例化,首先对牌类实例化,对每张牌赋值;然后对玩家的手牌实例化,运用for循环的嵌套对牌进行遍历,然后就是发牌,17张牌依次发放,每发一张牌就从牌的列表中删除这张牌;最后,对玩家类实例化,给每个玩家发牌,然后进行交换。

 遇到的问题:

1.

   def changeCard(self):#换牌操作
            self.player1, self.player2 = self.player2, self.player1
            self.player2, self.player3 = self.player3, self.player2

换牌操作时,我写成了下面的形式:

def changeCard(self):  # 换牌操作
    self.player1 = self.player2
    self.player2=  self.player1
    

这是犯了一个错误,这个错误代码实际上这两个值都是self.player2的,这就是一个错误,导致我后来牌并没有交换;这就是一个细节问题

2.把牌存入列表中进行遍历

card_list=[]#牌列表,存储54张牌
for i in  a.card_king:
    card_list.append(i)
for i in a.card_color:
    for j in a.card_number:
        card_list.append(i+j)

这一步没有想到,听了老师提示的思路,才尝试着慢慢写出来,先把牌放入一个列表中,然后运用for循环遍历,然后使用append()方法依次将牌加入列表中

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值