python實現3人鬥地主隨機搶地主並發牌

2021-09-10 22:56:13 字數 2730 閱讀 1247

學了很長時間的python,但是很少用到,所有想要寫點東西記錄一下。防止經常忘記怎麼寫!

#突然想做乙個鬥地主遊戲,那就先來個3人鬥地主吧

import random

class doudizhu:

def __init__(self):

self.a =[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,

33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53]

#洗牌#typeerror: xipai() missing 1 required positional argument: 'self'

#原因是第78行沒有例項化鬥地主的物件 (錯誤user = doudizhu)

#attributeerror: 'doudizhu' object has no attribute 'a'沒有物件屬性a

#錯誤原因是 定義了_int_ ,實際上應該定義__init__

def xipai(self):

random.shuffle(self.a)

n = random.randint(1,54)

b = self.a[:n]

c = self.a[n:]

self.a = c + b

#發牌def fapai(self):

self.str1 = self.a[:-3:3]

self.str2 = self.a[1:-3:3]

self.str3 = self.a[2:-3:3]

self.str4 = self.a[-3:]

#搶地主

def qiangdizhu(self):

n = random.randint(1,3)

self.dizhu = n

if n==1:

self.str1 += self.str4

if n==2:

self.str2 += self.str4

if n==3:

self.str3 += self.str4

#給玩家碼牌(排序)

def mapai(self):

self.str1.sort(reverse = true)

self.str2.sort(reverse = true)

self.str3.sort(reverse = true)

#對映def yingshe(self):

paizd=[(0,'方片3'),(1,'梅花3'),(2,'紅桃3'),(3,'黑桃3'),

(4,'方片4'),(5,'梅花4'),(6,'紅桃4'),(7,'黑桃4'),

(8,'方片5'),(9,'梅花5'),(10,'紅桃5'),(11,'黑桃5'),

(12,'方片6'),(13,'梅花6'),(14,'紅桃6'),(15,'黑桃6'),

(16,'方片7'),(17,'梅花7'),(18,'紅桃7'),(19,'黑桃7'),

(20,'方片8'),(21,'梅花8'),(22,'紅桃8'),(23,'黑桃8'),

(24,'方片9'),(25,'梅花9'),(26,'紅桃9'),(27,'黑桃9'),

(28,'方片10'),(29,'梅花10'),(30,'紅桃10'),(31,'黑桃10'),

(32,'方片j'),(33,'梅花j'),(34,'紅桃j'),(35,'黑桃j'),

(36,'方片q'),(37,'梅花q'),(38,'紅桃q'),(39,'黑桃q'),

(40,'方片k'),(41,'梅花k'),(42,'紅桃k'),(43,'黑桃k'),

(44,'方片a'),(45,'梅花a'),(46,'紅桃a'),(47,'黑桃a'),

(48,'方片2'),(49,'梅花2'),(50,'紅桃2'),(51,'黑桃2'),

(52, '小王'), (53, '大王')]

zdpai = dict(paizd)

paistr1 = ''

for i in range(len(self.str1)):

paistr1 += zdpai[self.str1[i]]+' '

paistr2 = ''

for i in range(len(self.str2)):

paistr2 += zdpai[self.str2[i]]+' '

paistr3 = ''

for i in range(len(self.str3)):

paistr3 += zdpai[self.str3[i]]+' '

#將牌的序列賦給是三個玩家的例項屬性

self.user1 = paistr1

self.user2 = paistr2

self.user3 = paistr3

user = doudizhu()

user.xipai()

user.fapai()

user.qiangdizhu()

user.mapai()

user.yingshe()

print(『user1:』,user.user1)

print(『user2:』,user.user2)

print(『user3:』,user.user3)

接下來要加上玩家搶地主,牌型,出牌規則以及更好的完善

實現模擬鬥地主

實現模擬鬥地主的功能 1.組合牌 2.洗牌 3.發牌 4.看牌 public class doudizhu 定義4個花色陣列 string colors 定義整數變數 作為鍵出現 int index 2 遍歷陣列 花色 點數的組合,儲存到map集合 for string number numbers...

Python3模擬鬥地主發牌

模擬鬥地主發牌,牌共54張,花色 黑桃 u2660 梅花 u2663 方塊 u2665 紅桃 u2666 種類為 a2 10jqk,大小王 x,x 三個人,每個人17張牌,牌底留三張 輸入回車,列印第乙個問的17張牌 輸入回車,列印第二個問的17張牌 輸入回車,列印第三個問的17張牌 import ...

Python3 模擬鬥地主發牌

分析 1.撲克牌作為物件呈現 2.建立未發牌的牌堆的列表 3.建立三個玩家牌堆的列表 4.建立底牌的元組 5.最原始的牌堆初始化,將54張牌加入到牌堆 6.建立洗牌操作 7.建立發牌操作 import random class poke poke 撲克牌牌堆 p1 玩家一牌堆 p2 玩家二牌堆 p3...