Game Development 12 min read

Python Implementation of a Simplified ZhaJinHua Card Game with Scoring and Statistics

This article explains how to build a Python version of the popular Chinese card game ZhaJinHua, covering deck preparation, player enrollment, card dealing, hand‑type detection, scoring rules, winner determination, and statistical analysis of thousands of simulated rounds.

Python Programming Learning Circle
Python Programming Learning Circle
Python Programming Learning Circle
Python Implementation of a Simplified ZhaJinHua Card Game with Scoring and Statistics

The article introduces the classic Chinese card game ZhaJinHua (also known as "Three‑Card Poker") and demonstrates how to implement a simplified version using Python.

Game Rules : A standard 52‑card deck (without jokers) is used; each player receives three cards. Hand types are ranked from highest to lowest as follows: Straight Flush, Three of a Kind ("豹子"), Straight, Flush, Pair, and High Card. The article notes that the implemented rules differ slightly from the traditional game.

1. Deck Preparation

<code>suit = ["黑桃", "红心", "方块", "梅花"]
num = [str(i) for i in range(2, 11)] + ["J", "Q", "K", "A"]
score_map = {}
for s in suit:
    count = 2
    for n in num:
        score_map[f"{s}{n}"] = count
        count += 1
</code>

2. Player Enrollment

<code>players = [f"p{i}" for i in range(1, 6)]
</code>

3. Dealing Cards

<code>def get_pk_lst(pls, pks):
    result = []
    for p in pls:
        pk = sample(pks, 3)
        for _pk in pk:
            pks.remove(_pk)
        result.append({"name": p, "poker": pk})
    return result

pokers = list(score_map.keys())
poker_grp = get_pk_lst(players, pokers)
</code>

4. Hand Evaluation and Scoring

<code>def calculate(_score_map, pk_lst):
    n_lst = list(map(lambda x: _score_map[x], pk_lst))
    same_suit = len(set([pk[:2] for pk in pk_lst])) == 1
    continuity = sorted(n_lst) == [i for i in range(min(n_lst), max(n_lst)+1)] or set(n_lst) == {14, 2, 3}
    check = len(set(n_lst))
    if not same_suit and not continuity and check == 3:
        return sum(n_lst), "单张"
    if not same_suit and check == 2:
        w = [i for i in n_lst if n_lst.count(i) == 2][0]
        single = [i for i in n_lst if i != w][0]
        return w*2*2 + single, "对子"
    if same_suit and not continuity:
        return sum(n_lst)*9, "金花"
    if continuity and not same_suit:
        return sum(n_lst)*81, "顺子"
    if check == 1:
        return sum(n_lst)*666, "豹子"
    if continuity and same_suit:
        return sum(n_lst)*999, "同花顺"
</code>

5. Determining the Winner

<code>def compare(_score_map, pk_grp):
    for p in pk_grp:
        p["score"], p["type"] = calculate(_score_map, p["poker"])
    print("开牌结果------")
    for p in pk_grp:
        print(p)
    print("赢家是------")
    best = max(pk_grp, key=lambda x: x["score"])["name"]
    print(best)
    return pk_grp
</code>

6. Running a Single Game

<code>def show(_score_map, _players):
    pokers = list(_score_map.keys())
    poker_grp = get_pk_lst(_players, pokers)
    return compare(_score_map, poker_grp)
</code>

7. Batch Simulation and Statistics

<code>def start_game(_score_map, _players, freq=1):
    type_lst = []
    for _ in range(freq):
        grp = show(_score_map, _players)
        type_lst += [t["type"] for t in grp]
    c = Counter(type_lst)
    total = sum(c.values())
    for item, cnt in c.items():
        print(f"{item}频率:{cnt/total:.2%}")
</code>

8. Main Execution

<code>if __name__ == "__main__":
    # deck preparation (as above)
    players = [f"p{i}" for i in range(1, 6)]
    start_game(score_map, players, freq=100000)
</code>

The script runs 100,000 simulated games, prints the frequency of each hand type, and demonstrates that the empirical probabilities closely match theoretical values (e.g., high‑card ~74.37%, pair ~16.95%, flush ~4.97%, straight ~3.25%, three‑of‑a‑kind ~0.24%, straight‑flush ~0.22%).

simulationpythonstatisticsGame developmentScoringcard-game
Python Programming Learning Circle
Written by

Python Programming Learning Circle

A global community of Chinese Python developers offering technical articles, columns, original video tutorials, and problem sets. Topics include web full‑stack development, web scraping, data analysis, natural language processing, image processing, machine learning, automated testing, DevOps automation, and big data.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.