龙空技术网

上班摸鱼必备|Python开发命令行斗地主

传智播客博学谷 31

前言:

此时同学们对“用代码写个斗地主”大约比较注意,我们都需要知道一些“用代码写个斗地主”的相关文章。那么小编在网上搜集了一些关于“用代码写个斗地主””的相关资讯,希望大家能喜欢,同学们快快来学习一下吧!

今天给大家带来的是如何上班如何高级摸鱼:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是没有时间限制,不仅可以喊上老板一起玩还能随时断点续玩

接下来简单讲讲如何使用python开发这样一个斗地主游戏,我们先来想想进行一场斗地主游戏所经历的过程:首先生成54张扑克,然后将这54张扑克随机发给三名玩家,每个玩家17张牌并保留三张底牌,接着从第一个玩家开始询问是否抢地主,如果成为地主则获得三张底牌,这样依次循环直到地主出现,之后就是根据出牌规则完成一系列的出牌动作,最先出完牌的人取得胜利并按照记分规则累积分数(欢乐豆)。

因为仅供自己娱乐使用所以不用做UI界面,不用登陆不用注册,不用分客户端、服务端以及一些消息传输等复杂的内容,简单来说只需要完成洗牌发牌出牌规则以及生成指定数量的机器人陪玩即可。因此我们仅使用纯python不依赖任何第三方库来开发。

洗牌与发牌的实现

洗牌与发牌是比较好搞定的,基本上使用python标准库random即可,比如生成牌库

import randomdef get_Card():    card_type = ['黑桃','红桃','方片','梅花']    card_values= ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']    n=1    cards = ['JOKER','joker']    for i in card_type:        for j in card_values:            cards.append((i+j))            n += 1    return cards

洗牌与发牌

def send_Card(cards):    print('开始洗牌')    wash_card = random.shuffle(cards) #使用shuffle打乱    print('开始发牌')     print('底牌为 : %s' %cards[0:3])     player1 = cards[3:20]    player2 = cards[20:37]    player3 = cards[37:54]     print ('player1 : '+ str(player1))    print ('player2 : '+ str(player2))    print ('player3 : '+ str(player3))

其他功能实现与使用

那么在打牌过程中的出牌与判定规则就很难去搞定了,于是只能求助GitHub大神,很遗憾大多数项目还是比较大型的交互式斗地主游戏开发,不满足我们的简单版需求,经过一番查找与修改最终整理出一份能够实现我们之前所提出的命令行的斗地主程序(没有依赖任何第三方库),来看看部分代码,例如判定两个玩家的出牌

def legal(cards1,cards2):  type1,number1 = cardtype(cards1)  type2,number2 = cardtype(cards2)  if type2 == "rocket": #火箭    return True  if type2 == "bomb":    if type1 == "bomb":      if number2[0] > number1[0]:        return True      else:        return False    else:      return True  if type1 == "single": #单牌    if type2 == "single":      if number2 > number1:        return True      else:        return False    else:      return False  if type1 == "pair": #对子    if type2 == "pair":      if number2[0] > number1[0]:        return True      else:        return False    else:      return False  if type1 == "3+1": #三带一    if type2 == "3+1":      if number2[0] > number1[0]:        return True      else:        return False    else:      return False  if type1 == "4+2": #4带2    if type2 == "4+2":      if number2[0] > number1[0]:        return True      else:        return False    else:      return False  if type1 == "straight": #顺子    if type2 == "straight":      if number2[1] == number1[1]:        if number2[0] > number1[0]:          return True        else:          return False      else:        return False    else:      return False######################其他规则

那我们生成的AI是按照什么样的规则出牌?(你可以修改ai.py部分代码调整规则)

分析手牌

先看是不是王炸看是不是炸弹,如果是对手的炸弹,能打就打再看是不是大于K,如果是队友出的,就过牌,否则就试着打掉,用炸弹如果对手手牌少于9张出大于K或者出的大于8张的飞机/顺子/连对有王炸/炸弹就用掉否则无脑跟 不用炸弹和火箭如果跟对方牌并且对方小于9张,没有1,2张的牌就拆2,3张的牌打自己出牌lastcard应该是[]若自己手牌小于5张,先出王炸,炸弹,最大牌再看下家手牌数量和阵营 同阵营出最小单/对 不同阵营出比他多的牌或者大牌

由于篇幅原因就不展示全部代码。在『传智播客博学谷』公众号后台回复斗地主即可下载全部源码。

使用也很简单,从命令行进入doudizhu文件夹执行python main.py即可。摸鱼时记得关掉声音或者删除源码中bgm相关代码。

当然想说没有bgm的斗地主是没有灵魂的斗地主,注意:若因上班斗地主被开除,概不负责~

标签: #用代码写个斗地主 #php斗地主源码