用python写斗地主程序
时间: 2023-09-20 07:11:50 浏览: 136
写斗地主程序需要用到扑克牌和算法。
首先,我们需要定义扑克牌的类,包括牌面,花色,大小王等信息。代码如下:
```python
class Card:
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __str__(self):
return self.rank + self.suit
```
接下来,我们需要定义一副牌,包括52张普通牌和2张大小王。代码如下:
```python
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
suits = ['H', 'D', 'C', 'S']
class Deck:
def __init__(self):
self.cards = [Card(rank, suit) for rank in ranks for suit in suits]
self.cards.append(Card('R', 'B'))
self.cards.append(Card('R', 'W'))
def shuffle(self):
random.shuffle(self.cards)
def deal(self):
return self.cards.pop()
```
然后,我们需要实现牌型识别算法,用于判断出牌是否合法。这里我们采用最简单的规则,即牌型相同并且数量相同才能出牌。代码如下:
```python
def is_valid(cards):
if len(cards) == 1:
return True
elif len(cards) == 2 and cards[0].rank == cards[1].rank:
return True
elif len(cards) == 3 and cards[0].rank == cards[1].rank == cards[2].rank:
return True
elif len(cards) == 4 and cards[0].rank == cards[1].rank == cards[2].rank == cards[3].rank:
return True
elif len(cards) == 5 and (
cards[0].rank == cards[1].rank == cards[2].rank == cards[3].rank == cards[4].rank or
(cards[0].rank == cards[1].rank and cards[3].rank == cards[4].rank and cards[1].rank == cards[2].rank) or
(cards[0].rank == cards[1].rank and cards[2].rank == cards[3].rank and cards[3].rank == cards[4].rank)
):
return True
else:
return False
```
最后,我们需要实现游戏逻辑,包括发牌,叫地主,出牌等。代码如下:
```python
class Player:
def __init__(self, name):
self.name = name
self.cards = []
def add_card(self, card):
self.cards.append(card)
def remove_card(self, cards):
for card in cards:
self.cards.remove(card)
def show_cards(self):
print(self.name + ' holds:')
for card in self.cards:
print(card)
print('')
class Game:
def __init__(self, players):
self.players = players
self.deck = Deck()
self.deck.shuffle()
self.landlord = None
self.current_player = None
self.current_cards = None
def deal(self):
for i in range(17):
for player in self.players:
player.add_card(self.deck.deal())
def bid(self):
for i in range(len(self.players)):
player = self.players[i]
print('Player', i + 1, ':', player.name)
player.show_cards()
if input('Do you want to bid? (y/n)') == 'y':
self.landlord = player
self.current_player = player
return
self.landlord = self.players[2]
self.current_player = self.players[2]
def play(self):
self.deal()
self.bid()
print(self.landlord.name, 'is the landlord!')
for player in self.players:
player.show_cards()
while True:
self.current_cards = []
for i in range(len(self.players)):
player = self.players[(i + self.players.index(self.current_player)) % len(self.players)]
print(player.name, 'turn:')
player.show_cards()
cards = input('Please input your cards (e.g. H2,H3,H4):').strip().split(',')
cards = [Card(card[1:], card[0]) for card in cards]
if is_valid(cards):
player.remove_card(cards)
self.current_cards = cards
self.current_player = player
break
else:
print('Invalid cards, please try again!')
if len(self.current_player.cards) == 0:
print(self.current_player.name, 'wins!')
break
```
这样,我们就完成了一个简单的斗地主程序。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)