首页 > 编程语言 >Python分享

Python分享

时间:2023-09-24 21:01:39浏览次数:31  
标签:last Python selected current player cards 分享 card

Python斗地主不完全代码

import random

# 定义扑克牌的花色和大小
suits = ["♠", "♥", "♦", "♣"]
ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

# 创建扑克牌
deck = [(rank, suit) for suit in suits for rank in ranks]

# 洗牌
random.shuffle(deck)

# 发牌
player_1 = sorted(deck[:17], key=lambda x: (ranks.index(x[0]), suits.index(x[1])))
player_2 = sorted(deck[17:34], key=lambda x: (ranks.index(x[0]), suits.index(x[1])))
player_3 = sorted(deck[34:51], key=lambda x: (ranks.index(x[0]), suits.index(x[1])))
landlord_cards = sorted(deck[51:], key=lambda x: (ranks.index(x[0]), suits.index(x[1])))

# 地主标识
landlord = None

# 定义牌型
SINGLE = 1
PAIR = 2
TRIPLE = 3
BOMB = 4

# 检查牌型
def check_card_type(cards):
    num_cards = len(cards)
    if num_cards == 1:
        return SINGLE
    elif num_cards == 2 and cards[0][0] == cards[1][0]:
        return PAIR
    elif num_cards == 3 and cards[0][0] == cards[1][0] == cards[2][0]:
        return TRIPLE
    elif num_cards == 4 and cards[0][0] == cards[1][0] == cards[2][0] == cards[3][0]:
        return BOMB
    else:
        return None

# 主游戏逻辑
def play_game():
    players = [player_1, player_2, player_3]
    current_player = random.choice([0, 1, 2])
    pass_count = 0
    last_cards = []
    
    while True:
        player_cards = players[current_player]
        print("玩家", current_player + 1, "的牌:", player_cards)
        
        if current_player == landlord:
            print("地主的牌:", landlord_cards)
        
        if last_cards:
            print("上家出的牌:", last_cards)
        
        if pass_count == 2:
            last_cards = []
        
        if player_cards == [] or (last_cards and current_player == landlord and landlord_cards == []):
            if current_player == landlord:
                print("地主胜利!")
            else:
                print("农民胜利!")
            break
        
        option = input("请选择要出的牌,或输入'pass'跳过:")
        
        if option == "pass":
            pass_count += 1
            current_player = (current_player + 1) % 3
            continue
        
        selected_cards = []
        for card_str in option.split():
            rank, suit = card_str[:-1], card_str[-1]
            for card in player_cards:
                if card[0] == rank and card[1] == suit:
                    selected_cards.append(card)
                    break
        
        if set(selected_cards).issubset(set(player_cards)):
            selected_cards_type = check_card_type(selected_cards)
            last_cards_type = check_card_type(last_cards)
            
            if not last_cards or (selected_cards_type and selected_cards_type == last_cards_type and len(selected_cards) == len(last_cards)):
                player_cards = [card for card in player_cards if card not in selected_cards]
                players[current_player] = player_cards
                last_cards = selected_cards
                pass_count = 0
                current_player = (current_player + 1) % 3
            else:
                print("出牌不符合规则!")
        else:
            print("选择的牌不存在或不在手牌中!")

# 随机确定地主
landlord = random.randint(0, 2)

# 开始游戏
play_game()

标签:last,Python,selected,current,player,cards,分享,card
From: https://blog.51cto.com/u_16251486/7588540

相关文章

  • python列表
    追加appemd("")插入insert(位置,"")合并extend("")嵌套names.insert(2,[1,2,3])names[2][1]2删除del()pop() 默认删除最后一个,并返回删除值,可以指定,但是要输入索引remove("")  指定元素名,其中有重复会从左边开始删第一个clear()  清空修改names[0]="你好"......
  • 21python实现简单的消息队列
      frommultiprocessingimportQueue'''q=Queue(num)若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接收的消息数量没有上限(直到内存的尽头)。函数也是队列的初始化。Queue.qsize()返回当前队列包含的消息数量。Queue.empty()如果队列为空,返回T......
  • webstorm插件分享
    插件修改选中区域背景......
  • 用Python实现的本地美食和餐饮业SEO策略
     当谈到本地美食和餐饮业的SEO(搜索引擎优化)策略时,Python是一种强大的编程语言,可以帮助我们自动化和优化各种任务。在这篇文章中,我将介绍一些使用Python实现的本地美食和餐饮业SEO策略的方法。 1.网站优化(WebsiteOptimization): -使用Python的网页解析库(如BeautifulSoup)来......
  • Python-day17
    1、查看保留字importkeywordprint(keyword.kwlist)2、小数相加fromdecimalimportDecimalprint(Decimal('1.1')+Decimal('1.1'))3、数据类型转换name='cecilia'age=1print('我叫{},今年{}岁'.format(name,age))print(f'我叫{name},今年{age}岁'......
  • Python教程(14)——Python函数的入门学习
    函数是什么?在编程中,函数是一段可重用的代码块,用于完成特定任务或执行特定操作。它可以接输入参数并返回一个值或执行一系列操作。函数可以帮助程序员将代码模块化,提高代码的可读性和可维护性。函数通常包括以下组成部分:函数名:用于标识函数,并可以通过函数名调用执行该函数。参......
  • python列表入门学习
    Python是一个非常强大且易于学习的编程语言,而列表(list)是Python中最常用的数据结构之一。无论你是初学者还是经验丰富的开发者,理解和掌握Python列表的使用都是非常重要的。1.什么是列表?列表是一个有序的元素集合,可以容纳多个值,这些值可以是任何数据类型。#定义一个空列表empt......
  • python基础 while,for循环
    whlie循环格式while结束条件:执行语句break结束if条件:break小游戏案例猜拳小游戏importrandomren=0ji=0print('-'*12+'欢迎玩猜拳小游戏'+'-'*12)print('本游戏实行三拳两胜制')n=0whilen<3:ran=random.randint(0,2)guess......
  • Python处理CSV文件
    python处理CSV文件CSV文件CSV(comma-separatedvalues)文件是一种文本文件格式,允许以表格结构保存数据。这是一种流行的格式,用于从数据库和电子表格导出和导入数据,CSV文件中的每条数据都用逗号(,)分隔,例如,第一行数据可以选择用作标题,标明其下方的每一列数据:处理CSV文件CSV......
  • ClickHouse数据表合并与性能优化方法探讨与案例研究分享
    前言ClickHouse是一款高性能的列式数据库,其在海量数据处理方面具有很强的优势。但是,在实际应用中,我们经常需要对多个数据表进行合并,以便更好地进行数据分析和挖掘。本文将探讨ClickHouse的数据表合并与性能优化方法,并结合实际案例进行分享。数据表合并在ClickHouse中,数据表合并......