自建斗地主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的程序代码,利用开发者平台和相关的SDK工具,在自己的服务器上搭建小说阅读服务,之后将客户端封装成APP程序上传至应用商店进行发布。下面详细介绍一下搭建自己的小说APP的步骤。1.选择自己的开发者平台和小说
2023-06-05
自己做的app怎么投入广告
做移动应用已经成为了现在很多程序员,设计师和投资人的热门选择。做良好的应用既可以增加收入,也可以提高品牌知名度和用户满意度。但问题来了,如何让人们知道我们的应用程序存在呢?在我们开始了解如何投放广告之前,我们需要了解一些术语。CPC(每次点击成本): 它是
2023-06-05
自己做的app不能横屏
如果你创建的应用程序没有横屏模式,可能是由于以下原因:1. 未设置横屏模式在开发应用程序时,需要在文件 AndroidManifest.xml 中设置应用程序的屏幕方向。如果没有设置横屏模式,那么应用程序只能使用竖屏模式。要设置横屏模式,需要在 Andro
2023-06-05
自己制作一个字典app
字典是学习语言的重要工具之一,如何制作一个字典APP呢?首先需要有一个单词库,可以从网上下载免费的单词库,或者自己收集整理。可以将单词及其解释存储在一个数据库中,该数据库可以用SQLite来实现。另外,需要对单词库进行索引,以加快搜索速度,如果使用 SQL
2023-06-05
怎么制作自己的外卖app
制作自己的外卖app不是一件简单的事情,需要考虑到许多因素,如外卖平台的运营方式、用户体验、支付结算等。在这篇文章中,我们将介绍制作自己的外卖app的基本原理和步骤。一、外卖APP的原理外卖APP主要分为两个部分,即前台和后台。前台是指用户使用的APP界面
2023-06-05
有什么app可以自己做封面
做封面是一件很有趣的事情,有时候我们发现好的图片没有封面,或者我们想自己DIY一张独一无二的封面。在这个数字时代,我们可以使用各种App来做封面,让我们的作品更加个性化和专业。下面我将介绍一些常用的App以及它们的原理和操作方法。1. CanvaCanva
2023-06-05
用什么app可以自己做字幕
字幕是指在屏幕下部或上部添加的文字,用于解释配合着视频画面中发生的情节和对话。在现在这个信息快速传递的时代,字幕可以帮助人们更好地理解和理解内容。因此,许多人希望自己能够做字幕。那么,用什么应用程序可以自己制作字幕呢?下面,我将为大家详细介绍一些应用程序。
2023-06-05
什么app可以自己制作题库软件
制作题库软件的最简单方法是使用现有的应用程序开发工具,例如AppInventor、Android Studio等。这些工具可让您在不必编写复杂代码的情况下构建应用程序。 下面是一些使用这些工具构建Android题库应用程序的基本步骤:第一步:选择合适的工具
2023-05-31
如何制作一个自己的app
想要制作自己的app,需要掌握一些基本的知识和技能。首先,你需要有一定的编程经验,熟悉一种或多种编程语言,如Java、Objective-C、Swift等。其次,你需要了解一些基本的移动端开发知识,如UI设计、数据存储和处理、网络通信等。一般而言,制作一个
2023-05-30
可以自己做手机脚本的app
作为一个具有丰富互联网知识的网站博主,我很乐意分享通过在手机上自己制作脚本的方法和原理。通过自己做手机脚本的app,你可以自己掌控代码和功能,实现自己的设想和目标,同时也能更好的维护和改进你的应用程序。首先,需要明确一点,手机脚本的app是指可以在手机上运
2023-05-30
北京自来水app怎么开发票
北京自来水公用事业单位,向用户提供自来水、水费缴纳、开具水费发票等服务。随着科技的快速发展和智能手机的普及,越来越多的人们喜欢使用移动app完成各项生活服务,如何在北京自来水app中开具水费发票呢?下面我来详细介绍一下。一、原理在北京自来水app中开具水费
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1