自建斗地主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类型和功能模块。不同的APP类型和功能模块的开发工作量是不一样的,因此对成本也有一定影响。接着考虑技术方面的成本:1. 开发平台和工具这部分成本包括开发环
2023-06-05
自制苹果app制作软件有哪些
制作一款自己的苹果App已经不再是一件困难的事情。现如今,拥有App创作软件可以让你几乎不用编写任何代码,就可以在短时间内创造出一个亮眼的App。接下来,我们将介绍一些流行的自制苹果App制作软件。1. XcodeXcode是由苹果官方提供的开发工具,是开
2023-06-05
自学app制作
在当今的移动互联网时代,App已成为人们必备的基本应用之一,而如何制作一个个性化、实用的App也成为普通人所关注的内容之一。随着技术的不断发展和互联网的普及,自学制作App已经成为一个很有发展前景的领域,那么,如何自学App制作呢?一、学习编程语言App的
2023-06-05
自己的网站制作app
制作自己的网站制作 app 可以方便用户在手机上直接进行网站制作操作,提高用户体验以及自己网站的曝光度,下面介绍一种基于 React Native 的制作方式。首先需要安装 Node.js 和 React Native,接着创建 React Native
2023-06-05
御泥坊自建app投石问路
御泥坊是一家以面膜为主打的化妆品品牌,它在2017年开发了自己的手机应用程序。在这篇文章中,我们将介绍御泥坊自建app的过程以及原理,帮助大家了解如何开发一个成功的手机应用。1. 需求分析在开发应用之前,御泥坊团队首先需要进行需求分析。他们需要确保应用程序
2023-06-05
有什么app可以自己做漫画
要制作自己的漫画不必拥有专业的绘画技能。如今,市场上有许多的应用程序可以帮助你创建你自己的漫画。下面就为大家介绍一些目前较为受欢迎的漫画制作应用。1. Clip Studio PaintClip Studio Paint是一款较为专业的漫画制作应用,功能非
2023-06-05
朋友自己做的app
我有一个朋友,最近他自己做了一个app,让我非常惊讶。这个app主要是针对年轻人的社交需求,可以让用户在上面结交新朋友、找到志同道合的伙伴。在这里,我想分享一下他的app的原理和详细介绍。首先,这个app的核心功能是基于地理位置的社交。当用户注册并登录后,
2023-05-30
如何使用网页开发自己的app
随着移动互联网的快速发展,越来越多的人开始使用智能手机和移动应用程序。为了更好地服务用户,许多网站和公司开始构建自己的移动应用程序。但是,对于一些小型的网站或公司来说,开发一款完整的移动应用程序需要花费巨大的成本。 这时,网页开发技术就可以派上用场了。下面
2023-05-30
去哪个app做各种自己古装造型
近年来,越来越多的APP开始涌现,在古装造型方面正好也不例外。快速、方便,让你模仿古代人物的造型成为了一件轻松有趣的事情。接下来,我将为大家介绍几款比较受欢迎的古装造型APP,以及它们的使用方法。一、虚拟古风妆扮“虚拟古风妆扮”是一款非常受欢迎的古装造型A
2023-05-30
免费手机自建app
随着智能手机的普及,移动应用也成为人们生活中不可或缺的一部分。自建一个手机应用,不仅可以让你更好地理解开发原理,更可以为个人或商业用途带来更多的便利。本文将介绍如何免费自建一款手机应用。 一、应用开发平台的选择 市面上有很多应用开发平台,例如:Androi
2023-05-30
聚合支付服务商需要自己开发app吗知乎
聚合支付服务商(例如支付宝、微信支付等)是指集合多种支付方式的支付平台,用户可以通过这些平台实现多种支付方式的付款操作。在这个领域,挑战是很大的,除了技术的要求之外,还有大量的监管限制。因此,聚合支付服务商需要自己开发APP。首先,聚合支付服务商需要自己开
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1