banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

来て、诈金花を遊びませんか?Pythonで実装されたものです。

無聊用 bolt.new 搞個詐金花的代碼來玩玩,AI 寫的代碼。經常讀 AI 的代碼,進步神速

寫一個程序,實現發牌、比大小判斷輸贏。

ゲームルール:#

一副トランプ、大小王を除外し、各プレイヤーに 3 枚のカードを配り、最後に大きさを比べて誰が勝つかを決める。

以下のようなカードがあります:

豹子:3 枚同じカード、例えば 3 枚の 6.

順金:同花順とも呼ばれ、3 枚同じスートのストレート、例えばハートの 5、6、7

順子:トラクターとも呼ばれ、スートが異なるがストレート、例えばハートの 5、ダイヤの 6、スペードの 7 で構成されるストレート

対子:2 枚同じカード

単張:単張の中で最大は A

これらのカードの大きさの順序は、豹子 > 順金 > 順子 > 対子 > 単張

プログラムで実現するポイント:#

  1. まず完全なトランプを生成する

  2. 5 人のプレイヤーにランダムにカードを配る

  3. 一斉にカードを開き、大きさを比べて勝者を出力する

import random

# 定義牌のスートと点数
suits = ['♥', '♦', '♣', '♠']
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']

# 完全なトランプを生成
deck = [(suit, rank) for suit in suits for rank in ranks]

# シャッフル
random.shuffle(deck)

# 5人のプレイヤーにカードを配る、各人3枚のカード
players = []
for i in range(5):
    hand = deck[:3]
    players.append(hand)
    deck = deck[3:]

# カードの大きさの順序を定義
def rank_value(rank):
    if rank == 'A':
        return 14
    elif rank == 'K':
        return 13
    elif rank == 'Q':
        return 12
    elif rank == 'J':
        return 11
    else:
        return int(rank)

def is_straight(hand):
    values = sorted([rank_value(rank) for suit, rank in hand])
    return values[0] + 1 == values[1] and values[1] + 1 == values[2]

def is_flush(hand):
    suits = [suit for suit, rank in hand]
    return len(set(suits)) == 1

def is_three_of_a_kind(hand):
    values = [rank_value(rank) for suit, rank in hand]
    return values[0] == values[1] == values[2]

def is_pair(hand):
    values = [rank_value(rank) for suit, rank in hand]
    return values[0] == values[1] or values[1] == values[2] or values[0] == values[2]

def hand_rank(hand):
    if is_three_of_a_kind(hand):
        return (5, max([rank_value(rank) for suit, rank in hand]))
    elif is_straight(hand) and is_flush(hand):
        return (4, max([rank_value(rank) for suit, rank in hand]))
    elif is_straight(hand):
        return (3, max([rank_value(rank) for suit, rank in hand]))
    elif is_pair(hand):
        return (2, max([rank_value(rank) for suit, rank in hand]))
    else:
        return (1, max([rank_value(rank) for suit, rank in hand]))

# カードの大きさを比較
def compare_hands(hand1, hand2):
    rank1 = hand_rank(hand1)
    rank2 = hand_rank(hand2)
    if rank1 > rank2:
        return 1
    elif rank1 < rank2:
        return -1
    else:
        return 0

# 各プレイヤーのカードとカードのランクを出力
for i, hand in enumerate(players):
    print(f"Player {i + 1}: {hand}, Hand Rank: {hand_rank(hand)}")

# 全てのプレイヤーのカードを比較し、勝者を見つける
winner = players[0]
for hand in players[1:]:
    if compare_hands(hand, winner) > 0:
        winner = hand

# 勝者を出力
winner_index = players.index(winner)
print(f"Winner is Player {winner_index + 1} with hand {winner}")
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。