雨滴:寻找一幅雨滴图像,并创建一系列整齐排列的雨滴。让这些雨滴往下落,直到到达屏幕后消失。

先说今天的问题:

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编程从入门到实践练习(雨滴)相关推荐

  1. python从入门到实践学习笔记_Python编程从入门到实践:学习笔记1(第二章)

    开通博客我用的理由是:读书学习时记笔记,一方面为了回顾,一方面为了督促自己.fighting! 学习Python,我买了Python编程从入门到实践. 我将从第二章开始记录我认为我以后会忘记以及重要的 ...

  2. python从入门到实践_Python编程从入门到实践日记Day32

    Python编程从入门到实践日记Day32 第7章 函数(八) 1.传递任意数量的实参 - 使用任意数量的关键字实参 有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息.在这种情 ...

  3. python 从入门到实践_Python编程从入门到实践日记Day15

    Python编程从入门到实践日记Day15 第5章 字典(三) 1.使用字典(三) -由类似对象组成的字典 在前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,但你也可以使用字典来存 ...

  4. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介

    python编程从入门到实践笔记--列表简介 #coding=utf-8 #列表--我的理解等于c语言和java中的数组 bicycles = ["trek","cann ...

  5. python入门到实践试题及答案_python编程:入门到实践练习答案

    [实例简介] 书本<python编程:入门到实践>的课后练习答案 [实例截图] [核心代码] 练习答案 ├── Solutions - Chapter 10.docx ├── Soluti ...

  6. python tk combobox设置值为空_Python编程从入门到实践日记Day24

    Python编程从入门到实践日记Day24 第6章 用户输入和while循环(五) 1. 使用while循环来处理列表和字典(二) - 删除包含特定值的所有列表元素 在之前我们学过可以使用函数remo ...

  7. python编程从入门到实践第八章_Python编程从入门到实践的第三天

    #-*- coding = utf-8 -*- #今天是12月24号了,天气阴,不是太好,这是我看Python编程从入门到实践的第三天,现在是上午,我是皮卡丘,这是我敲的第八章的代码 #第八章练习题1 ...

  8. python编程入门电脑推荐_Python编程从入门到实践

    Python编程从入门到实践 作者:[美]埃里克·马瑟斯(EricMatthes)著,袁国忠译 ISBN:9787115428028 出版社:人民邮电出版社 出版日期:2016-07-01 正文语种: ...

  9. python编程免费教程电子书_python编程从入门到实践PDF电子书教程免费下载

    本书是一本针对所有层次的 Python 读者而作的 Python 入门书.全书分两部分 :第一部分介绍用 Python 编程所必须了解的基本概念,包括 matplotlib.NumPy 和 Pygal ...

最新文章

  1. 区块链基础知识系列 第四课Hyperledger fabric 1.0网络组成及构建流程
  2. mysql取固定前缀的表_mysql删除指定前缀的表
  3. 力扣572. 另一棵树的子树(JavaScript)
  4. dubbo 分组后,dubbo-admin 看不到服务
  5. ERDAS 安装完成之后如何打开软件新建工程
  6. visibilitychange ios设备不生效_如何调试支付宝(iOS)
  7. 思科交换机绑定MAC
  8. EovaJFinal在阿里云K8S实现多环境自动化部署
  9. Unity实现简单卡牌游戏框架
  10. 好用的FTP下载工具 flashfxp工具
  11. Unity导入免费的素材资源
  12. A Game of Thrones(50)
  13. TSF(Text Service Framework)简介
  14. 苹果手机充值显示服务器异常,球球大作战iOS会员充值异常解决办法
  15. UDF:一个通过日期计算星座
  16. MES系统读取MySQL数据_MES系统数据库
  17. python重新加载文件_Python的重新加载知识点总结
  18. strongbox-数论
  19. android开启照相功能,Android打开系统相机并拍照的2种显示方法
  20. python练习题:045:正常血压

热门文章

  1. python去掉列表中的单引号_从Python中的列表中删除单引号
  2. 讽刺c语言,鲁迅先生评价《儒林外史》“婉而多讽”,达到我国古典小说讽刺艺术的高峰。请从小贴士中选择一项,结合作品具体内,赏析《儒林外史》的讽刺艺术:...
  3. Centos 7 安装 Oracle 12cR2 流程
  4. tbc自建服务器,魔兽世界tbc怀旧服服务器阵营比例_wowtbc服务器阵营比例_3DM网游...
  5. 弱智破解法——用python破解WIFI
  6. Java SSM 重制版(三)SpringSecurity
  7. 概率题:掷一枚不均匀的硬币,正面概率为0.7,反面的概率为0.3,如何最高效地获得一个概率为0.5的事件?
  8. [论文精读]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis
  9. 计算机软件水平考试程序员之程序设计知识点汇总,软考程序员常考知识点汇总.docx...
  10. 《北京爱情故事》中《滴答滴》简谱