专栏首页Crossin的编程教室上班摸鱼系列|Python开发命令行斗地主

上班摸鱼系列|Python开发命令行斗地主


前言

大家好,欢迎来到 Crossin的编程教室 !

今天给大家分享一个mini游戏案例:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐?关键是没有时间限制,可以随时断点续玩。赶紧喊上老板和产品经理一起开一局吧

先来看个效果:

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

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

洗牌与发牌的实现

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

import random
def 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的斗地主是没有灵魂的斗地主。(注意:若因上班斗地主被开除,本公众号概不负责)

祝大家工作愉快!

如果文章对你有帮助,欢迎转发/点赞/收藏~

作者:刘早起早起

来源:早起Python


本文分享自微信公众号 - Crossin的编程教室(crossincode)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 上班摸鱼系列|Python开发命令行斗地主

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

    老肥码码码
  • GitHub 热点速览 Vol.27:程序员的自我救赎——GitHub 摸鱼

    以下内容摘录自 HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 |...

    HelloGitHub
  • 推荐几款优质 Chrome 摸鱼插件,带你畅快划水

    可以自定义几个赖皮的网站,通过 Ctrl + S 快捷键(也可以通过修改源码,自定义)快速打开目标网站,开始一天的摸鱼

    AirPython
  • 摸鱼神器-VS Code秒变身小霸王游戏机

    之前一彩虹屁的插件,一边打码一边bungbung,在github上火了起来,程序鼓励师都要失业了的 ,自己革自己的命

    itclanCoder
  • 周末请看:如何用最笨的办法,实现自我技术提升?

    搞我们这行的,需要不断学习,不断总结,否则,我们很快就要被社会所淘汰。由于,最近很多人私下和我讨论说:“我到底该怎么学习呢?”。东西倒是收藏了不少,微信收藏室,...

    田维常
  • 程序员进阶之路 -- 算法刷题必备神器

    不少程序员提起算法可能都心惊胆战,但是又逃不过真香定理,因为会算法的程序员真的惹不起,先不说会算法的要比不会算法的薪资多好多,单是哪个思维逻辑能力就能甩开好大一...

    周三不加班
  • 学霸占据互联网过半江山

    用户1756920
  • 摸鱼神器,千万别让老板看见!

    打开vscode,在扩展商店输入小霸王进行搜索,点击右侧的安装按钮,就可以一键安装了。

    苏南
  • 在斗鱼IPO之前,这几个问题真应该弄明白

    被热心网友送上“GuabiTV”称谓的斗鱼要IPO了,斗鱼的自信,大概源于其2017年11月所宣布的“已进入完全盈利状态”,但不论如何,IPO不是靠嘴说就能完成...

    曾响铃

扫码关注云+社区

领取腾讯云代金券