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

简介: 不到100行实现羊了个羊python版

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

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

网络异常,图片无法展示
|

image.png

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

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

image.png

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

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

image.png

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

python666.cn/c/8

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

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

羊了个羊,但是Python简单版


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

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,我们下个游戏见~

对了,哦,对了,如果你想学Python,记得来看下我的《人人都能学Python》系列

零基础python入门 图文系列教程:python666.cn

相关文章
|
IDE 开发工具 Python
羊了个羊,但是Python简(li)单(pu)版
如果你也像我一样,因为过不了关而不爽,不如自己用 Python 来写一个简单版,想过几关过几关
成功解决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
|
6天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
6天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
6天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
8天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
7天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。
|
8天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
8天前
|
人工智能 数据挖掘 程序员
Python编程入门:从零到英雄
【10月更文挑战第37天】本文将引导你走进Python编程的世界,无论你是初学者还是有一定基础的开发者,都能从中受益。我们将从最基础的语法开始讲解,逐步深入到更复杂的主题,如数据结构、面向对象编程和网络编程等。通过本文的学习,你将能够编写出自己的Python程序,实现各种功能。让我们一起踏上Python编程之旅吧!
|
9天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。