Python:列表有趣挑战--斗地主扑克牌发牌

目录

游戏描述:

题目分析与关键点:

代码参考:


游戏描述:

本题限定用以下方法打乱序列中的元素
random.shuffle()

几个人用一副扑克牌玩游戏,游戏过程通常有洗牌、发牌、理牌等动作,编写程序模拟游戏过程。

新牌花色顺序为"♠"、"♥"、"♣"、"♦"

花色相同时按2、3、4、5、6、7、8、9、10、J、Q、K、A,最后是小王和大王排序。小王用jokers、大王用JOKERS表示。

按以下要求编写程序:

1.按顺序输出新牌
2.按洗好的顺序输出洗过的牌
3.将牌轮流分给参与游戏的人,按分牌的顺序输出每个人手上的牌
4.对每个人手上的牌升序排序并输出
5.输出时,每张牌间用空格分隔

样例输入:

3

1024

样例输出:
参与游戏的人数:3
新牌顺序
♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K ♠A ♥2 ♥3 ♥4 ♥5 ♥6 ♥7 ♥8 ♥9 ♥10 ♥J ♥Q ♥K ♥A ♣2 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K ♣A ♦2 ♦3 ♦4 ♦5 ♦6 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q ♦K ♦A jokers JOKERS
洗牌顺序
♦6 ♥2 ♣A ♥3 ♦3 ♦J ♥5 ♥10 ♠9 ♥4 ♥8 ♥A ♣10 ♣K ♥6 ♠A ♥7 ♠6 ♣7 ♣Q ♣J ♠2 ♠Q ♦8 ♠K ♠5 ♣5 ♦2 ♦Q ♠4 jokers ♠7 ♥J ♦9 JOKERS ♣3 ♠J ♣2 ♦4 ♦5 ♠10 ♦10 ♦K ♦7 ♥Q ♣8 ♣4 ♠8 ♣9 ♥9 ♥K ♣6 ♠3 ♦A 
每个人手上分到的牌
♦6 ♥3 ♥5 ♥4 ♣10 ♠A ♣7 ♠2 ♠K ♦2 jokers ♦9 ♠J ♦5 ♦K ♣8 ♣9 ♣6 
♥2 ♦3 ♥10 ♥8 ♣K ♥7 ♣Q ♠Q ♠5 ♦Q ♠7 JOKERS ♣2 ♠10 ♦7 ♣4 ♥9 ♠3 
♣A ♦J ♠9 ♥A ♥6 ♠6 ♣J ♦8 ♣5 ♠4 ♥J ♣3 ♦4 ♦10 ♥Q ♠8 ♥K ♦A 
每个人手上排序的牌
♠2 ♠J ♠K ♠A ♥3 ♥4 ♥5 ♣6 ♣7 ♣8 ♣9 ♣10 ♦2 ♦5 ♦6 ♦9 ♦K jokers 
♠3 ♠5 ♠7 ♠10 ♠Q ♥2 ♥7 ♥8 ♥9 ♥10 ♣2 ♣4 ♣Q ♣K ♦3 ♦7 ♦Q JOKERS 
♠4 ♠6 ♠8 ♠9 ♥6 ♥J ♥Q ♥K ♥A ♣3 ♣5 ♣J ♣A ♦4 ♦8 ♦10 ♦J ♦A 

题目分析与关键点:

1.若要设置同一个随机打乱情况,需要随机数种子;
2.可建立列表存储花色,将不同花色分开存储,再合并为“牌";
3.如果想不换行输出,在print指令的括号结尾加上:,end=''
4.由于列表中各数据的含义不同,所以无法正常排序,必须有参照条件;
5.一般的列表复制通常会随原表变化而变化,所以可用此语句新建列表内容:lis=list(list4)

更高级的组牌的方法可以采用列表推导式;发牌方法可采用切片。

代码参考:

新建文件保存以下代码,点击Run,便可运行

import random
h=int(input())
n=int(input())
random.seed(n)
list1 = ["2","3","4","5","6","7","8","9","10","J","Q","K","A"]
list2 = ["♠","♥","♣","♦"]
list3 = ["jokers","JOKERS"]
list4 = []
print("参与游戏的人数:",h,sep="")
print("新牌顺序")
for j in range(4):
    for i in range(13):
        list4.append(list2[j]+list1[i])
for x in range(52):
    print(list4[x],'',end='')
print(list3[0],list3[1])
print("洗牌顺序")
list4.append(list3[0])
list4.append(list3[1])
lis=list(list4)
random.shuffle(list4)
for y in range(54):
    print(list4[y],'',end='')
print()
print("每个人手上分到的牌")
if h == 3:
    list5 = []
    list6 = []
    list7 = []
    for z in range(18):
        list5.append(list4[3*z])
        list6.append(list4[3*z+1])
        list7.append(list4[3*z+2])
    for x in range(18):
        print(list5[x],'',end='')
    print()
    for x in range(18):
        print(list6[x],'',end='')
    print()
    for x in range(18):
        print(list7[x],'',end='')
    print()
 
elif h == 4:
    list5 = []
    list6 = []
    list7 = []
    list8 = []
    for z in range(13):
            list5.append(list4[4*z])
            list6.append(list4[4*z+1])
            list7.append(list4[4*z+2])
            list8.append(list4[4*z+3])
    list5.append(list4[52])
    list6.append(list4[53])
    for x in range(14):
      print(list5[x],'',end='')
    print()
    for x in range(14):
      print(list6[x],'',end='')
    print()
    for x in range(13):
      print(list7[x],'',end='')
    print()
    for x in range(13):
      print(list8[x],'',end='')
    print()
    list8 = [item for item in lis if item in list8]
 
elif h == 5:
    list5 = []
    list6 = []
    list7 = []
    list8 = []
    list9 = []
    for z in range(10):
            list5.append(list4[5*z])
            list6.append(list4[5*z+1])
            list7.append(list4[5*z+2])
            list8.append(list4[5*z+3])
            list9.append(list4[5*z+4])
    list5.append(list4[50])
    list6.append(list4[51])
    list7.append(list4[52])
    list8.append(list4[53])
    for x in range(11):
      print(list5[x],'',end='')
    print()
    for x in range(11):
      print(list6[x],'',end='')
    print()
    for x in range(11):
      print(list7[x],'',end='')
    print()
    for x in range(11):
      print(list8[x],'',end='')
    print()
    for x in range(10):
      print(list9[x],'',end='')
    print()
    list8 = [item for item in lis if item in list8]
    list9 = [item for item in lis if item in list9]
 
 
elif h == 6:
    list5 = []
    list6 = []
    list7 = []
    list8 = []
    list9 = []
    list10 = []
    for z in range(9):
        list5.append(list4[6*z])
        list6.append(list4[6*z+1])
        list7.append(list4[6*z+2])
        list8.append(list4[6*z+3])
        list9.append(list4[6*z+4])
        list10.append(list4[6*z+5])
    for x in range(9):
        print(list5[x],'',end='')
    print()
    for x in range(9):
        print(list6[x],'',end='')
    print()
    for x in range(9):
        print(list7[x],'',end='')
    print()
    for x in range(9):
        print(list8[x],'',end='')
    print()
    for x in range(9):
        print(list9[x],'',end='')
    print()
    for x in range(9):
        print(list10[x],'',end='')
    print()
    list8 = [item for item in lis if item in list8]
    list9 = [item for item in lis if item in list9]
    list10 = [item for item in lis if item in list10]
 
print("每个人手上排序的牌")
list5 = [item for item in lis if item in list5]
list6 = [item for item in lis if item in list6]
list7 = [item for item in lis if item in list7]
if h == 3:
    for x in range(18):
        print(list5[x],'',end='')
    print()
    for x in range(18):
        print(list6[x],'',end='')
    print()
    for x in range(18):
        print(list7[x],'',end='')
    print()

elif h == 4:
    for x in range(14):
        print(list5[x],'',end='')
    print()
    for x in range(14):
        print(list6[x],'',end='')
    print()
    for x in range(13):
        print(list7[x],'',end='')
    print()
    for x in range(13):
        print(list8[x],'',end='')
    print()

elif h == 5:
    for x in range(11):
        print(list5[x],'',end='')
    print()
    for x in range(11):
        print(list6[x],'',end='')
    print()
    for x in range(11):
        print(list7[x],'',end='')
    print()
    for x in range(11):
        print(list8[x],'',end='')
    print()
    for x in range(10):
        print(list9[x],'',end='')
    print()

elif h == 6:
    for x in range(9):
        print(list5[x],'',end='')
    print()
    for x in range(9):
        print(list6[x],'',end='')
    print()
    for x in range(9):
        print(list7[x],'',end='')
    print()
    for x in range(9):
        print(list8[x],'',end='')
    print()
    for x in range(9):
        print(list9[x],'',end='')
    print()
    for x in range(9):
        print(list10[x],'',end='')
    print()

4 个甲乙丙丁在一起玩一副扑克纸,每张纸按照数字计分,不同花色的相同数字的纸分值一样。 其中 1-10 各种花色的纸分别为 1-10,J、Q、K 分别被记为 11,12,13,大王和小王分别记为 20。四种花 色(方片,梅花、红桃、黑桃)分别被记为 A、B、C、D。如红桃 K 表示为 13C,分值为 13;方片 5 表示 为 5A,分值为 5。大王表示为 20K,分值为 20,小王表示为 20Q,分值为 20,54 张纸叠在一起倒扣在 桌子上。 游戏过程如下: 1. 洗牌:54 张纸随机顺序组合。 2. 4 排序:随机产生 4 的拿顺序,出顺序与拿顺序相同。第一个,即第一个。 3. 4 排序后,两两组队,按照顺序第 1 和第 3 组成 1 队,第 2 和第 4 组成 1 对。 4. 分:按拿顺序每轮流拿,每拿 13 张纸,最后两张纸留在桌面。 5. 信息:每个不知道其他,也不知道留在桌面上的,可以获得的信息包括自己持有的和 4 个出过的。队内的成员可以在每一轮沟通出的策略。 6. 出:从第一个拿开始出(可以选择最大获胜机会的策略),每一轮 4 ,然后比大 小,拥有最大的获取当前轮次的 4 张。出过的后面不可以再出。大小判定规则,纸分值 (大) > 纸分值(小),相同纸分值,按照黑桃>红桃>梅花>方片的顺序判定大小。 7.判定胜负:每个手中的的分值总和为每个的得分,每队的得分为两个得分的和,得分最大的 队伍者获胜,如果两队得分相同,则平局。请用C#语言编写代码
07-17
以下是使用 C# 编写的代码示例,实现了游戏过程和胜负判定: ```csharp using System; using System.Collections; class Program { static void Main(string[] args) { // 初始化一副扑克牌 List<string> pokerCards = GeneratePokerCards(); // 洗牌 ShuffleCards(pokerCards); // 随机产生4个的拿顺序 List<string> playerOrder = GeneratePlayerOrder(); // 分,每拿13张,最后两张留在桌面 List<List<string>> playerCards = DealCards(pokerCards, playerOrder); // 出 List<List<string>> playedCards = PlayCards(playerCards, playerOrder); // 判定胜负 int[] scores = CalculateScores(playedCards); string winner = DetermineWinner(scores); Console.WriteLine("胜利者是:" + winner); } // 生成一副扑克牌 static List<string> GeneratePokerCards() { List<string> cards = new List<string>(); // 添加数字 for (int i = 1; i <= 10; i++) { cards.Add(i + "A"); cards.Add(i + "B"); cards.Add(i + "C"); cards.Add(i + "D"); } // 添加J、Q、K cards.Add("11A"); cards.Add("11B"); cards.Add("11C"); cards.Add("11D"); cards.Add("12A"); cards.Add("12B"); cards.Add("12C"); cards.Add("12D"); cards.Add("13A"); cards.Add("13B"); cards.Add("13C"); cards.Add("13D"); // 添加大王和小王 cards.Add("20K"); cards.Add("20Q"); return cards; } // 洗牌 static void ShuffleCards(List<string> cards) { Random random = new Random(); for (int i = cards.Count - 1; i > 0; i--) { int j = random.Next(i + 1); string temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } } // 随机产生4个的拿顺序 static List<string> GeneratePlayerOrder() { List<string> players = new List<string>() { "甲", "乙", "丙", "丁" }; List<string> order = new List<string>(); Random random = new Random(); while (players.Count > 0) { int index = random.Next(players.Count); order.Add(players[index]); players.RemoveAt(index); } return order; } // 分 static List<List<string>> DealCards(List<string> cards, List<string> playerOrder) { int numPlayers = playerOrder.Count; List<List<string>> playerCards = new List<List<string>>(); for (int i = 0; i < numPlayers; i++) { List<string> hand = new List<string>(); for (int j = 0; j < 13; j++) { hand.Add(cards[j * numPlayers + i]); } playerCards.Add(hand); } return playerCards; } // 出 static List<List<string>> PlayCards(List<List<string>> playerCards, List<string> playerOrder) { int numPlayers = playerOrder.Count; List<List<string>> playedCards = new List<List<string>>(); for (int i = 0; i < numPlayers; i++) { List<string> hand = playerCards[i]; // TODO: 根据当前手和已出的,选择最优出策略 // 示例中使用随机策略,随机选择一张出 Random random = new Random(); int index = random.Next(hand.Count); string card = hand[index]; hand.RemoveAt(index); // 添加到已出的中 playedCards.Add(new List<string>() { playerOrder[i], card }); } return playedCards; } // 计算得分 static int[] CalculateScores(List<List<string>> playedCards) { int[] scores = new int[4]; foreach (List<string> round in playedCards) { string card = round[1]; int score = GetCardValue(card); // 根据出更新得分 switch (round[0]) { case "甲": scores[0] += score; break; case "乙": scores[1] += score; break; case "丙": scores[2] += score; break; case "丁": scores[3] += score; break; } } return scores; } // 判定胜负 static string DetermineWinner(int[] scores) { int team1Score = scores[0] + scores[2]; int team2Score = scores[1] + scores[3]; if (team1Score > team2Score) { return "甲乙队"; } else if (team1Score < team2Score) { return "丙丁队"; } else { return "平局"; } } // 获取的分值 static int GetCardValue(string card) { string valueStr = card.Substring(0, card.Length - 1); string suit = card.Substring(card.Length - 1); int value; if (int.TryParse(valueStr, out value)) { return value; } else if (valueStr == "J") { return 11; } else if (valueStr == "Q") { return 12; } else if (valueStr == "K") { return 13; } else if (valueStr == "20" && suit == "K") { return 20; } else if (valueStr == "20" && suit == "Q") { return 20; } return 0; } } ``` 请注意,上述代码只是一个示例,其中出策略的部分需要根据实际需求进行修改和完善。希望能对你有所帮助!如果你还有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值