上班摸鱼系列|Python开发命令行斗地主
共 5409字,需浏览 11分钟
·
2021-03-17 13:36
前言
大家好,欢迎来到 Crossin的编程教室 !
今天给大家分享一个mini游戏案例:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐?关键是没有时间限制,可以随时断点续玩。赶紧喊上老板和产品经理一起开一局吧
先来看个效果:
因为仅供自己娱乐使用所以不用做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的斗地主是没有灵魂的斗地主。(注意:若因上班斗地主被开除,本公众号概不负责)
祝大家工作愉快!
如果文章对你有帮助,欢迎转发/点赞/收藏~
_往期文章推荐_