pygame实现百变魔方
文章目录
- 日报 day 1
- 1.需要用到的python库
- 2.代码示例与运行结果
- 3.代码剖析
日报 day 1
1.需要用到的python库
今天学习制作了一个简易的魔方变色。
使用的库有:
- sys
- pygame
- numpy
- time
2.代码示例与运行结果
代码示例1
# -*- coding=utf-8 -*-
import sys
import pygame
import numpy as np
import timeclass EasyCube:def __init__(self, width=320, height=240, size=3, rect_size=60, window_name='百变魔方'):""":param width: 窗口宽度:param height: 窗口高度:param size: 魔方尺寸(3*3、4*4...):param rect_size: 小方块的尺寸:param window_name: 窗口名"""self.width = widthself.height = heightself.size = sizeself.window_name = window_nameself.rect_size = rect_sizeself.start_x, self.start_y = self.get_start_position()pygame.init()self.screen = pygame.display.set_mode((self.width, self.height), 0, 32)pygame.display.set_caption(self.window_name)self.background = pygame.image.load('./background.jpg').convert()def get_start_position(self):""":return:能让魔方显示在屏幕中央的起始坐标。"""return(self.width / 2 - (self.rect_size * self.size) / 2,self.height / 2 - (self.rect_size * self.size) / 2)def event_loop(self):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()def run(self):while True:pygame.display.update()self.screen.blit(self.background, (0, 0)) # 画背景图self.event_loop()time.sleep(0.5) # 延时0.5秒for row in range(self.size):for col in range(self.size):color = tuple(np.random.randint(0, 256, (1, 3))) # 获取随机颜色pygame.draw.rect(self.screen, color,(self.start_x + 60 * col, self.start_y + 60 * row, self.rect_size, self.rect_size))if __name__ == "__main__":cube = EasyCube(640, 480, size=5, window_name='小方块')cube.run()
运行截图:
图1.会变色的方块
因为是截图,所以看不到方块颜色变化的过程。
3.代码剖析
pygame.init()
初始化所有导入的pygame模块,为硬件初始化做准备。
self.screen = pygame.display.set_mode((self.width, self.height), 0, 32)
==pygame.display.set_mode()==有4个参数:
size:一个元组(窗口宽度,窗口高度),表示分辨率
flags:具体意思看下表
标志位 功能 FULLSCREEN 创建一个全屏窗口 DOUBLEBUF 创建一个“双缓冲”窗口,建议在HWSURFACE或OPENGL时使用 HWSURFACE 创建一个硬件加速的窗口,必须和FULLSCREEN同时使用 OPENGL 创建一个OPENGL渲染的窗口 RESIZABLE 创建一个可以改变大小的窗口 NOFRAME 创建一个没有边框的窗口
3.depth:色深,最好不用传递该参数,因为pygame会根据当前操作系统选择最好和最快的颜色深度,不过我还是传了一个参数32。
==pygame.display.set_mode()==方法会根据传入的参数,指定显示类型,创建并返回一个surface对象。
pygame.display.set_caption(self.window_name)
==pygame.display.set_caption()==方法用于设置当前窗口的标题。
while True:pygame.display.update()self.screen.blit(self.background, (0, 0)) # 画背景图self.event_loop()time.sleep(0.5) # 延时0.5秒for row in range(self.size):for col in range(self.size):color = tuple(np.random.randint(0, 256, (1, 3))) # 获取随机颜色pygame.draw.rect(self.screen,color,(self.start_x + self.rect_size * col, self.start_y + self.rect_size * row,\self.rect_size, self.rect_size))
要想让窗口不会一闪而过,需要设置一个死循环(while True)。
self.background = pygame.image.load('./background.jpg').convert()
self.screen.blit(self.background, (0, 0)) # 画背景图
这两句代码用于设置窗口的背景图片。
==pygame.image.load()==方法用于加载图片,传入参数是图片所在路径(可以是相对路径,也可以是绝对路径,推荐使用相对路径,因为我们的程序可能会在不同的主机上运行,到时候绝对路径就会发生变化)。
==convert()==函数用于将图像数据转换为Surface对象,不过这个函数即使我们不写,pygame也会帮我们处理。
==blit()==函数:第一个参数是一个surface对象,第二个参数是左上角的位置(窗口内部左上角顶点位置),也可以是其它值。
pygame.display.update()
该方法用于刷新屏幕,否则屏幕上不会有什么变化的。
time.sleep(0.5) # 延时0.5秒
用于延时,不过延时期间,该窗口的事件循环队列也会暂停掉,也就是说,在这0.5秒期间,关闭窗口,移动鼠标,击打键盘都不会被响应。
for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()
事件:鼠标移动事件、鼠标点击事件、键盘击打事件、按下关闭按钮事件等。
在pygame中,所有的事件都放到一个队列里。我们这里做的是对事件队列进行轮询,判断事件类型是否为退出程序,是的话调用==sys.exit()==结束程序。否则,继续事件循环。
这里使用get()来处理所有事件。其它事件处理方法还有wait()和poll()。
color = tuple(np.random.randint(0, 256, (1, 3))) # 获取随机颜色
获取颜色元组(比如(0,255,255))。
由==np.random.randint()==方法生成,这里生成1行3列,取值范围位于0-256之间的随机数。返回类型是ndarray。
[0, 256)取值范围是左闭右开。
该函数返回的是ndarray,无法直接使用,需要转换成元组类型。
tuple(ndarray)进行转换。
pygame.draw.rect(self.screen,color,(self.start_x + self.rect_size * col, self.start_y + self.rect_size * row,self.rect_size, self.rect_size))
pygame.draw.rect(Surface, color, Rect, width=0)
该方法在Surface上画一个矩形,color是一个元组,用来表示rgb。Rect是矩形坐标,也是一个元组,包括(左上角顶点X坐标,左上角顶点Y坐标,矩形宽度,矩形高度)。width是线宽,这里不管它。
还有其它各种图形的绘制函数:
- rect 绘制矩形
- polygon 绘制多边形
- circle 绘制图
- ellipse 绘制椭圆
- arc 绘制圆弧
- line 绘制线
- lines 绘制一系列的线
- aaline 绘制一根平滑的线
- aalines 绘制一系列平滑的线
点X坐标,左上角顶点Y坐标,矩形宽度,矩形高度)。width是线宽,这里不管它。
还有其它各种图形的绘制函数:
- rect 绘制矩形
- polygon 绘制多边形
- circle 绘制图
- ellipse 绘制椭圆
- arc 绘制圆弧
- line 绘制线
- lines 绘制一系列的线
- aaline 绘制一根平滑的线
- aalines 绘制一系列平滑的线
pygame实现百变魔方相关推荐
- 蔡明机器人对比_“百变”蔡明:一个拥有性感身材的“小品天后”!
[免责声明]文章来源为网络,版权归原作者所有.如侵权请联系主编qq邮箱2942439579@qq.com:或者在平台里面留言我们会尽快处理删除:我们对文中观点保持中立,仅供参考.交流之目的. 来源:网 ...
- 世界上最百变的人不是女友,竟然是......
问:"这世上最百变的人是谁?" 答:"女友." 不好意思你出局了. 正确答案是:"老妈!" 老妈才是走在朋友圈前端的弄潮儿. 我的老妈造型百 ...
- 自由自在休闲食品意式手工冰淇淋 百变不离健康
据说冰淇淋最早的发展史是在中国的唐朝末期,最初人们开始在夏天制冰.到了宋代,商人们开始在冷食里加上水果或果汁.发展到元代,有人甚至在冰中加上果浆和牛奶.到了13世纪的时候,马可.波罗将元代这种制造冰淇 ...
- 百变方块java代码_多牛百变方块
应用介绍 多牛百变方块-澳门方块,绝对是一款不容错过的方块世界休闲小游戏!新增的六边形消除frvr玩法,在拖动模式的基础上进行改良,虽说是去除了横竖消除的限制,但是比传统方块世界的玩法更需要动脑动手! ...
- 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...
乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚 2019-06-27 07:30:00 32点赞 67收藏 11评论 又又又见面了各位值友,618期间,我入手了两套Lego 3107 ...
- 困住黑猫 html5,百变大侦探白狐凶手是谁 百变大侦探白狐密室密码
百变大侦探白狐凶手是谁 百变大侦探白狐密室密码,白狐 百变大侦探 百变大侦探白狐的相关资源如下: 百变大侦探白狐凶手是谁 百变大侦探白狐真相解析 剧本真相 凶手解析 死者死亡时间在13点到14点之间. ...
- c语言百变图形,百变图标app官方版-百变图标更换图标app下载v1.0.0-西西软件下载...
百变图标更换图标app是一款非常好用的手机软件图标更换手机主题壁纸美化软件,在百变图标更换图标app上用户可以看到非常多的个性化的制作方式,可以满足你的一切的要求,感兴趣的朋友赶紧下载百变图标更换图标 ...
- 百变小鹿机器人金鸡奖登场,成为首个走上红毯的机器人
11月28日,万众期待的"第33届中国电影金鸡奖闭幕式颁奖典礼"在厦门海峡大剧院如期而至,再度成为焦点话题.今年的金鸡奖因为疫情原因显得格外特殊,在主办方的精心策划下,闭幕式与颁奖 ...
- Windows 镂空图标,“百变硬汉”
Windows 镂空图标,"百变硬汉" 小生是电子专业的,后来转为自动化专业,计算机是我吃饭的家伙,整天面对着她,一致的图标不乏略显单调,后来我意识到我是工科男,怎么能单调?搞起, ...
最新文章
- C#之值类型和引用类型
- ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
- 100w氮化镓充电器_SHARGE闪极-100W大功率氮化镓充电器体验
- ITK:平移一个网格
- 《看门狗》真人版跑酷!
- JavaScript V8引擎编译
- 福特打造自动驾驶汽车,你的专属安全智能护卫
- 电子秤连接_电子秤称重仪表故障与维修
- stm32数据手册boot_stm32f103中文手册.pdf
- 89C51最小系统典型应用
- 系统全面讲解word中选择性粘贴命令
- OpenNLP 命令行
- 解决height:100vh超出屏幕高度的问题
- 简单典型二阶系统_MIT—微分方程与线性代数笔记2.1 二阶常微分方程
- python小游戏 走迷宫小游戏设计与实现
- 《Hexo: 从零开始编写自己的主题》1. Hexo概述以及Hexo工作原理
- 用 C# 实现独占音频设备降低其它程序的音量
- IT傻博士-CCNA课程在线视频(1-5)
- iPhone手机经常有些APP图标前面有个小云朵,点击图标后,进行转圈下载,提示正在载入......
- Android开源的精美日历控件,热插拔设计的万能自定义UI,你值得拥有