斗地主玩法介紹:
斗地主是三個人玩,兩個人斗一個地主,地主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現在是地主!')
出牌合理性判斷
即驗證牌型 看是單牌、雙牌、三帶一、飛機、順子、炸彈、連對等是哪一個
出牌大小比較
即對方出了牌 要比較自己有沒有比對方大的牌,有就出,沒有就過,
未完,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/3315.html
標籤:python
上一篇:位元組跳動高質量面經(偏難)
