羊了个羊,但是Python简(li)单(pu)版

简介: 如果你也像我一样,因为过不了关而不爽,不如自己用 Python 来写一个简单版,想过几关过几关

零基础python入门教程:python666.cn


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


要说最近最热门的游戏,那肯定是《羊了个羊》没跑了。



连续上了好几天热搜,火到连央视都来提醒谨防有人利用游戏之名诈骗。


但游戏爆火的另一面,也是无数玩家对于第二关难度的吐槽和不满。


如果你也像我一样,因为过不了关而不爽,不如自己用 Python 来写一个简单版,想过几关过几关


甚至还可以调个无解关卡去霍霍其他人


我这个版本不仅难度简单,代码也很简单,一共不到100行。代码已开源:


python666.cn/c/8


可下载,可修改,可商用,但公开发布需署名来源:Crossin的编程教室


做了一个同样简单的整活视频,供大家一乐:


稍微解释一下思路和代码:


1.


游戏用了 pygame-zero 这个库(所以才能这么少的代码实现),运行前需要安装 pgzero 库:

pip install pgzero

(或者通过 IDE 安装)


2.


运行时需要带上项目里的 imagesmusic 文件夹(你可以替换里面的图片和音乐)


3.


每一张牌是一个 Actor 对象(相当于一般游戏开发中的精灵类),具有种类(12种各12张)、层级状态(不可点/可点/已收集)等属性。


开局时随机打乱后摆放,根据种类显示不同图片。


除了最上层的牌可点,其余均不可点。


# 初始化牌组,12*12张牌随机打乱
ts = list(range(1, 13))*12
random.shuffle(ts)
n = 0
for k in range(7):    # 7层
    for i in range(7-k):    #每层减1行
        for j in range(7-k):
            t = ts[n]        #获取排种类
            n += 1
            tile = Actor(f'tile{t}')       #使用tileX图片创建Actor对象
            tile.pos = 120 + (k * 0.5 + j) * tile.width, 100 + (k * 0.5 + i) * tile.height * 0.9    #设定位置
            tile.tag = t            #记录种类
            tile.layer = k          #记录层级
            tile.status = 1 if k == 6 else 0        #除了最顶层,状态都设置为0(不可点)这里是个简化实现
            tiles.append(tile)


4.


判断鼠标点击的位置是否处于某张可点的牌内,是的话就从所有牌列表中移除,加到下方牌堆列表里。


然后遍历与这张牌有重叠的下一层牌,对于每张下层牌,反过来检查是否有其他上层牌覆盖它,如果没有,就把它变成可点。


for tile in reversed(tiles):    #逆序循环是为了先判断上方的牌,如果点击了就直接跳出,避免重复判定
    if tile.status == 1 and tile.collidepoint(pos):
        # 状态1可点,并且鼠标在范围内
        tile.status = 2
        tiles.remove(tile)
        diff = [t for t in docks if t.tag != tile.tag]    #获取牌堆内不相同的牌
        if len(docks) - len(diff) < 2:    #如果相同的牌数量<2,就加进牌堆
            docks.append(tile)
        else:             #否则用不相同的牌替换牌堆(即消除相同的牌)
            docks = diff
        for down in tiles:      #遍历所有的牌
            if down.layer == tile.layer - 1 and down.colliderect(tile):   #如果在此牌的下一层,并且有重叠
                for up in tiles:      #那就再反过来判断这种被覆盖的牌,是否还有其他牌覆盖它
                    if up.layer == down.layer + 1 and up.colliderect(down):     #如果有就跳出
                        break
                else:      #如果全都没有,说明它变成了可点状态
                    down.status = 1
        return


5.


下方牌堆达到7张为失败,上方没有剩牌则为胜利


# 达到7张,失败
if len(docks) >= 7:
    screen.blit('end', (0, 0))
# 没有剩牌,胜利
if len(tiles) == 0:
    screen.blit('win', (0, 0))


6.


本demo距离《羊了个羊》尚有改进空间,有兴趣的小伙伴可自行尝试扩展,包括但不限于:


  • 道具功能
  • 增加收牌的动画效果(可以用 pgzero 提供的 animate 方法)
  • 更多的关卡布局
  • 打包成exe
  • 游戏排行榜
  • 当然还有游戏最最核心的部分:观看广告


代码已开源:


python666.cn/c/8


可下载,可修改,可商用,但公开发布需署名来源:Crossin的编程教室


如果喜欢的话,感谢帮忙点赞转发,你的支持是我持续更新的动力!


我是Crossin,我们下个游戏见~


_往期文章推荐_


PONG-100行代码写一个弹球游戏

相关文章
|
IDE 开发工具 Python
羊了个羊,但是Python简(li)单(pu)版
不到100行实现羊了个羊python版
羊了个羊,但是Python简(li)单(pu)版
成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
|
5天前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
21 1
|
5天前
|
Python
Python编程作业五:面向对象编程
Python编程作业五:面向对象编程
20 1
|
1天前
|
机器学习/深度学习 数据处理 算法框架/工具
Python标准库与第三方库:强大的编程资源
Python标准库与第三方库:强大的编程资源
|
2天前
|
Python 容器
Python与GUI编程:创建图形用户界面
Python的Tkinter库是用于构建GUI应用的内置工具,无需额外安装。它提供了丰富的控件,如按钮、文本框等,让用户通过图形界面与程序交互。创建GUI窗口的基本步骤包括:导入Tkinter库,创建窗口对象,设置窗口属性,添加控件(如标签和按钮),并使用布局管理器(如`pack()`或`grid()`)来组织控件的位置。此外,可以通过绑定事件处理函数来响应用户操作,例如点击按钮。Tkinter还有更多高级功能,适合开发复杂GUI应用。
|
2天前
|
机器学习/深度学习 网络协议 数据库
Python编程实战:解决常见编程问题
```markdown Python编程入门指南:涵盖文件操作、列表操作、字符串处理、函数编写、异常处理、网络编程和数据库操作等实战案例。通过示例代码,学习如何读写文件、排序列表、转换字符串、创建函数、处理异常、构建TCP服务器及操作SQLite数据库,逐步掌握Python核心技能。 ```
|
2天前
|
机器学习/深度学习 人工智能 数据可视化
Python编程入门:从零开始探索编程的奇妙世界
这篇教程引导初学者入门Python编程,从安装Python开始,逐步讲解基本语法,如`print()`、变量、条件判断、循环以及自定义函数。文章强调了Python在数据处理、数据分析、人工智能和机器学习等领域的重要性,并鼓励学习者探索Python的广泛应用,开启编程之旅。
|
3天前
|
C语言 Python
专为编程小白设计的Python零基础入门教程,GitHub星标破W
市面上大多数技术类的书籍都着重于一步步的构建系统的知识体系,并不是说这样就是不对的,但这样按部就班的学习注定了需要花费大量的时间用来掌握“基础知识”,或死记硬背,或慢慢理解。 然而世界不会迁就你,而是在步步紧逼的告诉你要赶紧学完,赶紧找工作,赶紧挣钱,这才是你生活的基础。 今天给小伙伴们带来了一份《编程小白的第一步Python书》,这本书是专为零基础小白设计的,不会告诉“先学C语言,会更好理解Python”这种狗屁道理。而是先带你掌握搭建项目所用到的最少得知识,再真实的项目搭建中实践自己的所学,逐渐的完善知识体系
|
5天前
|
存储 人工智能 自然语言处理
Python编程实验五:文件的读写操作
Python编程实验五:文件的读写操作
13 0