自建斗地主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网站相关的it服务
随着移动互联网的发展,越来越多的人开始寻找自己的应用程序,为了让用户更加方便的接触应用程序,很多网站开始提供自建app网站相关的IT服务。自建app网站相关的IT服务往往要考虑很多方面,例如网站的类型,运营方式,营销方案等等。今天我们将会详细介绍这些方面。
2023-06-05
自己做的在线云播安卓app
在线云播安卓app是一种能够方便用户在线观看视频的应用程序。它可以支持网络视频播放,缓存和下载功能,并且可以随时调节视频的清晰度,更好地满足用户的观看需求。因此,自己制作一个在线云播安卓app,不仅可以提高自己的编程能力,同时也能够满足用户的需求。首先,制
2023-06-05
自学java什么时候可以开发app
学习Java编程语言可以让你成为一名合格的Android开发者,因为Android开发是基于Java语言的。在学习Java编程语言时,最重要的是理解Java平台、Java开发工具和Java编程语言的基础知识,包括Java的语法、面向对象编程、数据类型、控制
2023-06-05
自己的网站免费app怎样制作
如果你是一个网站博主,想要给自己的网站制作一个免费的app,这篇文章将会为你提供制作免费app的原理和详细介绍。首先,我们需要了解制作app的工具和技术。大部分app的制作都是通过原生开发(Native Development)、网页容器(Web Cont
2023-06-05
自己制作化妆品的app
随着人们对于生活品质和身体健康的重视,越来越多的人开始关注自己使用化妆品的成分和安全性。所以,自己制作化妆品的概念越来越流行。而自己制作化妆品的app就是方便用户自己定制化妆品配方、生产、检验等一整套流程的应用程序。工作原理自己制作化妆品的app并不完全依
2023-06-05
怎么自己做不需要联网的app软件
要做一个不需要联网的app软件,首先需要明确一点,那就是所有的app软件都需要些许的联网,因为安装及更新都需要从网络中下载最新的信息。但是可以通过设计,让app程序在离线状态下也可以使用。这种应用程序通常被称为离线应用程序(offline app)或本地应
2023-06-05
小米手环自己开发app
小米手环是一款十分流行的智能手环设备,用户可以通过配合小米运动APP使用,记录自己的运动数据,了解自己的运动情况。但是,对于一些需要个性化定制的用户来说,他们可能希望自己能够定制一款适合自己的运动APP,并将数据通过小米手环进行同步。这时,就需要自己去开发
2023-05-31
实体商业自建的app必死无疑吗
实体商业自建的app虽然在一定程度上可以提升用户体验和增加与客户的互动,但是它面临着很多的挑战和限制,所以说必死无疑还需要深入的探讨。首先,实体商业自建的app需要花费大量的时间和资金,从一个初始阶段到最终的产品上线,需要经历需求分析、UI设计、开发和测试
2023-05-31
日语自建单词本app
日语自建单词本app是一款便于学习日语单词的手机应用程序。该应用程序提供了日语单词的添加、编辑、删除等功能,可以让日语学习者自主创建自己的日语单词本。本文将从原理和详细介绍两个方面来介绍该应用程序。原理方面:日语自建单词本app的原理是通过数据库技术来存储
2023-05-30
如何自己制作购物app
制作购物APP可以满足自己或商家在移动端的购物需求。APP制作一般需要开发者进行技术开发,但是有一些简单的制作平台可以让非技术人员轻松实现APP的制作。本文将为大家介绍如何自己制作购物APP的原理和制作方法。一、购物APP的原理商家可以通过开发或购买购物A
2023-05-30
app前端自己开发后端外包教程
在应用程序开发中,前端开发与后端开发是两个不同的过程,通常情况下,开发者可能只有其中之一的知识技能,这就需要外包一个专业的后端开发人员。然而,对于一些小型项目或团队,前端开发者也可以自己开发后端,节省成本并获得更多的控制权和自由性。接下来,本文将介绍如何通
2023-05-30
app开发自学blog
现在的移动端市场越来越火热,越来越多的人选择自学并尝试开发自己的移动端应用程序。然而,学习一项新技能并将其应用到实践中并不是那么容易的事情。以下是一些关于自学app开发的建议和指南。1. 学习编程语言在开始任何项目之前,你需要学习编程语言。在移动端开发中,
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1