Python编写斗地主游戏(单机版)

   日期:2020-09-10     浏览:95    评论:0    
核心提示:斗地主玩法介绍:斗地主是三个人玩,两个人斗一个地主,地主20张牌。农民每人17张牌。王炸:大王+小王 是最大牌,可以炸别人任意的牌,单张的话 大王比小王大,两者都可以代替任意牌型。第二大是炸弹:从2点A点K以此推类到3点炸,四只牌一起就是炸弹,可以炸对方的连牌,单牌,对子,三代一飞机就是说要有三个三跟三个四,或三个十跟三个J三张两个连在一起才叫飞机,飞机带翅膀就是飞机在带上两只单牌就叫飞机带翅膀。三带一就是说三张一样的牌,可以带上一只单独的牌就叫三带一连对的组合就是三个三对牌连在一起

斗地主玩法介绍:

斗地主是三个人玩,两个人斗一个地主,地主20张牌。农民每人17张牌。

王炸:大王+小王 是最大牌,可以炸别人任意的牌,单张的话 大王比小王大,两者都可以代替任意牌型。

第二大是炸弹:从2点A点K以此推类到3点炸,四只牌一起就是炸弹,可以炸对方的连牌,单牌,对子,三代一

飞机就是说要有三个三跟三个四,或三个十跟三个J三张两个连在一起才叫飞机,飞机带翅膀就是飞机在带上两只单牌就叫飞机带翅膀。

三带一就是说三张一样的牌,可以带上一只单独的牌就叫三带一

四带二:四张相同的牌带两张不同或相同的牌。

连对的组合就是三个三对牌连在一起的就叫连对,比如556677,88991010,QQKKAA这样就叫连对。

顺子是由五张单独组成的牌叫顺子,最低五张牌,最高可以从3-A。

出牌可以出,单牌的大小排列是大王-小王-2-A-K-Q-J-10-9-8-7-6-5-4-3的顺序。

 

要实现Python编写,得依次实现以下功能:

生成一副牌、洗牌、发牌、对牌排序、叫地主、出牌合理性判断、出牌大小比较 等等。

生成一副牌及洗牌

import random

pokers1 = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
pokers2 = ['大王','小王']
pokers_color = ['红桃','黑桃','梅花','方块']
pokers = ['%s%s'%(i,j) for i in pokers_color for j in pokers1] + pokers2 # 生成一副54张的整牌
random.shuffle(pokers) #洗牌

发牌

robot1 = []
robot2 = []
player = [] #玩家的牌
while len(pokers) > 3:#留3张底牌
    i = pokers.pop()
    robot1.append(i)
    j = pokers.pop()
    robot2.append(j)
    k = pokers.pop()
    player.append(k)

对牌排序(使用了冒泡排序法)

估计还可以简化一下

def poker_sort(a):#对牌排序函数
    a1,a2 = [],[]
    for i in range(len(a)):#将数字型和非数字型牌挑出来
        str_list = list(a[i])
        if len(str_list) == 2 or str_list[-1] in ['J','Q','K','A']:#挑出非数字型牌
            a2.append(a[i])
        else:
            a1.append(a[i])
    #print(a1)
    #print(a2)
    i = 0
    while 1:# 先对数字型牌使用冒泡排序法
        for j in range(len(a1)-1-i):
            str_list = list(a1[j])
            str_list1 = list(a1[j+1])
            if len(str_list) == 4:# 牌值为10的转换成列表长度为4
                str_list[2] = '10'
            if len(str_list1) == 4:
                str_list1[2] = '10'
            if int(str_list[2]) > int(str_list1[2]):
                t =a1[j+1]
                a1[j+1] = a1[j]
                a1[j] = t
        i += 1
        if len(a1)-1-i == 1:
            break
    #print(a1)
    i = 0
    while 1:# 对非数字型牌使用冒泡排序法
        for j in range(len(a2)-1-i):
            str_list = list(a2[j])
            str_list1 = list(a2[j+1])
            if str_list[-1] == 'J':
                str_list[-1] = '11'
            elif str_list[-1] == 'Q':
                str_list[-1] = '12'
            elif str_list[-1] == 'K':
                str_list[-1] = '13'
            else:
                str_list[-1] = '14'

            if str_list1[-1] == 'J':
                str_list1[-1] = '11'
            elif str_list1[-1] == 'Q':
                str_list1[-1] = '12'
            elif str_list1[-1] == 'K':
                str_list1[-1] = '13'
            else:
                str_list1[-1] = '14'

            if str_list[0] == '小' :
                str_list[-1] = '50'#小王用50代替
            if str_list1[0] == '小' :
                str_list1[-1] = '50'
            if str_list[0] == '大':
                str_list[-1] = '100'#大王用100代替
            if str_list1[0] == '大':
                str_list1[-1] = '100'
            if int(str_list[-1]) > int(str_list1[-1]):
                t =a2[j+1]
                a2[j+1] = a2[j]
                a2[j] = t
        i += 1
        if len(a2)-1-i == 1:
            break
    #print(a2)
    a = a1 + a2
    #print(a)
    return a

叫地主

name = input('请输入玩家名:\n')# 游戏角色为一个玩家加两个机器人
print('欢迎玩家'+name+'!')

# 叫地主
key = input('请问玩家'+name+'叫地主吗(y/n):\n')
if key =='y':
    player = player + pokers
    player = poker_sort(player)#对牌排序函数 从2到A、小王、大王
    print(name+'现在是地主,牌为:\n',player)
else:
    robot1 = robot1 + pokers
    robot1 = poker_sort(robot1)
    print('robot1现在是地主!')

出牌合理性判断

即验证牌型 看是单牌、双牌、三带一、飞机、顺子、炸弹、连对等是哪一个

出牌大小比较

即对方出了牌 要比较自己有没有比对方大的牌,有就出,没有就过。

未完。。。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服