源码技术
php
java
python
Linux
当前位置:
首页
>
python
>学习手记 · 用Python制作简易斗地主
学习手记 · 用Python制作简易斗地主
2026-09-22 04:09:13
学习手记 · 用Python制作简易斗地主
我最近跟着网上的教程学Python,之前也写过爬虫,都是跑完程序打印一个结果就结束。写得多了,就想做个能反复运行、每次结果都不一样的程序。我平时偶尔会打牌,就选了做斗地主,打算先把洗牌、抽底牌、确定地主、发牌这一整套流程写出来。现在还是只在黑窗口打印输出,不过我还想做一个app图标,跑通程序那一刻,我觉得这已经算是自己做出来的一个小游戏半成品了。
代码是在python里写的,源文件名叫洗牌.py。一开始我用了♠♥♦♣这四个花色符号,一运行全是乱码。问过AI后才知道是终端编码不匹配,在程序开头加上sys.stdout.reconfigure(encoding="utf-8")后,这些符号才能正常显示。
注:上图15行——random.shuffle(cards)是在原地打乱列表,没有返回值。洗完牌之后cards里的顺序就已经变了,不会重新生成一副新牌。
组牌的逻辑我想了很久。一副牌不用一口气写出54个字符串,而是拆分出来:四种花色,点数从2到10再加上四个非数字牌JQKA,最后再补一对大小王。用两层循环就行,外层遍历花色,内层遍历点数,拼成♠2、♥A这种单张牌,最后把大小王加入牌组列表。组好牌后调用系统自带的功能random.shuffle(cards)把整副牌打乱,洗牌就完成了。
给地主还需要留三张底牌。我用random.sample(cards, 3)抽出三张作为地主牌,再循环把这三张从牌堆里删掉,避免发牌重复。地主是从A、B、C、D四个玩家里用random.choice模块随机选出来的,每次不一定是同一个当地主。
剩下的牌要发给四个人。我用下标i % 4来分配:余数0发给A,余数1发给B,余数2发给C,余数3发给D,就相当于围着桌子一张一张发牌。截图里显示的就是这段循环的后半部分。发完牌后有一行代码折腾了我很久:eval(dizhu).extend(dizhu_cards)。因为dizhu里存的是"A"这种字符串,没法直接往对应的牌组里加牌;eval模块会把它转成真正的列表变量,再把三张底牌补进地主的手牌里。最后我用f-string打印出地主底牌、地主身份和四个玩家各自的手牌。打印的时候我把四个人都写成了农民,其实其中一个已经是地主了,当时只是想先把牌输出出来看看逻辑对不对,对的话再改也不迟。
注:上图:30行——eval(dizhu).extend(dizhu_cards)这里dizhu存的是"B"这种玩家名字符串。eval("B")会找到名为B的手牌列表,extend把三张底牌一次性接到列表末尾。append一次只能加一张牌,三张底牌用extend更合适。
整个程序一共三十多行,用到了列表、嵌套循环、取余、随机数这些知识点。每次运行得到的牌序、底牌、地主都不一样。
对我来说,这就是从跟着教程做题,到自己写出一个打牌流程并询问AI问题的突破。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
终于有人把自学Python的顺序说清楚了......
【Linux openSUSE】Linux openSUSE轻松上手下载安装Linux 安装包+激活工具一步到位
最新文章
终于有人把自学Python的顺序说清楚了......
Python 3.15 新特性:TypedDict升级!终结字典类型混乱
Python 不可变类型作为函数参数传递特点
三升四Python现场实拍
Python time模块
Linux eBPF架构全景
Python的100蕞基础的语法,赶紧收藏!!
一张图告诉你Linux文件权限
UM新增Python接口
从零构建 Linux|09 进一步定制系统
热门文章
为什么 Linux 拔 U 盘不用"安全弹出"?
【系列】每天一个 Linux 命令(50) sudo命令
Python 办公:一键批量重命名文件名
一个用了半年的Python工具,为什么最后逼得我推倒重写?
Python 模块与包指南(上):自定义模块与导入
Python项目中API Key的安全存储
关于python程序与PLC联动的实现
《PHP 8.6 将迎来原生并发能力》学习笔记
告别手动复制粘贴:Python 一键合并100个Excel并生成对比报告
《Python 从入门到精通》149|数据分析小案例:用 Python 看懂一份销售数据
随机文章
10个月宝宝每天需要喝多少奶粉?
OpenSandbox Python SDK开发实战|代码全自动操控沙箱,无缝嵌入AI项目
Python编程题:26.P1888 三角函数
使用python bloomfilter实现大文本去重
Python学习记录7——条件判断
用Python操作Redis时踩过的那些坑,今天一次性说清楚
十个 Python 技术面试必考的装饰器题目,搞懂这些,面试官直点头.
Python小练习:通义出题+你验2道(附错误样例对照)
Python进阶教程:13_math 模块 —— 新手完全指南
【python3.7.0】python3.7.0setup软件安装步骤及安装包python软件带激活工具
谁在“盯上”你的住院记录?10行Python代码,揪出藏在数据里的秘密