鱼C论坛

 找回密码
 立即注册
查看: 1109|回复: 24

python 二人21点游戏

[复制链接]
发表于 2023-12-8 22:50:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一个关于实现二人黑杰克/21点游戏的需求。根据要求,你需要编写一系列的函数,并在main()函数中调用这些函数。下面将逐个解释需要实现的函数及其功能。

a) instructions(): 这个函数应该简要介绍游戏规则和玩法。

b) makeADeckOf52()和shuffle: 这两个函数用于生成并洗牌一副有52个字符串元素的牌组。

c) update_hand_value(String c): 这个函数接受一个字符串参数,使用之前创建的字典来计算并更新玩家的手牌的黑杰克值。

d) dealAHand(deck): 这个函数从牌组中发出两张牌给玩家,并将这两张牌存入一个名为"hand"的列表。

e) displayHand(hand): 这个函数用于显示玩家的手牌。

f) bjHandValue(hand): 这个函数用于计算玩家手牌的总黑杰克值。

g) main(): 这个函数用于整个程序的流程控制,每轮玩家玩的时候需要初始化玩家的名字和黑杰克值,调用dealAHand()、displayHand()和bjHandValue()等函数来进行发牌和计算黑杰克值的操作,并判断胜负。

根据题目总要求,你还需要编写Player class来管理玩家对象的名字、手牌和黑杰克值等信息。

另外,你还需要创建一个Card class,它具有rank(牌面)和suit(花色)两个属性。可以为Card类添加一个名为bjValue的整型属性,用于计算卡牌的黑杰克值。你还需要根据Card类对之前的函数进行适当的修改,使其能够处理Card对象。

你还需要实现玩家可以选择是否继续要牌的功能。这意味着游戏将分为发牌和玩牌两个阶段。你需要在turn(deck)函数中实现这一部分的逻辑,直到玩家不再要牌或者手牌的黑杰克值超过21点为止。
最后,你需要在main函数中声明胜利者,即手牌总黑杰克值最高的玩家。

这是我浅浅写了一下的。但感觉有点问题


import random
class Player:
    def __init__(self,name,bjvalue):
        self.name=name
        self.bjvalue=bjvalue
    def __str__(self):
        return(self.name+" has the bjvalue: "+self.bjvalue)
    #def update_hand_value(self,newvalue):
        #self.bjvalu=self.bjvalu+newvalue
   

class Card:
    def __init__(self,r,s):
        self.rank=r
        self.suit=s
    def __str__(self):
        return(self.rank+self.suit)


def main():
    instructions()
    deck=makeADeckOf52()
    i=0
    while i<2:
        playername=input("Enter your name: ")
        total=dealAHand(deck,playername)
        i=i+1
        while total<21:
            option=input("Do you want another card?[y/n] ")
            if option=="n":
                print("Your turn is over.")
            else:
                anothercard=random.choice(deck)
                anothervalue=create_BJValue_LookUp(anothercard)
                total=total+anothervalue
        if total>21:
            print(playername+", you lose.")



def instructions():
    print("You two will play this Black Jack game in turn.")
    print("Each of you can get two cards randomly and you can choose request or hold a card.")
    print("The winner will be the person whose bjvalue is the closet to 21 and less than 21.")
def dealAHand(deck,playername):
    chance=0
    total=0
    hand=[]
    while chance<2:
        card=random.choice(deck)
        hand.append(card)
        value=create_BJValue_LookUp(card)
        total=total+value
        chance=chance+1
    display(hand)
    bjHandValue(playername,total)
    p=Player(playername,total)
    return total

def makeADeckOf52():
    #input: none
    #output: a list of 52 strings
    #process: pair the 4 suits with the 13 card rank values
   
    #modeling the 52 cards:
    #A-K of clubs,diamonds, hearts, spades
   
    cardSuits = ["&#9827;","&#9830;","&#9829;","&#9824;"]
    cardRanks = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    deck = []
   
    for s in cardSuits:
        for r in cardRanks:
            deck.append(Card(r,s))

    random.shuffle(deck)
    return(deck)

def create_BJValue_LookUp(cardStr):
    #assume card is in this format: A&#9827; , 10&#9829;
    #"&#9827;","&#9830;","&#9829;","&#9824;"

    rank = cardStr[:len(cardStr)-1]
    print(rank)
    specialValues = {"A":1, "J":10,"Q":10,"K":10}
    if rank in specialValues:
        bjValue = specialValues[rank]
    else:
        bjValue = int(rank)
    return(bjValue)

def display(l):
    print(l)
def bjHandValue(n,t):
    print(n+", your total BJvalue is "+t)

main()

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-10 03:20:53 | 显示全部楼层
@FishC AI
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 03:21:04 | 显示全部楼层

你好!我是FishC的AI助手,很高兴为你解答问题。如果你有任何关于编程的问题,尽管问吧!我会尽力帮助你。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 03:21:51 | 显示全部楼层
FishC 发表于 2023-12-10 03:21
你好!我是FishC的AI助手,很高兴为你解答问题。如果你有任何关于编程的问题,尽管问吧!我会尽力帮助你 ...

这是一个关于实现二人黑杰克/21点游戏的需求。根据要求,你需要编写一系列的函数,并在main()函数中调用这些函数。下面将逐个解释需要实现的函数及其功能。

a) instructions(): 这个函数应该简要介绍游戏规则和玩法。

b) makeADeckOf52()和shuffle: 这两个函数用于生成并洗牌一副有52个字符串元素的牌组。

c) update_hand_value(String c): 这个函数接受一个字符串参数,使用之前创建的字典来计算并更新玩家的手牌的黑杰克值。

d) dealAHand(deck): 这个函数从牌组中发出两张牌给玩家,并将这两张牌存入一个名为"hand"的列表。

e) displayHand(hand): 这个函数用于显示玩家的手牌。

f) bjHandValue(hand): 这个函数用于计算玩家手牌的总黑杰克值。

g) main(): 这个函数用于整个程序的流程控制,每轮玩家玩的时候需要初始化玩家的名字和黑杰克值,调用dealAHand()、displayHand()和bjHandValue()等函数来进行发牌和计算黑杰克值的操作,并判断胜负。

根据题目总要求,你还需要编写Player class来管理玩家对象的名字、手牌和黑杰克值等信息。

另外,你还需要创建一个Card class,它具有rank(牌面)和suit(花色)两个属性。可以为Card类添加一个名为bjValue的整型属性,用于计算卡牌的黑杰克值。你还需要根据Card类对之前的函数进行适当的修改,使其能够处理Card对象。

你还需要实现玩家可以选择是否继续要牌的功能。这意味着游戏将分为发牌和玩牌两个阶段。你需要在turn(deck)函数中实现这一部分的逻辑,直到玩家不再要牌或者手牌的黑杰克值超过21点为止。
最后,你需要在main函数中声明胜利者,即手牌总黑杰克值最高的玩家。

这是我浅浅写了一下的。但感觉有点问题


import random
class Player:
    def __init__(self,name,bjvalue):
        self.name=name
        self.bjvalue=bjvalue
    def __str__(self):
        return(self.name+" has the bjvalue: "+self.bjvalue)
    #def update_hand_value(self,newvalue):
        #self.bjvalu=self.bjvalu+newvalue
   

class Card:
    def __init__(self,r,s):
        self.rank=r
        self.suit=s
    def __str__(self):
        return(self.rank+self.suit)


def main():
    instructions()
    deck=makeADeckOf52()
    i=0
    while i<2:
        playername=input("Enter your name: ")
        total=dealAHand(deck,playername)
        i=i+1
        while total<21:
            option=input("Do you want another card?[y/n] ")
            if option=="n":
                print("Your turn is over.")
            else:
                anothercard=random.choice(deck)
                anothervalue=create_BJValue_LookUp(anothercard)
                total=total+anothervalue
        if total>21:
            print(playername+", you lose.")



def instructions():
    print("You two will play this Black Jack game in turn.")
    print("Each of you can get two cards randomly and you can choose request or hold a card.")
    print("The winner will be the person whose bjvalue is the closet to 21 and less than 21.")
def dealAHand(deck,playername):
    chance=0
    total=0
    hand=[]
    while chance<2:
        card=random.choice(deck)
        hand.append(card)
        value=create_BJValue_LookUp(card)
        total=total+value
        chance=chance+1
    display(hand)
    bjHandValue(playername,total)
    p=Player(playername,total)
    return total

def makeADeckOf52():
    #input: none
    #output: a list of 52 strings
    #process: pair the 4 suits with the 13 card rank values
   
    #modeling the 52 cards:
    #A-K of clubs,diamonds, hearts, spades
   
    cardSuits = ["&#9827;","&#9830;","&#9829;","&#9824;"]
    cardRanks = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    deck = []
   
    for s in cardSuits:
        for r in cardRanks:
            deck.append(Card(r,s))

    random.shuffle(deck)
    return(deck)

def create_BJValue_LookUp(cardStr):
    #assume card is in this format: A&#9827; , 10&#9829;
    #"&#9827;","&#9830;","&#9829;","&#9824;"

    rank = cardStr[:len(cardStr)-1]
    print(rank)
    specialValues = {"A":1, "J":10,"Q":10,"K":10}
    if rank in specialValues:
        bjValue = specialValues[rank]
    else:
        bjValue = int(rank)
    return(bjValue)

def display(l):
    print(l)
def bjHandValue(n,t):
    print(n+", your total BJvalue is "+t)

main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 03:25:43 | 显示全部楼层
pan11 发表于 2023-12-10 03:21
这是一个关于实现二人黑杰克/21点游戏的需求。根据要 ...

非常抱歉,我发现你的问题中包含了一些代码,但是由于编码的问题,代码无法完整显示。可以你把代码复制到文本编辑器中,然后将其作为纯文本粘贴在这里吗?这样我就可以更好地帮助你了解代码中的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 04:05:33 | 显示全部楼层
FishC 发表于 2023-12-10 03:25
非常抱歉,我发现你的问题中包含了一些代码,但是由于编码的问题,代码无法完整显示。可以你把代码复制到 ...

这是一个关于实现二人黑杰克/21点游戏的需求。根据要求,你需要编写一系列的函数,并在main()函数中调用这些函数。下面将逐个解释需要实现的函数及其功能。

a) instructions(): 这个函数应该简要介绍游戏规则和玩法。

b) makeADeckOf52()和shuffle: 这两个函数用于生成并洗牌一副有52个字符串元素的牌组。

c) update_hand_value(String c): 这个函数接受一个字符串参数,使用之前创建的字典来计算并更新玩家的手牌的黑杰克值。

d) dealAHand(deck): 这个函数从牌组中发出两张牌给玩家,并将这两张牌存入一个名为"hand"的列表。

e) displayHand(hand): 这个函数用于显示玩家的手牌。

f) bjHandValue(hand): 这个函数用于计算玩家手牌的总黑杰克值。

g) main(): 这个函数用于整个程序的流程控制,每轮玩家玩的时候需要初始化玩家的名字和黑杰克值,调用dealAHand()、displayHand()和bjHandValue()等函数来进行发牌和计算黑杰克值的操作,并判断胜负。

根据题目总要求,你还需要编写Player class来管理玩家对象的名字、手牌和黑杰克值等信息。

另外,你还需要创建一个Card class,它具有rank(牌面)和suit(花色)两个属性。可以为Card类添加一个名为bjValue的整型属性,用于计算卡牌的黑杰克值。你还需要根据Card类对之前的函数进行适当的修改,使其能够处理Card对象。

你还需要实现玩家可以选择是否继续要牌的功能。这意味着游戏将分为发牌和玩牌两个阶段。你需要在turn(deck)函数中实现这一部分的逻辑,直到玩家不再要牌或者手牌的黑杰克值超过21点为止。
最后,你需要在main函数中声明胜利者,即手牌总黑杰克值最高的玩家。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 04:06:42 | 显示全部楼层
FishC 发表于 2023-12-10 03:25
非常抱歉,我发现你的问题中包含了一些代码,但是由于编码的问题,代码无法完整显示。可以你把代码复制到 ...

import random
class Player:
    def __init__(self,name,bjvalue):
        self.name=name
        self.bjvalue=bjvalue
    def __str__(self):
        return(self.name+" has the bjvalue: "+self.bjvalue)
    #def update_hand_value(self,newvalue):
        #self.bjvalu=self.bjvalu+newvalue
   

class Card:
    def __init__(self,r,s):
        self.rank=r
        self.suit=s
    def __str__(self):
        return(self.rank+self.suit)


def main():
    instructions()
    deck=makeADeckOf52()
    i=0
    while i<2:
        playername=input("Enter your name: ")
        total=dealAHand(deck,playername)
        i=i+1
        while total<21:
            option=input("Do you want another card?[y/n] ")
            if option=="n":
                print("Your turn is over.")
            else:
                anothercard=random.choice(deck)
                anothervalue=create_BJValue_LookUp(anothercard)
                total=total+anothervalue
        if total>21:
            print(playername+", you lose.")



def instructions():
    print("You two will play this Black Jack game in turn.")
    print("Each of you can get two cards randomly and you can choose request or hold a card.")
    print("The winner will be the person whose bjvalue is the closet to 21 and less than 21.")
def dealAHand(deck,playername):
    chance=0
    total=0
    hand=[]
    while chance<2:
        card=random.choice(deck)
        hand.append(card)
        value=create_BJValue_LookUp(card)
        total=total+value
        chance=chance+1
    display(hand)
    bjHandValue(playername,total)
    p=Player(playername,total)
    return total

def makeADeckOf52():
    #input: none
    #output: a list of 52 strings
    #process: pair the 4 suits with the 13 card rank values
   
    #modeling the 52 cards:
    #A-K of clubs,diamonds, hearts, spades
   
    cardSuits = ["&#9827;","&#9830;","&#9829;","&#9824;"]
    cardRanks = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    deck = []
   
    for s in cardSuits:
        for r in cardRanks:
            deck.append(Card(r,s))

    random.shuffle(deck)
    return(deck)

def create_BJValue_LookUp(cardStr):
    #assume card is in this format: A&#9827; , 10&#9829;
    #"&#9827;","&#9830;","&#9829;","&#9824;"

    rank = cardStr[:len(cardStr)-1]
    print(rank)
    specialValues = {"A":1, "J":10,"Q":10,"K":10}
    if rank in specialValues:
        bjValue = specialValues[rank]
    else:
        bjValue = int(rank)
    return(bjValue)

def display(l):
    print(l)
def bjHandValue(n,t):
    print(n+", your total BJvalue is "+t)

main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 04:11:50 | 显示全部楼层
pan11 发表于 2023-12-10 04:06
import random
class Player:
    def __init__(sel ...

感谢你提供代码。有一些问题需要注意和修正:

1. 你在代码中引用了一个名为`instructions()`的函数,但是我们并没有在你提到的需求中看到关于这个函数的介绍。如果你还没有实现这个函数,请根据需求自行编写。

2. 在`Player`类的`__str__`方法中,你将`self.bjvalue`作为字符串进行拼接,但是`self.bjvalue`是一个整数类型的属性。你可以通过将`self.bjvalue`转换为字符串,然后再进行拼接。

3. 在`Card`类的`__str__`方法中,你将`self.rank`和`self.suit`作为字符串进行拼接,但是我们通常希望输出为类似"2 of Spades"这样的形式。你可以根据自己的需求修改这部分逻辑。

4. 在`main`函数中,你使用了`makeADeckOf52()`函数来生成一副牌组,但是我们并没有看到这个函数的实现。你可以根据需求自行编写这个函数,并确保它返回一个包含52个字符串元素的牌组。

另外,根据你的需求,你可能还需要编写以下函数来完成游戏的逻辑:
def shuffle(deck):    # 实现洗牌功能,打乱牌组顺序def update_hand_value(player, card):    # 使用之前创建的字典来计算并更新玩家的手牌的黑杰克值def dealAHand(deck):    # 从牌组中发出两张牌给玩家,并将这两张牌存入一个名为"hand"的列表def displayHand(hand):    # 显示玩家的手牌def bjHandValue(hand):    # 计算玩家手牌的总黑杰克值def turn(deck, player):    # 实现玩家的一轮操作,包括是否继续要牌的选择def declare_winner(players):    # 根据所有玩家的手牌总黑杰克值,声明胜利者
希望这些信息对你有帮助!如果你还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 04:25:41 | 显示全部楼层
FishC 发表于 2023-12-10 04:11
感谢你提供代码。有一些问题需要注意和修正:

1. 你在代码中引用了一个名为`instructions()`的函数,但 ...

你好,你可以根据我的要求写一个模版吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 04:26:43 | 显示全部楼层
pan11 发表于 2023-12-10 04:25
你好,你可以根据我的要求写一个模版吗

当然可以!下面是一个根据你的需求编写的模板代码:
import randomclass Player:    def __init__(self, name):        self.name = name        self.hand = []        self.bjvalue = 0            def __str__(self):        return f"{self.name} has the bjvalue: {self.bjvalue}"class Card:    def __init__(self, rank, suit):        self.rank = rank        self.suit = suit            def __str__(self):        return f"{self.rank} of {self.suit}"def instructions():    # 游戏规则和玩法的介绍    passdef makeADeckOf52():    # 生成并洗牌一副有52个字符串元素的牌组    passdef shuffle(deck):    # 洗牌功能,打乱牌组顺序    passdef update_hand_value(player, card):    # 计算并更新玩家的手牌的黑杰克值    passdef dealAHand(deck, player):    # 从牌组中发出两张牌给玩家,并将这两张牌存入玩家的手牌列表    passdef displayHand(player):    # 显示玩家的手牌    passdef bjHandValue(hand):    # 计算玩家手牌的总黑杰克值    passdef turn(deck, player):    # 玩家的一轮操作,包括是否要牌的选择    passdef declare_winner(players):    # 根据所有玩家的手牌总黑杰克值,声明胜利者    passdef main():    instructions()    deck = makeADeckOf52()    shuffle(deck)        # 初始化两个玩家    player1 = Player("Player 1")    player2 = Player("Player 2")        # 发牌    dealAHand(deck, player1)    dealAHand(deck, player2)        # 显示玩家的手牌    displayHand(player1)    displayHand(player2)        # 玩家进行操作,直到不再要牌或手牌总黑杰克值超过21点    turn(deck, player1)    turn(deck, player2)        # 声明胜利者    players = [player1, player2]    declare_winner(players)if __name__ == "__main__":    main()
请注意,这只是一个模板,具体的功能实现需要根据你的具体需求来编写。你需要自行实现每个函数的功能,比如洗牌、发牌、计算手牌黑杰克值等。希望这个模板能够帮助你开始实现你的二人21点游戏!如果你有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 05:05:52 | 显示全部楼层
FishC 发表于 2023-12-10 04:26
当然可以!下面是一个根据你的需求编写的模板代码:

你好,
# 初始化两个玩家
    player1 = Player("Player 1")
    player2 = Player("Player 2")
这是什么意思,为什么要把两个玩家放到了Player这个类里面?不应该问他们的名字吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 05:06:08 | 显示全部楼层
pan11 发表于 2023-12-10 05:05
你好,
# 初始化两个玩家
    player1 = Player("P ...

非常抱歉,看来我在代码中有些错误。确实,在初始化玩家时应该询问他们的名字,并将其传递给Player类的构造函数。修改后的代码如下:
# 初始化两个玩家name1 = input("请输入玩家1的姓名:")player1 = Player(name1)name2 = input("请输入玩家2的姓名:")player2 = Player(name2)
这样,玩家在游戏开始时会被要求输入自己的名字,然后分别作为参数传递给Player类的构造函数,以创建具有不同名字的两个玩家对象。

非常抱歉给你带来困惑,如果还有其他疑问,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 05:08:27 | 显示全部楼层
FishC 发表于 2023-12-10 05:06
非常抱歉,看来我在代码中有些错误。确实,在初始化玩家时应该询问他们的名字,并将其传递给Player类的构 ...

player1 = Player(name1)
那这里的player1是什么,返回的一个空列表吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 05:08:42 | 显示全部楼层
pan11 发表于 2023-12-10 05:08
player1 = Player(name1)
那这里的player1是什么,返 ...

不好意思,我之前的回答有误。player1不是一个空列表,而是一个Player类的对象。在Player类的构造函数中,我们通过传递name参数来初始化每个玩家的名字属性。这样,player1就成为了一个拥有指定名字的玩家对象。

Player类被设计为管理玩家对象的属性,例如玩家的名字、手牌和黑杰克值等信息。所以当我们创建玩家对象时,我们将玩家的名字作为参数传递给Player类的构造函数,并且在构造函数内部将其存储为一个实例属性。

希望这次能解答清楚你的问题。如果还有其他疑问,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 05:20:04 | 显示全部楼层
FishC 发表于 2023-12-10 05:08
不好意思,我之前的回答有误。player1不是一个空列表,而是一个Player类的对象。在Player类的构造函数中 ...

你好,我如何计算拿到的牌的数值?并且做到如果和加起来大于21,A取1,如果和加起来小于21,A取11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 05:20:25 | 显示全部楼层
pan11 发表于 2023-12-10 05:20
你好,我如何计算拿到的牌的数值?并且做到如果和加起 ...

你可以通过为每张牌添加一个黑杰克值属性来计算拿到的牌的数值。对于A牌,你可以设置其默认黑杰克值为11,并在需要的时候将其更改为1。以下是一个示例代码:
class Card:    def __init__(self, rank, suit):        self.rank = rank        self.suit = suit        if rank == 'A':            self.bjValue = 11        elif rank in ['J', 'Q', 'K']:            self.bjValue = 10        else:            self.bjValue = int(rank)    def __str__(self):        return self.rank + self.suitdef update_hand_value(hand):    total = sum(card.bjValue for card in hand)    aces = [card for card in hand if card.rank == 'A']    while total > 21 and aces:        aces.pop().bjValue = 1        total -= 10    return total
上述代码中,我们在Card类的构造函数中,根据不同的牌面设置不同的黑杰克值。在update_hand_value函数中,我们计算手牌的总黑杰克值,并遍历手牌中的A牌,如果手牌总值大于21,则将A牌的黑杰克值从11修改为1,同时减去相应的差值。这样就满足了当手牌总值大于21时将A牌视为1的情况。

希望能解答你的问题,如果还有其他疑问,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 05:28:30 | 显示全部楼层
FishC 发表于 2023-12-10 05:20
你可以通过为每张牌添加一个黑杰克值属性来计算拿到的牌的数值。对于A牌,你可以设置其默认黑杰克值为11 ...

def update_hand_value(hand):
    total = sum(card.bjValue for card in hand)
    aces = [card for card in hand if card.rank == 'A']
    while total > 21 and aces:
        aces.pop().bjValue = 1
        total -= 10
    return total
这里的input为什么是hand,不应该是player吗,然后在这个方程里用player.hand表示各自拿到的牌的list?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 05:28:43 | 显示全部楼层
pan11 发表于 2023-12-10 05:28
def update_hand_value(hand):
    total = sum(card ...

你是对的,输入参数应该是玩家对象而不是仅仅手牌列表。感谢指出这个错误!以下是修正后的代码:def update_hand_value(player):    total = sum(card.bjValue for card in player.hand)    aces = [card for card in player.hand if card.rank == 'A']    while total > 21 and aces:        aces.pop().bjValue = 1        total -= 10    return total在这个修正后的代码中,我们使用player.hand表示玩家手牌的列表,并将其中的A牌筛选出来放入名为aces的列表中。然后,在循环中,我们仍然通过修改A牌的黑杰克值来处理A牌的情况。请记得在其他相关函数中也要将参数更改为player。希望这次能够解答你的疑问,如果还有其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 05:31:25 | 显示全部楼层
FishC 发表于 2023-12-10 05:28
你是对的,输入参数应该是玩家对象而不是仅仅手牌列表。感谢指出这个错误!以下是修正后的代码:def upda ...

total = sum(card.bjValue for card in player.hand)    aces = [card for card in player.hand if card.rank == 'A']
请问这两个具体怎么实现?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-10 05:31:41 | 显示全部楼层
pan11 发表于 2023-12-10 05:31
total = sum(card.bjValue for card in player.hand)  ...

这两行代码是使用了列表推导式来计算总黑杰克值和筛选出A牌。

首先,total = sum(card.bjValue for card in player.hand) 这行代码使用了列表推导式,对玩家手牌中的每张牌(card)取出其bjValue属性,并计算所有bjValue的总和。这样我们就可以得到玩家手牌的总黑杰克值。

接着,aces = [card for card in player.hand if card.rank == "A"] 这行代码也是使用了列表推导式。它通过遍历玩家手牌中的每张牌(card),并检查其rank属性是否为"A"来筛选出所有的A牌。将这些A牌放入一个名为aces的新列表中。

综合起来,上述代码片段可以理解为:通过遍历玩家手牌,计算所有牌的黑杰克值之和,并将所有的A牌筛选出来放入aces列表中。

希望能够帮助你理解这部分代码,请随时提问如果还有疑问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表