python 代码模拟斗地主起牌情形

有一次在学习random 模块时,发现random.shuffle这个打乱挺有意思,于是就想生活中打牌不正好是这个打乱吗?于是想起了,能否用这个来模拟斗地主起牌的情形呢?
遇到的难点:
1,怎么样才能产生一副牌呢?
2,如何做到真是场景中的一人起一张牌的情形
3,如何产生3张底牌
4,地主如何产生
5,底牌加到地主手上
6,最关键是起到牌后,排序的问题,不是简单的按数字从小到大排序,而是按34678910JQKA小王大王这样的顺序排,另外还得有点数的问题。
这个排序,我是用字典把每一张牌花色按方块,梅花,红桃,黑桃;点数按34678910JQKA小王大王这2个排序规则做的排序

import random

for i in range(3):
	list1 = ['大王', '小王']
	for dot in '♠♥♣◆':
		crd = list(dot + str(i) for i in ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K'])
		list1.extend(crd)
	random.shuffle(list1)
	player1 = []
	player2 = []
	player3 = []
	for i in range(51):
		if i % 3 == 0:
			player1.append(list1[i])
		elif i % 3 == 1:
			player2.append(list1[i])
		else:
			player3.append(list1[i])
	# 随机产生地主
	landlord = random.choice(['player1', 'player2', 'player3'])
	print('本轮地主:' + landlord)
	# 剩余的3张底牌
	lost = player1 + player2 + player3
	dipai = list(i for i in list1 if i not in lost)
	print('底牌:', dipai)
	if landlord == 'player1':
		player1.extend(dipai)
	elif landlord == 'player2':
		player2.extend(dipai)
	else:
		player3.extend(dipai)
	order = {'♠6': 15, '◆5': 8, '♥J': 34, '♠Q': 39, '♠A': 47, '♣4': 5, '♠3': 3, '◆Q': 36, '♠2': 51,
			 '◆A': 44, '♥7': 18, '♥8': 22, '♥6': 14, '♥K': 42, '小王': 52, '◆4': 4, '♠9': 27, '♣2': 49,
			 '♣8': 21, '♠10': 31, '◆K': 40, '♠8': 23, '♠5': 11, '◆2': 48, '♣9': 25, '◆J': 32, '♣K': 41,
			 '♣10': 29, '♣6': 13, '♠K': 43, '♥9': 26, '◆10': 28, '◆3': 0, '♣Q': 37, '♣3': 1, '大王': 53,
			 '♣J': 33, '◆8': 20, '♥10': 30, '♥3': 2, '♥4': 6, '◆9': 24, '♣5': 9, '◆6': 12, '♥Q': 38,
			 '♥5': 10, '♠J': 35, '♣A': 45, '◆7': 16, '♥2': 50, '♠4': 7, '♣7': 17, '♥A': 46, '♠7': 19}
	print('玩家的牌分别是:')
	print('p1:', sorted(player1, key=lambda x: order[x], reverse=False))
	print('p2:', sorted(player2, key=lambda x: order[x], reverse=False))
	print('p3:', sorted(player3, key=lambda x: order[x], reverse=False))
	print('=' * 50)

下面是模拟3牌起牌的结果:
本轮地主:player1
底牌: [‘♥6’, ‘♣4’, ‘小王’]
玩家的牌分别是:
p1: [‘♣4’, ‘♠4’, ‘♥5’, ‘♠5’, ‘♣6’, ‘♥6’, ‘♥8’, ‘♠9’, ‘◆10’, ‘♠10’, ‘◆J’, ‘♣Q’, ‘♠Q’, ‘♥K’, ‘◆A’, ‘♥A’, ‘♠A’, ‘◆2’, ‘♣2’, ‘小王’]
p2: [‘♣3’, ‘◆4’, ‘◆5’, ‘◆6’, ‘♠6’, ‘◆7’, ‘♣7’, ‘♥7’, ‘♣8’, ‘♠8’, ‘◆9’, ‘♥9’, ‘♥Q’, ‘◆K’, ‘♣K’, ‘♠2’, ‘大王’]
p3: [‘◆3’, ‘♥3’, ‘♠3’, ‘♥4’, ‘♣5’, ‘♠7’, ‘◆8’, ‘♣9’, ‘♣10’, ‘♥10’, ‘♣J’, ‘♥J’, ‘♠J’, ‘◆Q’, ‘♠K’, ‘♣A’, ‘♥2’]

本轮地主:player1
底牌: [‘♠K’, ‘♣Q’, ‘♥5’]
玩家的牌分别是:
p1: [‘♣4’, ‘♠4’, ‘♣5’, ‘♥5’, ‘◆7’, ‘♠8’, ‘◆9’, ‘♠9’, ‘◆10’, ‘♣10’, ‘♥10’, ‘♠10’, ‘◆J’, ‘♣Q’, ‘♥K’, ‘♠K’, ‘◆A’, ‘♠A’, ‘♣2’, ‘♥2’]
p2: [‘◆3’, ‘♠3’, ‘◆5’, ‘◆6’, ‘♣7’, ‘♥7’, ‘♠7’, ‘◆8’, ‘♣8’, ‘♣9’, ‘♣J’, ‘♥J’, ‘♠J’, ‘◆Q’, ‘◆K’, ‘♥A’, ‘◆2’]
p3: [‘♣3’, ‘♥3’, ‘◆4’, ‘♥4’, ‘♠5’, ‘♣6’, ‘♥6’, ‘♠6’, ‘♥8’, ‘♥9’, ‘♥Q’, ‘♠Q’, ‘♣K’, ‘♣A’, ‘♠2’, ‘小王’, ‘大王’]

本轮地主:player2
底牌: [‘♥9’, ‘♠5’, ‘♣A’]
玩家的牌分别是:
p1: [‘♣4’, ‘♥5’, ‘♣6’, ‘♥6’, ‘♠7’, ‘◆8’, ‘◆9’, ‘♣9’, ‘♣10’, ‘♠10’, ‘♠J’, ‘◆Q’, ‘♥Q’, ‘♣K’, ‘♥K’, ‘♥A’, ‘◆2’]
p2: [‘◆3’, ‘♠3’, ‘♠4’, ‘♠5’, ‘◆6’, ‘♠6’, ‘◆7’, ‘♥7’, ‘♥8’, ‘♥9’, ‘♠9’, ‘◆10’, ‘♣J’, ‘♥J’, ‘♣Q’, ‘♠Q’, ‘◆K’, ‘♣A’, ‘♠A’, ‘♥2’]
p3: [‘♣3’, ‘♥3’, ‘◆4’, ‘♥4’, ‘◆5’, ‘♣5’, ‘♣7’, ‘♣8’, ‘♠8’, ‘♥10’, ‘◆J’, ‘♠K’, ‘◆A’, ‘♣2’, ‘♠2’, ‘小王’, ‘大王’]

还有许多细节没做到位,有兴趣的朋友可以完善一下
要是想做出牌,那就复杂多了,炸弹判断,顺子判断,3带1啥的,忒复杂了,有时间慢慢完善吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值