吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4387|回复: 29
收起左侧

[Python 转载] 仿『斗牛』休闲游戏编写的python代码版斗牛

[复制链接]
yanshiqi 发表于 2022-1-29 16:06
如题,就是根据斗牛游戏规则编写的代码, 可以手动设置玩家个数(最大不超过7个).
代码一运行即可知道玩家的牌,且自动计算是否有牛。
庄家的牌需按下回车,(增加趣味性... )  

自主编写的,如果有大神能指点下,有更好的代码的逻辑,盼回复~~



代码如下 :

[Python] 纯文本查看 复制代码
import random
puke = [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", 2, "小王", "大王"]


def niuniu():
    x = []
    first = random.choice(puke)
    x.append(first)
    puke.pop(puke.index(first))
    second = random.choice(puke)
    x.append(second)
    puke.pop(puke.index(second))
    thrid = random.choice(puke)
    x.append(thrid)
    puke.pop(puke.index(thrid))
    fourth = random.choice(puke)
    x.append(fourth)
    puke.pop(puke.index(fourth))
    fifth = random.choice(puke)
    x.append(fifth)
    puke.pop(puke.index(fifth))
    return x


def conversion(xlist):
    '''
    将花牌和大小王转换成数字10
    '''
    l = []
    for i in xlist:
        if i in ["J", "Q", "K", "小王", "大王"]:
            l.append(10)
        elif i == "A":
            l.append(1)
        else:
            l.append(i)
    return l


def compute(xlist):
    if (xlist[0]+xlist[1]+xlist[2])%10 == 0 or (xlist[0]+xlist[1]+xlist[3])%10 == 0 or (xlist[0]+xlist[1]+xlist[4])%10 == 0 or (xlist[0]+xlist[2]+xlist[3])%10 == 0 or (xlist[0]+xlist[2]+xlist[4])%10 == 0 or (xlist[0]+xlist[3]+xlist[4])%10 == 0 or (xlist[1]+xlist[2]+xlist[3])%10 == 0 or (xlist[1]+xlist[2]+xlist[4])%10 == 0 or (xlist[1]+xlist[3]+xlist[4])%10 == 0 or (xlist[2]+xlist[3]+xlist[4])%10 == 0 :
        total = xlist[0]+xlist[1]+xlist[2]+xlist[3]+xlist[4]
        result = int(str(total)[-1])
        if result == 0:
            return 0 # 牛牛
        else:
            return result
    return -1   # 无牛


def format_print(x):
    if len(str(x)) > 1:
        return str(x)
    return " " + str(x)


def players(x):
    di = {1 : "一", 2 : "二", 3 : "三", 4 : "四", 5 : "五", 6 : "六", 7 : "七"}
    for i in range(x):
        player_puke = niuniu()
        player = conversion(player_puke)
        player_puke = f"{format_print(player_puke[0])}  {format_print(player_puke[1])}  {format_print(player_puke[2])}  {format_print(player_puke[3])}  {format_print(player_puke[4])}"
        if compute(player) != -1:
            if compute(player) != 0:
                print(f"玩家{di[i+1]}: {player_puke}  --  恭喜  牛{compute(player)}")
            else:
                print(f"玩家{di[i+1]}: {player_puke}  --  恭喜 『牛牛』")
        else:
            print(f"玩家{di[i+1]}: {player_puke}  --  哈哈~ 无牛")


def zhuang():
    zhuang_puke = niuniu()
    player = conversion(zhuang_puke)
    zhuang_puke = f"{format_print(zhuang_puke[0])}  {format_print(zhuang_puke[1])}  {format_print(zhuang_puke[2])}  {format_print(zhuang_puke[3])}  {format_print(zhuang_puke[4])}"
    if compute(player) != -1:
        if compute(player) != 0:
            print(f"庄 家: {zhuang_puke}  --  恭喜  牛{compute(player)}")
        else:
            print(f"庄 家: {zhuang_puke}  --  恭喜 『牛牛』")
    else:
        print(f"庄 家: {zhuang_puke}  --  哈哈~ 无牛")


if __name__ == '__main__':
    players(3)
    input("按下回车键开庄...")
    zhuang()



运行效果图:

捕获2.PNG



手机端  : 使用 QPython

QQ图片20220129155136.jpg

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
liuxiaoxin + 1 + 1 楼主,还得让你加个循环,也好学学牛牛

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yanshiqi 发表于 2022-1-29 20:22
yanshiqi 发表于 2022-1-29 20:10
用while, 需要把 puke这个列表,放在while里面第一行。  报错的原因是, 几次循环后, 54张牌用完了,就 ...

[Python] 纯文本查看 复制代码
if __name__ == '__main__':
    while True:
        puke = [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", 2, "小王", "大王"]
        players(3)
        input("按下回车键开庄...")
        zhuang()
        print("-"*46)
        inp = input("请问是否继续游戏? (y/n) ")
        if inp == "n" or inp == "N":
            break
        elif inp == "y" or inp == "Y":
            pass
        else:
            print("输入有误,请重新开始游戏")
            break
        print("\n\n")


将原代码 第二行删掉, 将 if __name__ == '__main__': 以下代码 改成上面的代码,即可无限循环
liuxiaoxin 发表于 2022-1-29 21:06
本帖最后由 liuxiaoxin 于 2022-1-29 21:10 编辑

yanshiqi 发表于 2022-1-29 20:22
[mw_shl_code=python,true]if __name__ == '__main__':
    while True:
        puke = [3, 4, 5, 6,  ...

if __name__ == '__main__':
    while True:
        puke = [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", 2, "小王", "大王"]
        players(3)
        input("按下回车键开庄...")
        zhuang()
        print("")
我直接这样整了 按回车一直继续
w92vv 发表于 2022-1-29 16:08
表情帝 发表于 2022-1-29 16:17
我也好奇啥是斗牛
 楼主| yanshiqi 发表于 2022-1-29 16:18
w92vv 发表于 2022-1-29 16:08
其实我就好奇什么是斗牛

大小王、花牌算10, A算 1.   各得五张牌, 其中任三张相加,得10或10的倍数即为有牛(凑不出即无牛),再看个位数 1-9,即牛1-9, 若个位0,就是牛牛
hutopower 发表于 2022-1-29 16:27
不错不错感谢分享
17798 发表于 2022-1-29 16:51
咱也不可能说只玩一把  加个循环更好吧
17798 发表于 2022-1-29 16:54
lz那个手机端是什么软件  
liuxiaoxin 发表于 2022-1-29 17:09
感谢分享,给力支持
winson365 发表于 2022-1-29 17:38
感谢大佬分享,可以尝试一下
额微粒波地 发表于 2022-1-29 18:20
yanshiqi 发表于 2022-1-29 16:18
大小王、花牌算10, A算 1.   各得五张牌, 其中任三张相加,得10或10的倍数即为有牛(凑不出即无牛), ...

他的意思可能是这个玩法叫“牛牛”。而不是“斗牛”
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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