自建斗地主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就成为了很多企业的首选。本文将为大家介绍自建火车站app的原理和详细介绍。一、自建火车站
2023-06-05
自己做外卖app
要自己做一个外卖app,需要掌握以下几个主要步骤:第一步:确定需求在开始之前,你需要明确自己的需求,自己要做的外卖app主要特点是什么,是否需要支持多平台使用,是否需要进行在线支付,是否需要自己独立开发分类等功能等等,这些都是你需要在开始做之前先确定明确的
2023-06-05
自己做一个app卖东西违法吗
在现代社会中,移动应用程序(App)的开发已经成为一个非常热门的行业。越来越多的人想要利用自己的创意和技术来开发一个自己的App,以分享信息、销售产品或提供服务等多种方式来实现盈利。但是,对于一个普通人来说,可能并不知道自己做一个App卖东西是否合法。首先
2023-06-05
自己制作结婚请柬的app
自己制作结婚请柬的app是一种非常实用的应用程序,可以让用户轻松快速地通过手机制作一封精美、独特的结婚请柬。具体的实现方式有多种,其中一种较为典型的实现方式是:通过应用程序内置的模板,用户只需要选择自己满意的样式,添加一些个性化的文字和图片即可生成自己的结
2023-06-05
自行车app开发找什么公司好
现代生活中,人们越来越注重健康、环保的生活方式,自行车成为了一种受欢迎的代步工具。随着智能手机和移动互联网的普及,自行车app的开发也成为了一个新的市场。但是,在选择自行车app开发公司时,很多人不知道应该选择哪家公司,本文将介绍一些应该考虑的因素。首先,
2023-06-05
为公司制作自己的app
在当今移动互联网时代,许多公司开始考虑开发自己的移动应用程序(App)以增强其品牌意识和竞争力。开发一个高质量的应用程序需要有一定的计划和技能。接下来,本文将为您介绍开发一个公司自己的App的原理和详细过程。## 第一步:确定目标在开发一个公司自己的App
2023-05-31
为什么不自建app
自建一个app可以给你的业务带来很多优势,但同时也有很多挑战和风险需要考虑。以下是一些原因,解释为什么你不应该自行建立一个app:1. 投入成本高昂自行建立一个app需要的资金投入通常比你想象的要高很多。即使你有技术背景,你也需要考虑到开发人员的薪资、再加
2023-05-31
淘客自建app
淘客自建APP指的是淘宝客或其他电商平台的推广者利用自己编写或购买的APP来推广商品的营销方式。这种方式有以下优点:1. 提升推广效果:自建APP可以帮助淘客更加直接、方便地推广商品,提升推广效果和转化率。2. 让品牌更有优势:自己的APP可以加大品牌的优
2023-05-31
手机上的自媒体动漫制作app
随着互联网技术的发展,手机上的自媒体动漫制作app也越来越受欢迎。通过这些app,用户可以轻松地创建自己的动漫作品,无需专业的动画制作技能和设备。以下是手机上的自媒体动漫制作app的原理和详细介绍。一、原理自媒体动漫制作app一般采用基于云端的动画制作技术
2023-05-31
衢州自动量化交易app开发报价多少
衢州自动量化交易app是一款基于量化交易策略的智能交易工具,实现了自动化的交易决策和交易操作,可以帮助投资者提高交易效率和收益率。下面将详细介绍衢州自动量化交易app的原理和开发报价。1. 原理介绍量化交易是一种基于大数据和算法的交易方式,旨在减少人为干扰
2023-05-30
如何制作一个自己的app软件
制作一个自己的App软件并不是一件难事,只要按照以下步骤进行操作,你也可以制作出属于自己的App。第一步:确定App的目的和功能在开始制作App之前,首先要做的是确定App的目的和功能。你需要考虑你的App是什么,有哪些功能,它是用来解决什么问题的,以及你
2023-05-30
把自己做成gif的app
把自己做成gif的应用程序是一种非常有趣且流行的趋势。此应用程序的原理基于将视频捕捉转换成gif文件的过程。想要做到这一点,我们需要使用一些特定的工具和技术。原理将自己做成gif的应用程序有两个核心的原理:捕捉视频:你需要通过使用摄像头或者屏幕的截屏功能来
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1