自建斗地主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上卖违法吗
近年来,在互联网技术的支持下出现了一大批外卖平台,使人们可以更为便捷地获取美食,同时也有不少人借助这种方式在互联网上开展个人小本买卖,譬如"私房菜"、"家庭式餐饮"等,而这种行为究竟是否合法呢?首先,需要明确的是,自己在家做菜然后卖给别人(包括通过App)
2023-06-05
自己做天气预报app
天气预报APP是目前非常受欢迎的一类应用。对于许多普通用户来讲,这类应用基本上只要打开就可以了,不需要了解具体的技术细节。但是对于一些开发者来说,自己开发一款天气预报APP,不仅可以学习到很多新的技术,而且还能够获得一定的商业价值。下面我将介绍在开发天气预
2023-06-05
自己在家做app免费软件有哪些
如今移动端APP市场已经是一个火爆的市场,很多人都想着自己能够在这个市场占一席之地,但是对于没有开发经验的人来说,这是一个非常难以突破的领域。但好消息是,有一些软件能够帮助那些没有开发经验的人自己制作APP,下面就给大家介绍一些。1. APP制作工厂APP
2023-06-05
怎样自己制作模拟考试app
自己制作模拟考试App可以通过多种技术实现,其中一个比较简单的方法是使用基于Web技术的混合App开发框架,如使用Cordova+Vue.js或React Native实现。下面将介绍使用Vue.js和Cordova实现的方法。1. 开发准备Vue.js是
2023-06-05
有哪些app做自媒体可以赚钱
自媒体是近年来的一个热门话题,也是一种零成本、低门槛的赚钱方式。现在很多人都在关注自媒体,那么,有哪些APP可以做自媒体赚钱呢?下面就为大家介绍几种常见的APP。1. 抖音抖音是一个很有趣的短视频社交平台,它是中国最火的APP之一,拥有超过2亿的用户。抖音
2023-06-05
如何自己做收费app
要做一个收费应用程序,需要考虑到许多方面,包括应用程序的基本功能、目标市场、定价策略等等。以下是一些需要注意的要点。首先,要确定应用程序的基本功能。这是关键,因为用户购买应用程序的主要原因是为其提供有价值的功能。因此,你需要确定你的应用程序的核心功能,以及
2023-05-30
如何用app自己制作logo
制作一份高质量的商标是为公司或个人品牌打造强劲的基础,并吸引更多的顾客关注。但是,对于许多人来说,制作一份专业的logo会感到十分困难,它需要技巧和良好的美学眼光。现在,我们有现代科技的帮助,许多app提供了许多logo制作的工具和功能,以便你快速地设计出
2023-05-30
企业为什么要开发自己的app
随着移动互联网的迅速普及,人们使用智能手机的频率也越来越高。因此,越来越多的公司开始意识到了开发自己的移动应用程序(App)的重要性。下面介绍企业为什么要开发自己的App的原理或详细介绍。1. 提高品牌知名度和形象企业开发App是为了更好地推广自己的品牌。
2023-05-30
开发app找外包自己怎么管理
在开发app时,往往需要考虑很多因素,包括开发周期、人员配置、项目管理等等。如果公司没有足够的内部资源来完成这个项目,那么就需要外包开发。如何管理外包开发呢?以下是一些原则和详细介绍:1.找一个可靠的团队首先,你需要找到一个可靠的团队来承担开发任务。最好是
2023-05-30
电商团队需要自己开发app吗知乎
随着互联网和移动设备的普及,越来越多的电商企业开始考虑开发自己的移动应用程序。开发移动应用程序是一项庞大的任务,需要投入大量的时间和资源。因此,电商团队需要深入思考是否需要自己开发app。在决定是否需要自己开发app之前,电商团队需要考虑以下问题:1. 用
2023-05-30
阿里的app是自己开发的吗
阿里集团是一家拥有多个业务版块的企业,其中包括电商、金融、云计算、智能互联等多个领域。为了满足不同业务的需求,阿里集团开发了多个不同功能的APP。下面就来介绍阿里APP的开发原理和详细过程。首先,阿里APP的开发是基于云计算和大数据技术的。云计算可提供安全
2023-05-30
ios app开发自学教程
iOS App开发是一门非常热门的技术,它不仅具有较高的商业价值,也为个人提供了锻炼自我能力和表现自我价值的机会。 开发iOS应用程序可以通过多种语言和技术实现,包括Objective-C、Swift、Xcode和其他开发工具。在本文中,我们将为您介绍iO
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1