用python画雨滴_Python编程从入门到实践练习(雨滴)
雨滴:寻找一幅雨滴图像,并创建一系列整齐排列的雨滴。让这些雨滴往下落,直到到达屏幕后消失。
先说今天的问题:
1.在更改函数形参时,调用的时候也要修改,否则会出现AttributeError
值得注意的是:每当添加进新的代码,要检查函数传递的参数是否对应一致,函数本身与调用它的时候都要检查
2.愚蠢的错误:把创建整齐雨滴的函数写到循环体中去了,结果一直出现重叠,达不到预期效果,搞了半天眼睛快瞎了才发现,唉!
主程序 display
import pygame
from settings import Settings
from rain import Rain
import func as f
from pygame.sprite import Group#####
def display():
"""主函数----显示雨滴效果"""
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption('Raining')
rains = Group()####
f.create_rains(settings, screen, rains)#####
while True:
f.check_events()
screen.fill(settings.bg_color)
f.change_direction(settings, rains)
rains.draw(screen)
pygame.display.flip()
display()
函数模块func
import pygame
import sys
from rain import Rain
def check_events():
"""按键检查"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
def get_col_numbers(settings, rain):#对于每一行来说,变化的是x坐标,列在变化
"""一行可以存放的雨滴数"""
col_numbers = int(settings.screen_width / (2 * rain.rect.width))
return col_numbers
def get_row_numbers(settings, rain):
"""可存放雨滴的行数"""
row_numbers = int(settings.screen_height / (1 * rain.rect.height))
return row_numbers
def create_rain(settings, screen, rains, col_number, row_number):
rain = Rain(settings, screen)
rain_width = rain.rect.width
rain.x = rain_width + 2 * rain_width * col_number
rain.rect.x = rain.x#rect存放整数
rain.rect.y = rain.rect.y + 2 * rain.rect.height * row_number
rains.add(rain)
def create_rains(settings, screen, rains):
rain = Rain(settings, screen)#这句是要写的,不写的话get_col_numbers()中的rain将出现NameError
col_numbers = get_col_numbers(settings, rain)
row_numbers = get_row_numbers(settings, rain)
for row_number in range(row_numbers):
for col_number in range(col_numbers):
create_rain(settings, screen, rains, col_number, row_number)
def change_direction(settings, rains):
for rain in rains.sprites():
rain.rect.y += settings.drop_speed
rain类:
import pygame
from pygame.sprite import Sprite
class Rain(Sprite):
"""雨滴"""
def __init__(self, settings, screen):
super().__init__()
self.screen = screen
self.settings = settings
self.image = pygame.image.load('rain.bmp')
self.rect = self.image.get_rect()
self.y = float(self.rect.y)
def blitme(self):
self.screen.blit(self.image, self.rect)
def check_edges(self):
"""如果雨滴位于屏幕边缘就返回True"""
if self.rect.top >= self.screen.rect.bottom:
return True
settings类:
class Settings():
"""设置所有设置的类"""
def __init__(self):
self.screen_width = 1200
self.screen_height = 600
self.bg_color = (255, 255, 255)
self.drop_speed = 1
效果图:
初始:
下落:
用python画雨滴_Python编程从入门到实践练习(雨滴)相关推荐
- python从入门到实践学习笔记_Python编程从入门到实践:学习笔记1(第二章)
开通博客我用的理由是:读书学习时记笔记,一方面为了回顾,一方面为了督促自己.fighting! 学习Python,我买了Python编程从入门到实践. 我将从第二章开始记录我认为我以后会忘记以及重要的 ...
- python从入门到实践_Python编程从入门到实践日记Day32
Python编程从入门到实践日记Day32 第7章 函数(八) 1.传递任意数量的实参 - 使用任意数量的关键字实参 有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息.在这种情 ...
- python 从入门到实践_Python编程从入门到实践日记Day15
Python编程从入门到实践日记Day15 第5章 字典(三) 1.使用字典(三) -由类似对象组成的字典 在前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,但你也可以使用字典来存 ...
- python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介
python编程从入门到实践笔记--列表简介 #coding=utf-8 #列表--我的理解等于c语言和java中的数组 bicycles = ["trek","cann ...
- python入门到实践试题及答案_python编程:入门到实践练习答案
[实例简介] 书本<python编程:入门到实践>的课后练习答案 [实例截图] [核心代码] 练习答案 ├── Solutions - Chapter 10.docx ├── Soluti ...
- python tk combobox设置值为空_Python编程从入门到实践日记Day24
Python编程从入门到实践日记Day24 第6章 用户输入和while循环(五) 1. 使用while循环来处理列表和字典(二) - 删除包含特定值的所有列表元素 在之前我们学过可以使用函数remo ...
- python编程从入门到实践第八章_Python编程从入门到实践的第三天
#-*- coding = utf-8 -*- #今天是12月24号了,天气阴,不是太好,这是我看Python编程从入门到实践的第三天,现在是上午,我是皮卡丘,这是我敲的第八章的代码 #第八章练习题1 ...
- python编程入门电脑推荐_Python编程从入门到实践
Python编程从入门到实践 作者:[美]埃里克·马瑟斯(EricMatthes)著,袁国忠译 ISBN:9787115428028 出版社:人民邮电出版社 出版日期:2016-07-01 正文语种: ...
- python编程免费教程电子书_python编程从入门到实践PDF电子书教程免费下载
本书是一本针对所有层次的 Python 读者而作的 Python 入门书.全书分两部分 :第一部分介绍用 Python 编程所必须了解的基本概念,包括 matplotlib.NumPy 和 Pygal ...
最新文章
- 区块链基础知识系列 第四课Hyperledger fabric 1.0网络组成及构建流程
- mysql取固定前缀的表_mysql删除指定前缀的表
- 力扣572. 另一棵树的子树(JavaScript)
- dubbo 分组后,dubbo-admin 看不到服务
- ERDAS 安装完成之后如何打开软件新建工程
- visibilitychange ios设备不生效_如何调试支付宝(iOS)
- 思科交换机绑定MAC
- EovaJFinal在阿里云K8S实现多环境自动化部署
- Unity实现简单卡牌游戏框架
- 好用的FTP下载工具 flashfxp工具
- Unity导入免费的素材资源
- A Game of Thrones(50)
- TSF(Text Service Framework)简介
- 苹果手机充值显示服务器异常,球球大作战iOS会员充值异常解决办法
- UDF:一个通过日期计算星座
- MES系统读取MySQL数据_MES系统数据库
- python重新加载文件_Python的重新加载知识点总结
- strongbox-数论
- android开启照相功能,Android打开系统相机并拍照的2种显示方法
- python练习题:045:正常血压
热门文章
- python去掉列表中的单引号_从Python中的列表中删除单引号
- 讽刺c语言,鲁迅先生评价《儒林外史》“婉而多讽”,达到我国古典小说讽刺艺术的高峰。请从小贴士中选择一项,结合作品具体内,赏析《儒林外史》的讽刺艺术:...
- Centos 7 安装 Oracle 12cR2 流程
- tbc自建服务器,魔兽世界tbc怀旧服服务器阵营比例_wowtbc服务器阵营比例_3DM网游...
- 弱智破解法——用python破解WIFI
- Java SSM 重制版(三)SpringSecurity
- 概率题:掷一枚不均匀的硬币,正面概率为0.7,反面的概率为0.3,如何最高效地获得一个概率为0.5的事件?
- [论文精读]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis
- 计算机软件水平考试程序员之程序设计知识点汇总,软考程序员常考知识点汇总.docx...
- 《北京爱情故事》中《滴答滴》简谱