自建斗地主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可以帮助学习者更好地进行语音、语言等英语学习,提高学习效率和成果。下面,我们将详细介绍原理和步骤。**原理**构建英语语料库的原理是从网络上采集英语文章和音频资源,并通过工具进行处理和整合,形成可供学习的语料库。主要包含以下步骤:1.
2023-06-05
自己做相册的app排版
自己做相册的app排版需要考虑用户的体验感和页面美观度,以下是一些原理和详细介绍。1. 根据用户需求制定功能在设计相册排版app时,首先需要考虑用户的需求和使用场景。用户为什么要使用这款app,它能够满足用户哪些需求?在摸清楚了用户的需求之后,我们可以开始
2023-06-05
自己做的app怎么收款
一个应用程序的开发者,在提交他的应用程序到应用商店之前,必须决定明确的策略来收费,收益或者是维持其成本。通俗一点讲就是如何让用户用钱来支付被用来构建、编写应用程序的开发成本及运营费用。目前,移动应用程序通常通过应用商店提供连接和用户来实现购买。应用商店会收
2023-06-05
自己做一个app怎么做
制作一个应用程序(app)可以增加你的技能并且是一个好的创造性输出。虽然这听起来有点复杂,但是在这篇文章中,我将向你介绍自己制作一个app的方法,并告诉你需要什么技能和资源。1. 确定你的app类型和功能首先你需要决定你的app类型和功能。它应该是游戏还是
2023-06-05
自己开发app能控制小米家居吗
小米家居是一个基于智能硬件控制平台的智能家居解决方案,集成了小米智能家庭,小米智能设备等多个开放平台。同时,小米家居可以灵活地适应用户的个性化需求和家庭场景。那么,有没有可能自己开发一款app来控制小米家居呢?下面就来详细介绍一下。首先,要实现自己开发ap
2023-06-05
如何自建app开发平台
自建app开发平台是一个很有挑战的任务,需要考虑很多方面,包括技术选型、架构设计、用户体验等等。本篇文章将介绍如何自建一个app开发平台。第一步:选择合适的技术栈在选择技术栈时,需要考虑应用场景和目标用户。如果是要构建高性能的app开发平台,需要选择性能强
2023-05-30
如何自己做app中文版
想要做一款自己的app,无疑是一个良好的创意。不过,你需要了解一下这个过程是非常具体的,涉及到多个方面的知识和技能。以下是可以帮助你制作自己的 app 的详细介绍。1.选择平台首先,你需要选择一个 app 开发平台。常见的平台有 iOS 和 Android
2023-05-30
如何开发一款app自己可以编辑
开发一款可以自己编辑的APP需要有一定的前端开发基础和后端开发基础。下面将从原理和详细介绍两个方面来说明。1.原理开发一款可以自己编辑的APP需要了解一下几个技术:1.1.后端技术后端技术是指用于处理APP数据的技术,通常有以下几种技术:- 数据存储:数据
2023-05-30
免费自建app
现在,我们大家都知道移动应用程序已经成为数字时代的重要组成部分。手机用户数量暴增,而新兴公司和初创企业越来越需要一个移动应用程序,以帮助他们在这个竞争激烈的市场中站稳脚跟。自建app不仅能节省成本,还能满足自己的需求。下面我将分享一下免费自建app的原理和
2023-05-30
个人独资企业自己做app上怎么操作
个人独资企业想要自己做app,需要具备基本的编程技能和相关的开发工具。下面我来详细介绍一下如何自己操作。一、明确需求和目标首先,个人独资企业需要明确自己的需求和目标,确定自己要做什么样的app,定位目标用户群体以及实现功能。这是开发app的基础和前提,也是
2023-05-30
app拉新怎么做到客户来找自己的
随着智能手机的普及,移动应用(APP)市场已经成为新的赛道。无论是新创公司、传统企业亦或是个人开发者,都在竭尽所能地争夺市场份额。如何让用户来主动找到自己,成为拉新的关键手段之一。下面将介绍几种常见并且比较有效的APP拉新方式。一、搜索引擎优化(SEO)搜
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1