文章目录

  • 日报 day 1
    • 1.需要用到的python库
    • 2.代码示例与运行结果
  • 3.代码剖析

日报 day 1

1.需要用到的python库

今天学习制作了一个简易的魔方变色。

使用的库有:

  1. sys
  2. pygame
  3. numpy
  4. 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个参数:

  1. size:一个元组(窗口宽度,窗口高度),表示分辨率

  2. 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实现百变魔方相关推荐

  1. 蔡明机器人对比_“百变”蔡明:一个拥有性感身材的“小品天后”!

    [免责声明]文章来源为网络,版权归原作者所有.如侵权请联系主编qq邮箱2942439579@qq.com:或者在平台里面留言我们会尽快处理删除:我们对文中观点保持中立,仅供参考.交流之目的. 来源:网 ...

  2. 世界上最百变的人不是女友,竟然是......

    问:"这世上最百变的人是谁?" 答:"女友." 不好意思你出局了. 正确答案是:"老妈!" 老妈才是走在朋友圈前端的弄潮儿. 我的老妈造型百 ...

  3. 自由自在休闲食品意式手工冰淇淋 百变不离健康

    据说冰淇淋最早的发展史是在中国的唐朝末期,最初人们开始在夏天制冰.到了宋代,商人们开始在冷食里加上水果或果汁.发展到元代,有人甚至在冰中加上果浆和牛奶.到了13世纪的时候,马可.波罗将元代这种制造冰淇 ...

  4. 百变方块java代码_多牛百变方块

    应用介绍 多牛百变方块-澳门方块,绝对是一款不容错过的方块世界休闲小游戏!新增的六边形消除frvr玩法,在拖动模式的基础上进行改良,虽说是去除了横竖消除的限制,但是比传统方块世界的玩法更需要动脑动手! ...

  5. 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...

    乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚 2019-06-27 07:30:00 32点赞 67收藏 11评论 又又又见面了各位值友,618期间,我入手了两套Lego 3107 ...

  6. 困住黑猫 html5,百变大侦探白狐凶手是谁 百变大侦探白狐密室密码

    百变大侦探白狐凶手是谁 百变大侦探白狐密室密码,白狐 百变大侦探 百变大侦探白狐的相关资源如下: 百变大侦探白狐凶手是谁 百变大侦探白狐真相解析 剧本真相 凶手解析 死者死亡时间在13点到14点之间. ...

  7. c语言百变图形,百变图标app官方版-百变图标更换图标app下载v1.0.0-西西软件下载...

    百变图标更换图标app是一款非常好用的手机软件图标更换手机主题壁纸美化软件,在百变图标更换图标app上用户可以看到非常多的个性化的制作方式,可以满足你的一切的要求,感兴趣的朋友赶紧下载百变图标更换图标 ...

  8. 百变小鹿机器人金鸡奖登场,成为首个走上红毯的机器人

    11月28日,万众期待的"第33届中国电影金鸡奖闭幕式颁奖典礼"在厦门海峡大剧院如期而至,再度成为焦点话题.今年的金鸡奖因为疫情原因显得格外特殊,在主办方的精心策划下,闭幕式与颁奖 ...

  9. Windows 镂空图标,“百变硬汉”

    Windows 镂空图标,"百变硬汉" 小生是电子专业的,后来转为自动化专业,计算机是我吃饭的家伙,整天面对着她,一致的图标不乏略显单调,后来我意识到我是工科男,怎么能单调?搞起, ...

最新文章

  1. C#之值类型和引用类型
  2. ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
  3. 100w氮化镓充电器_SHARGE闪极-100W大功率氮化镓充电器体验
  4. ITK:平移一个网格
  5. 《看门狗》真人版跑酷!
  6. JavaScript V8引擎编译
  7. 福特打造自动驾驶汽车,你的专属安全智能护卫
  8. 电子秤连接_电子秤称重仪表故障与维修
  9. stm32数据手册boot_stm32f103中文手册.pdf
  10. 89C51最小系统典型应用
  11. 系统全面讲解word中选择性粘贴命令
  12. OpenNLP 命令行
  13. 解决height:100vh超出屏幕高度的问题
  14. 简单典型二阶系统_MIT—微分方程与线性代数笔记2.1 二阶常微分方程
  15. python小游戏 走迷宫小游戏设计与实现
  16. 《Hexo: 从零开始编写自己的主题》1. Hexo概述以及Hexo工作原理
  17. 用 C# 实现独占音频设备降低其它程序的音量
  18. IT傻博士-CCNA课程在线视频(1-5)
  19. iPhone手机经常有些APP图标前面有个小云朵,点击图标后,进行转圈下载,提示正在载入......
  20. Android开源的精美日历控件,热插拔设计的万能自定义UI,你值得拥有

热门文章

  1. PADS ROUTER 使用技巧小记
  2. Java命令行调试程序
  3. 《离散数学及其应用》第七章 第一节
  4. 机器学习斯坦福公开课第一讲
  5. 2023最新PHP淘宝客三合一返佣系统源码+带公众号和H5端/轻量级
  6. 在远离手机的120个小时里
  7. 小鱼易连 for Mac(视频会议软件) V2.24.1.45959官方版
  8. rime (中州韵) 安装方法
  9. 镇江企业SEO:百度关键词收录小妙招!
  10. 我的团长我的团第二十二集