自建斗地主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可能面临的安全问题及其原理。首先,App的安全问题主要包括以下几个方面。1. 数据安全当
2023-06-05
自己开发app商城需要注册什么公司
开发一个APP商城需要进行法律注册和规划商业模式。根据不同国家和地区的法律规定和商业环境,注册公司的要求也有所不同。以下是一些常见的注册公司类型和程序以及对于不同国家区域的一些规定供参考。一、公司类型1.个体工商户个体工商户简单易办。个体工商户只需要进行营
2023-06-05
怎么制作自己的app并上架手机上的链接码
要制作自己的App并上架到手机上,一般需要以下步骤: 1.确定App的类型和功能,根据自己的需求和技能,选择适合自己的App类型和功能模块。最好先做好流程图和概念设计,考虑产品的优劣性和竞争力。2.选择开发平台,有很多开发平台供您选择,其中比较流行的是An
2023-06-05
想自学开发手机app
随着智能手机技术的不断发展,手机应用程序已经成为人们生活中必不可少的一部分。许多人可能会想要自学开发手机应用程序,以便创造自己的应用或为企业开发应用。本文将介绍如何自学开发手机应用程序,包括需要学习的编程语言和工具,以及如何入门和深入学习。1. 编程语言开
2023-05-31
如何自己制作一个答题库app
制作一个答题库app可以分为以下几个步骤:1.确定需求和功能在开始制作app之前,首先需要明确自己要做一个什么样的答题库app,要有哪些功能。一般来说,答题库app要有以下几个基本功能:用户注册和登录、题库浏览、刷题、错题集、收藏夹、排行榜等。2.设计数据
2023-05-30
企业自己开发的app怎么入科目
企业自己开发的app,当然也会进入公司的科目中,因为app是企业的一种资产,与其他资产一样需要计入科目进行管理和记录。下面我们就来介绍一下企业自己开发的app如何入科目。首先需要明确的是,企业自己开发的app,与外部采购的软件或系统不同,它的资产价值很难定
2023-05-30
可以自己制作水果app吗
制作水果App需要了解一些基本的前端开发和后端开发知识。前端开发包括HTML、CSS和JavaScript,用于设计应用程序的用户界面。后端开发则用于开发应用程序的服务器端逻辑和数据存储方案。水果App的设计思路应包含以下几个方面:1. 界面设计首先,需要
2023-05-30
可以做自己水印的app
自己制作水印有很多好处,首先它可以有效防止自己创作的图片被盗用或滥用,其次它可以在照片上添加个人专属的标识,并提高自己的品牌知名度。下面我将介绍一种做自己水印的 App 原理及步骤。一、App 的原理:制作水印的 App 大致分为两种,一种是在图片上添加文
2023-05-30
开发app内发行自己的小程序呢
在移动互联网时代,APP已成为人们使用手机最频繁的工具之一。而小程序也是越来越受欢迎的一种应用形态,相比于传统的App,它具有轻便、快捷、小巧的特点,用户无需下载安装即可使用,进一步提升了用户的使用效率和满意度。因此,很多企业和开发者会考虑将小程序引入到自
2023-05-30
app可以自己开发上传吗
App是移动设备上的应用程序,包括iOS和Android等系统。开发出App可以满足个人需求、商业目的需求,也为用户提供了更多丰富的使用场景,因此越来越多的人希望自己开发App。那么,App可以自己开发上传吗?本文将对App开发上传进行介绍。App的开发可
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1