首页 > 其他分享 >有趣代码:马里奥吃蘑菇

有趣代码:马里奥吃蘑菇

时间:2024-02-04 15:01:57浏览次数:23  
标签:10 set mushroom mario 蘑菇 ax 有趣 马里奥

1、Matplotlib生成动画

Matplotlib 不仅可以绘图, 还可以生成动画。负责生成动画的函数是 FuncAnimation, 使用前需先将其导入:

from matplotlib.animation import FuncAnimation

指定位置嵌入图片

控制图片的位置和大小是由 origin 和 extent 两个参数来实现的。origin 有 “upper” 和 “lower” 两个取值,决定了图片是正着的还是倒着的。extent=(L, R, B, T) 则决定了图片的边界坐标,L, R, B, T 分别代表了图片的最左端,最右端,最底端,最上端的坐标。

下面一个 demo 演示了如何设置图片的指定位置。超级马里奥位于一个 10x10的格子中,他需要从左下角走到右上角,从而吃到能让自己变大变强的蘑菇。

 1 import matplotlib.pyplot as plt
 2 from matplotlib.animation import FuncAnimation
 3 import numpy as np
 4 from PIL import Image
 5 
 6 # 读取图片
 7 mario_img = Image.open('mario.png')
 8 mushroom_img = Image.open('mushroom.png')
 9 
10 # 设置画布
11 fig, ax = plt.subplots()
12 plt.axis('off')
13 
14 ax.set_xlim(-0.5, 10.5)
15 ax.set_ylim(-0.5, 10.5)
16 
17 ax.vlines(np.arange(11), 0, 10)
18 ax.hlines(np.arange(11), 0, 10)
19 
20 # 画蘑菇
21 mushroom = ax.imshow(mushroom_img, extent=(9, 10, 9, 10))
22 
23 # 画马里奥
24 mario_x = 1
25 mario_y = 1
26 mario = ax.imshow(mario_img, extent=(mario_x - 1, mario_x, mario_y - 1, mario_y))
27 
28 
29 def move():
30     global mario_x, mario_y
31     if mario_x == 10 == mario_y: # 吃到蘑菇了噢
32         mario_x = mario_y = 1
33         return True
34     elif mario_x == 10:
35         mario_y += 1
36     elif mario_y == 10:
37         mario_x += 1
38     else:
39         if np.random.random() < 0.5:
40             mario_x += 1
41         else:
42             mario_y += 1
43 
44     return False # 还没吃到蘑菇呢!
45 
46 
47 def init():
48     pass
49 
50 def update(frame):
51     mario.set_extent((mario_x - 1, mario_x, mario_y - 1, mario_y))
52 
53     # 若吃到蘑菇则隐藏蘑菇,避免两张图片重叠,更好看一点
54     if move():
55         mushroom.set_alpha(0)
56     else:
57         mushroom.set_alpha(1)
58 
59 
60 
61 ani = FuncAnimation(fig, update, frames=range(180), blit=False, interval=300,
62                               repeat=False, init_func=init)
63 
64 ani.save('mario_like_mushroom.gif')

效果如下:

 

可用图片:

                                    

 

                                                    

 

 

 

 

 

 

标签:10,set,mushroom,mario,蘑菇,ax,有趣,马里奥
From: https://www.cnblogs.com/Zhouce/p/18006176

相关文章

  • [经验] 天王盖地虎,小鸡炖蘑菇什么意思
    1、天王盖地虎的意思“天王盖地虎,小鸡炖蘑菇”,这是我们小时候玩抢红包的时候常常用的一句口号。但是这句看似无意义的话背后却有着深刻的文化内涵。首先,天王盖地虎和小鸡炖蘑菇是两个要素组成的,而这两个要素都代表着一种实力或者地位。天王盖地虎代表着天大的威严和力量,而小鸡炖蘑......
  • 鹅厂有料有趣的程序员交流圈重磅官宣!加入立享福利
    腾讯云存储团队联合腾讯云开发者社区,为大家送出专属福利!腾讯云开发者社区重磅上线海量社群,覆盖开发者技术学习交流、工作成长、生活分享等多元场景需求,用最新鲜的内容,最好玩的互动,与你一起共创最有料有趣的技术人交流圈。扫描下方海报二维码,立即加入有料有趣的程序员交流圈......
  • 一个十分有趣的文档页面
    我的博客里有一个devops页面,专门用来汇总我写过的一些DevOps运维自动化相关的技术文章,页面很简单,就是一段文字描述加上一堆的文章链接,像下面这个样子一直以来这个页面都安安静静的存在着,访问者甚少,像是一个默默无闻没人关注的孩子,躲在角落里,偶尔有人来看上两眼,也会因为他的丑陋......
  • 亚马逊的全新AI工具,让购物变得更有趣!
    Ai工具集导航(Ai-321.com)亚马逊在最新的举措中推出了一款令人惊叹的生成式人工智能(AI)工具,旨在帮助购物者更轻松地获取产品信息。这个创新性的功能可以在几秒钟内回答购物者有关产品的问题,既省时又方便。来源于电子商务研究公司MarketplacePulse的消息显示,亚马逊将继续对这一工具进......
  • 有趣的小练习(持续更新~)
    有趣的小练习使用生成器实现range()函数defmy_range(start,stop=None,step=1):ifnotstop:#如果只传了一个参数,就调整参数stop=start#相当于start=0,stop=传的值start=0whilestart<stop:#只要start小于stop就执行输出语句......
  • 还不敢写多线程程序?看看Go如何让并发控制简单有趣
    还不敢写多线程程序?看看Go如何让并发控制简单有趣原创 萤火架构 萤火架构 2024-01-1219:50 发表于北京 听全文所谓并发控制,就是同一程序进程内不同线程间访问相同资源时的冲突处理,有时也称为进程内同步。比如一个简单的内存累加计数操作,如果不进行同步,不同的线程可......
  • 一个有趣的浏览器插件“猫抓”
    一个有趣的浏览器插件“猫抓”猫抓是一款非常好用的浏览器插件,它能抓取几乎所有chrome内核浏览器的网页视频链接数据。猫抓插件可以在任意网页抓取任意视频数据并且一键抓取保存获取您需要内容,操作起来简单方便,下载内容可以保存本地电脑。猫抓功能介绍  猫抓Chrome插件是一款......
  • 摸鱼摸出来的vue3+element-plus毒蘑菇后台管理:新标签页的实现。
    在浏览器中,点击标签页右边的加号可以新加一个标签页,所以,在毒蘑菇后台管理(简称毒蘑菇儿)中也可以这样操作。点击标签页右边的+按钮就可以打开一个新标签页了,可以打开多个,互不冲突,在新标签页中可以搜索你想要打开的页面,点击后会将该标签页替换成你点击后的页面(跟浏览器操作一致)。点......
  • 超级玛丽 马里奥 马力欧兄弟
    超级马力欧兄弟》是任天堂情报开发本部开发的FamilyComputer横版卷轴动作游戏,为《超级马力欧兄弟》系列的第1作,于1985年9月13日发售。 [1]在游戏中,玩家将操纵一名叫做马力欧的水管工(如果是双人模式,则另一位玩家操作马力欧的弟弟路易吉)跋山涉水、闯过一关又一关,最终救出被酷霸王......
  • 一些有趣和实用的Java开发技巧和编码技巧
    当涉及到Java开发技巧和编码技巧时,有一些有趣和实用的技巧可以帮你提高效率和代码质量。以下是一些示例:1.使用Lambda表达式List<Integer>numbers=Arrays.asList(1,2,3,4,5);//使用Lambda表达式计算偶数的总和intsum=numbers.stream().(n->n%20......