自建斗地主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需要掌握以下几个方面的知识:1.编程语言自建app需要掌握至少一种编程语言,如Java、Objective-C、Swift、C++等。根据不同的操作系统和平台,选择不同的编程语言进行开发。2.开发工具开发一款app需要使用相应的开发工具,如Xco
2023-06-05
自己开发app好还是委托好
自己开发app和委托开发app都有各自的优缺点,下面我们具体介绍一下。自己开发app:优点:1.更多的掌控权:自己开发app,可以更好地掌握每一个细节和决策,从而确保app开发过程中的每一个环节和决策都符合自己的要求。2.更加符合公司需求:自己开发app可
2023-06-05
自己制作logo的app
如今,越来越多的人需要为他们的事业、产品或品牌创造一个logo。在过去,这可能需要雇用一名专业设计师完成,但是现在随着技术的发展,其实你可以使用自己的手机或平板电脑上的app轻松完成logo的设计,接下来我将为你介绍自己制作logo的app的原理或详细介绍
2023-06-05
自己制作applepen
Apple Pen是一支被广泛使用的智能笔,可以在iPad、iPhone和其他设备上进行手写笔记和涂鸦。但是,如果你不想花大量的资金购买一只Apple Pen,那么你可以尝试自己制作一支。在这篇文章中,我将详细介绍如何制作自己的Apple Pen。首先,你
2023-06-05
自定义符号制作app
自定义符号制作app可以帮助用户制作自己的个性化符号,符合自己的风格和需求。下面是其制作原理或详细介绍。首先,自定义符号制作app需要具备基本的图形编辑功能,能够让用户在软件内绘制自己的符号。用户可以基于软件自带的工具来绘图,比如画笔、形状工具、填充工具等
2023-06-05
制作虚拟自己人物app
虚拟人物app是一种利用人工智能、计算机视觉、语音识别等技术制作的应用程序。通过该应用程序,用户可以创建虚拟人物,并与其进行交互。虚拟人物app通常包括人物设计、语音合成、图像识别、自然语言处理等多个模块,相互配合实现各种功能。虚拟人物的制作过程主要包括以
2023-06-05
怎样制作二维码跳转自己app
二维码是一个使用广泛的编码形式,旨在将大量信息压缩到相对小的空间中。随着移动设备的广泛使用,现在常见的二维码是一种可以使用手机扫描并返回链接或信息的图像。许多公司和个人使用二维码作为他们的业务宣传、广告和跨设备传输信息的手段。因此,制作二维码跳转自己app
2023-06-05
怎么制作自己的app并上架手机上的链接码
要制作自己的App并上架到手机上,一般需要以下步骤: 1.确定App的类型和功能,根据自己的需求和技能,选择适合自己的App类型和功能模块。最好先做好流程图和概念设计,考虑产品的优劣性和竞争力。2.选择开发平台,有很多开发平台供您选择,其中比较流行的是An
2023-06-05
青柠手帐app怎么用自由画笔做
青柠手帐app是一款非常受用户欢迎的手账应用软件,它的自由画笔功能是最受用户关注和欢迎的功能之一。通过自由画笔功能,用户可以像在纸上一样自由绘画,创作出更多独特的手账设计和灵感。本文将向大家介绍青柠手帐app自由画笔的原理和详细操作方法。一、自由画笔的原理
2023-05-30
开发app自己开还是外包
在开发一个APP时,有两种选择:自己开发或向专业团队外包。自己开发可以提高控制度和节约成本,但也有可能增加时间、成本和风险。外包可以减轻压力、缩短上市时间和保证质量,但也需要付出更高的成本和更多的配合工作。在选择自己开发或外包之前,需要深入了解两种方法的原
2023-05-30
安卓app开发自学
Android App开发是应用程序开发的一种形式,和其他形式的应用程序开发一样,需要掌握一定的理论知识和技术实践,才能设计出优秀的应用程序。如果你想自学Android App开发,下面是一份详尽的指导。1. Java基础知识Java 是 Android
2023-05-30
adobe公司开发自拍app
Adobe公司开发了一款名为Adobe Photoshop Camera的自拍应用程序。Adobe Photoshop Camera(简称:PS Camera)是基于人工智能技术的一款自拍应用,它使用了Adobe Sensei人工智能技术,通过利用计算机视
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1