自建斗地主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的原理和详细实现方法。1. 原理这个app主要基于Adobe Flash的原理,即用户可以通过绘制工具、时间轴和关键帧来创建动画。在app中,用户
2023-06-05
自己做手机app难吗
随着移动设备的普及以及移动互联网的迅速发展,手机应用程序成为人们不可或缺的一部分。 如今,无论是个人还是企业,都在考虑开发自己的手机app。但是,对于没有编程经验的人来说,自己开发一个手机app可能会感到有些困难。那么自己做手机app到底难不难呢?简单来说
2023-06-05
自己做一个app要花多少钱和多少人
自己做一个app的费用和人力成本取决于多种因素,如应用的类型和功能、目标受众、开发平台、开发周期、人工成本等等。下面,将对这些方面进行详细介绍。1. 应用的类型和功能应用的类型和功能是影响费用和人力成本最重要的因素之一。不同类型的应用需要不同的功能和特性来
2023-06-05
自己是否可以开发app
当今时代,移动应用程序已成为人们日常生活中必不可少的一部分。很多人都希望能将自己的想法变成一款实用的、有趣的移动应用程序。因此,越来越多的人开始考虑自己开发移动应用程序。那么,自己是否可以开发移动应用程序呢?下面,我将从以下几个方面详细介绍。1.确定你的应
2023-06-05
自己怎么做一个app题库
要做一个app题库,需要考虑以下几个方面:数据库设计、数据录入、筛选、排序、搜索等。下面我来详细介绍一下。一、数据库设计首先要设计好数据库,一个好的数据库设计能够使得后续的数据操作更加方便、快捷、准确。在设计数据库的时候,需要确定题库中的题目的种类,根据种
2023-06-05
自己开发一个借款app
随着互联网的迅速发展,借款app已经成为了人们日常生活中很重要的一部分。这些app不仅可以帮助人们解决短期资金需求,而且可以省去许多传统银行申请贷款的繁琐程序。为了满足用户的需求,许多互联网公司都推出了自己的借款app。本文将介绍如何开发一个借款app。第
2023-06-05
自己开发一个app
App(Application)是指运行在手机、平板电脑等智能终端上的应用程序。现如今,随着智能终端的普及和人们生活方式的改变,App已成为我们日常生活的必需品。随着市场竞争的日益激烈,越来越多的人开始思考如何开发自己的App。本文就将介绍App开发的原理
2023-06-05
有什么app可以自己做题库
现在很多人都需要进行自主学习和培训,而自主学习的前提是需要一个好的学习资源,题库就是其中的重要组成部分。在这里,我推荐一些可以帮助你自己制作题库的APP。1. Quizlet(iOS / Android)Quizlet是一款可以帮助用户制作各种类型的学习卡
2023-06-05
学做自媒体什么选什么app平台好
近年来,随着移动互联网的发展,自媒体成为了越来越多人的选择。通过自媒体,人们可以实现自我表达、获取知识、获得粉丝和收入等目的。但是,在众多的自媒体平台中,该选择哪一个自媒体平台呢?下面,本文将介绍几个常见的自媒体平台,并对它们的优缺点进行比较。1. 微信公
2023-06-05
什么时候能自己给别人开发app
开发一个自己的APP可以是实现自我创新,拥有自己业务的最佳方式之一。虽然这听起来是一个很吓人的任务,但是现在有很多资源可以帮助你完成这个任务。下面我将详细介绍如何开发一款APP。1.分析市场需要首先,你需要分析市场需要,以确定你所开发的应用程序满足何种需求
2023-05-31
可以制作自己的动漫人物的app
要制作自己的动漫人物,需要掌握绘画技巧和3D建模技术。当然,对于非专业人士来说,可以借助一些现有的软件来完成自己的作品。一般来说,要制作自己的动漫人物的app,可以分为以下几个步骤:1. 确定角色的形象和性格在开始制作之前,需要先确定要制作的角色的形象和性
2023-05-30
可以自己制作app软件吗
针对你的问题,我来简单介绍一下制作APP软件的原理和具体步骤。需要注意的是,APP制作需要涉及到很多方面,包括但不限于UI设计、代码编写、服务器搭建等等。因此,现阶段的APP制作往往需要一个团队的合作完成。首先,我们来了解APP制作的原理。APP的背后是运
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1