自建斗地主app

斗地主是一款非常受欢迎的扑克牌游戏,很多人都喜欢在电脑或手机上玩斗地主。如果你是一个程序员或者对编程有一定基础的朋友,那么你可以尝试自建一个斗地主APP。本文将介绍如何通过编程实现一个简单的斗地主游戏。

一、游戏规则

在开始编写斗地主APP之前,我们要先了解游戏规则。斗地主的牌数为54张,包含了大小王,其中3个2为地主牌,玩家手中的牌由系统随机分配,地主牌由系统确定。游戏过程分为抢地主和出牌两个阶段,抢地主结束后,地主首先出牌,其余玩家依次出牌。出牌规则为必须出比上一家牌型大的牌,没有比上一家牌大的牌型则需要不出。出完牌后,上一位出牌者可以在本回合任意时刻重新出牌。

二、编程实现

1.初始化

游戏开始前,我们需要先创建牌堆和玩家列表,同时将54张牌洗牌。

```

def init():

cards = ['2_♥','2_♠','2_♣','2_♦', 'A_♥','A_♠','A_♣','A_♦', 'K_♥','K_♠','K_♣','K_♦', 'Q_♥','Q_♠','Q_♣','Q_♦', 'J_♥','J_♠','J_♣','J_♦', '10_♥','10_♠','10_♣','10_♦', '9_♥','9_♠','9_♣','9_♦', '8_♥','8_♠','8_♣','8_♦', '7_♥','7_♠','7_♣','7_♦', '6_♥','6_♠','6_♣','6_♦', '5_♥','5_♠','5_♣','5_♦', '4_♥','4_♠','4_♣','4_♦', '3_♥','3_♠','3_♣','3_♦', 'joker','JOKER']

random.shuffle(cards)

players = {'player1':[], 'player2':[], 'player3':[]}

return cards, players

```

2.抢地主

我们需要编写一个函数,实现抢地主的过程。系统向每个玩家发一张牌,最后一张牌为地主牌,拥有该牌的玩家成为地主。如果没有玩家抢地主,则系统会重新给玩家发牌,直到有玩家抢地主。

```

def robLandlord(players):

cards, players = init()

last_card = cards.pop()

for p in players.keys():

players[p].append(cards.pop())

flag = False

curr_player = 'player3'

while not flag:

print(players[curr_player])

action = input('请选择(抢地主/不抢):')

if action == '抢地主':

players[curr_player].append(last_card)

flag = True

else:

players[curr_player].extend([cards.pop() for i in range(2)])

curr_player = getNextPlayer(curr_player)

return curr_player, players[curr_player]

```

3.牌型判断

在出牌过程中,我们需要实现对玩家出牌的牌型进行判断。可以先列出所有合法的牌型,然后通过编程逐一判断。

```

def getCardType(cards):

card_dic = {}

for card in cards:

if card.split('_')[0] not in card_dic:

card_dic[card.split('_')[0]] = 1

else:

card_dic[card.split('_')[0]] += 1

card_count = list(card_dic.values())

card_count.sort()

if len(cards)==1:

return 'single'

elif len(cards)==2 and card_count[0]==2:

return 'double'

elif len(cards)==3 and card_count[0]==3:

return 'triple'

elif len(cards)==4 and card_count[0]==4:

return 'bomb'

elif len(cards)==5 and card_count[0]==3 and card_count[1]==2:

return 'three_plus_two'

elif len(cards)==6 and card_count[0]==3 and card_count[1]==3:

return 'double_triple'

elif len(cards)==6 and card_count[0]==4 and card_count[1]==2:

return 'four_plus_two'

elif len(cards)==7 and card_count[0]==3 and card_count[1:]==[2,2]:

return 'three_plus_two_double'

elif len(cards)==8 and card_count[0]==4 and card_count[1:]==[2,2]:

return 'four_plus_two_double'

elif len(cards)==9 and card_count[0:3]==[3,3,3]:

return 'triple_straight'

elif len(cards)==10 and card_count[0:5]==[1,1,1,1,1] and isStraight(cards):

return 'straight'

elif len(cards)>=5 and isStraight(cards):

return 'straight'

else:

return 'invalid'

def isStraight(cards):

vals = []

for card in cards:

if card.split('_')[0] == 'A':

vals.append(14)

elif card.split('_')[0] == 'K':

vals.append(13)

elif card.split('_')[0] == 'Q':

vals.append(12)

elif card.split('_')[0] == 'J':

vals.append(11)

elif card.split('_')[0] == 'joker':

vals.append(15)

elif card.split('_')[0] == 'JOKER':

vals.append(16)

else:

vals.append(int(card.split('_')[0]))

vals.sort()

for i in range(len(vals)-1):

if vals[i+1]-vals[i]!=1:

return False

return True

```

4.出牌

在出牌过程中,我们需要判断出牌的合法性,如果非法则需要提醒玩家重新出牌。

```

def play(cards_prev, cards_curr):

if cards_curr == []:

return True, getCardType(cards_curr)

card_type_prev = getCardType(cards_prev)

card_type_curr = getCardType(cards_curr)

if card_type_curr == 'invalid':

return False, card_type_curr

elif card_type_curr == 'bomb':

if card_type_prev != 'bomb':

return True, card_type_curr

else:

if int(cards_curr[0].split('_')[0]) > int(cards_prev[0].split('_')[0]):

return True, card_type_curr

else:

return False, card_type_curr

elif card_type_curr == 'joker_bomb':

return True, card_type_curr

elif card_type_curr == card_type_prev:

if card_type_curr in ['single', 'double', 'triple']:

if int(cards_curr[0].split('_')[0]) > int(cards_prev[0].split('_')[0]):

return True, card_type_curr

else:

return False, card_type_curr

elif card_type_curr in ['three_plus_two', 'three_plus_two_double']:

if int(cards_curr[2].split('_')[0]) > int(cards_prev[2].split('_')[0]):

return True, card_type_curr

else:

return False, card_type_curr

else:

if int(cards_curr[0].split('_')[0]) > int(cards_prev[0].split('_')[0]):

return True, card_type_curr

else:

return False, card_type_curr

elif card_type_curr == 'rocket':

return True, card_type_curr

elif card_type_curr == 'joker':

return False, card_type_curr

else:

return False, card_type_curr

```

这样,我们就完成了一个简单的斗地主游戏的编程实现。接下来可以通过加入更多的特性和优化代码来完善这个游戏。


相关知识:
自律世界模式app源码开发定制
《自律世界模式》是一款专门帮助用户养成自律习惯的应用软件,它应运而生,是为了帮助用户实现自我管理的目的。在这款软件中,用户可以制定自己的计划和目标,设定时间表并且进行跟踪,从而帮助他们保持良好的时间管理和自我激励。在下面的文章中,我们将重点介绍“自律世界模
2023-06-05
自己做菜在app上卖
自己做菜在app上卖,是现在越来越流行的一种商业模式,如今的消费者们逐渐意识到了健康饮食的重要性,而自己做菜在app上卖则成为了一种满足消费需求的新模式。做菜的卖家只需要在app上发布自己做好的菜品,店铺信息,单价,配送方式等等信息,消费者们可以根据自己的
2023-06-05
自己做相亲app
相亲app成为现代人找对象的一种主要方式,相比于传统的相亲方式,app相亲更加便捷、高效。很多网站博主或程序员都希望能够开发一款属于自己的相亲app,这里简单介绍一下相亲app的主要原理和步骤。1.需求调研在开始设计相亲app之前,需要对用户进行需求调研和
2023-06-05
自己怎么才能开发app
开发一款APP需要掌握一些基本技能,包括编程语言、操作系统、开发环境、测试和发布等等。下面将具体介绍开发APP的原理和步骤。一、编程语言开发APP需要掌握相应的编程语言,如Java、Swift、Objective-C、JavaScript等。其中,Java
2023-06-05
自己制作刷题的app
制作一个刷题APP可以帮助用户更方便快捷地学习和做题,同时也为我们创造出了一个新的机会来积累经验、提高技能和展示自己的能力。下面是我个人认为制作刷题APP的一些原理和详细介绍。1.确定应用类型首先要做的是确定这个APP是要做什么类型的。例如,是数学题库、语
2023-06-05
新手如何自己做网站app
如果你想自己动手做网站或者 APP,但是仍是新手,不要担心,以下将为你介绍一些原理和步骤,让你快速入门。一、原理1.网站和应用程序的区别网站和应用程序在很多方面都有所不同。基本上,网站是通过互联网来呈现和交换信息的程序,而应用程序是指一个可以在移动设备或电
2023-06-05
淘宝app自建
淘宝是一个非常成功的电商平台,运营了20多年。作为一家最大的电商平台,淘宝必须能够提供一个功能丰富且可靠的应用程序。目前,淘宝的应用程序具有很多特性,它在设计方面处于前沿,拥有最新的技术和最先进的方法。本文将重点讲解淘宝app自建的原理或详细介绍。淘宝ap
2023-05-31
手机如何制作自己的app
在当今移动互联网时代,APP已成为人们日常生活中必不可少的工具,随着技术的不断进步,越来越多的人想要制作自己的APP,那么今天我们就来详细介绍一下,手机如何制作自己的APP。一、了解APP的开发平台APP的开发需要用到开发平台来进行编码,目前常用的APP开
2023-05-31
实体店自建app推荐
随着移动互联网的不断发展,越来越多的实体店开始意识到建立自己的移动APP对于店铺的促销、拓展用户群等方面的重要性。虽然市面上有很多第三方提供的APP建设套餐,实体店自建APP仍然有着诸多优势。那么,实体店自建APP的原理是什么?它的优势又在哪里呢?首先,实
2023-05-31
如何自己制作一个app
随着移动互联网的不断发展,APP的使用越来越广泛,越来越多的人有了制作自己的APP的需求。那么,如何自己制作一个APP呢?1.明确需求与功能制作APP的第一步是明确需求和功能。根据自己的需要和主题,确定要制作的APP的功能、内容、界面设计和用户交互等。这也
2023-05-30
如何根据自己需求开发app功能
在如今的移动互联网时代,手机APP已经成为大众生活中不可或缺的一部分。而一款优秀的APP,不仅要具备良好的用户体验,更重要的是能够满足用户的需求。那么,如何根据自己需求开发一款符合用户需求的APP呢?第一步:明确需求在开发APP之前,首先要明确自己的需求,
2023-05-30
教你自己做外卖app
随着外卖市场逐渐升温,开发外卖app已经成为了很多开发者和企业的热门选择。如果你也想尝试开发一款外卖app,本文将为你介绍如何自己进行开发。1. 确定需求在开始开发之前,需要先明确自己的需求。你需要思考你的app需要做哪些功能、支持哪些支付方式、需要符合哪
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1