练习 13-1:星星 ——找一副星星图像,并在屏幕上显示一系列整齐排列的星星。

1.starsky.py

import pygame
import sys
from random import randint
from star import Starclass StarSky:def __init__(self):""" 初始化 """pygame.init()# 创建一个显示窗口,并设置窗口尺寸self.screen = pygame.display.set_mode((1500, 800))# # 设置背景色self.bg_color = (20, 20, 20)self.stars = pygame.sprite.Group()self._create_starry()pygame.display.set_caption("Star Sky")def _create_starry(self):""" 创建星群 """# 创建一个星星并计算一行可容纳多少个星星star = Star(self)star_width, star_height = star.rect.size# 屏幕x方向左右各预留一个星星宽度availiable_space_x = self.screen.get_rect().width - (2 * star_width)# 星星的间距为星星宽度的3倍number_stars_x = availiable_space_x // (4 * star_width) + 1# 计算屏幕可容纳多少行星星# 屏幕y方向上下各预留一个星星宽度availiable_space_y = self.screen.get_rect().height - (2 * star_height)# 星星的间距为星星高度的3倍number_rows = availiable_space_y // (4 * star_height) + 1# 创建星群for row_number in range(number_rows):for star_number in range(number_stars_x):self._create_star(star_number, row_number)def _create_star(self, star_number, row_number):# 创建一个星星并将其加入到当前行star = Star(self)star_width, star_height = star.rect.sizestar.rect.x = star_width + 4 * star_width * star_numberstar.rect.y = star_height + 4 * star_height * row_numberself.stars.add(star)def starry(self):""" 开始星空展示 """while True:# 屏幕展示for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()# 每次循环时都重绘屏幕self.screen.fill(self.bg_color)self.stars.draw(self.screen)# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建实例并运行sky = StarSky()sky.starry()

2.star.py

import pygame
from pygame.sprite import Spriteclass Star(Sprite):""" 表示单个星星的类 """def __init__(self, ai_game):""" 初始化星星并设置其起始位置 """super().__init__()self.screen = ai_game.screen# 加载星星图像并设置其rect属性self.image = pygame.image.load('images/stars.bmp')self.rect = self.image.get_rect()# 每个星星最初都在屏幕左上角附近self.rect.x = self.rect.widthself.rect.y = self.rect.height# 存储星星精确水平位置self.x = float(self.rect.x)

运行效果如下:

练习 13-2:更逼真的星星 ——为让星星的分布更逼真,可随机地放置星星。在为完成练习 13-1而编写的程序中,随机地调整每颗星星的位置。

随机位置要用到随机函数:

from random import randint
random_number = randint(-10, 10)

在这里随机数可以应用于尺寸x、y坐标的生成

1.starsky.py  将函数_create_starry()与_create_star()进行一些修改

import pygame
import sys
from random import randint
from star import Starclass StarSky:def __init__(self):""" 初始化 """pygame.init()# 创建一个显示窗口,并设置窗口尺寸self.screen = pygame.display.set_mode((1500, 800))# # 设置背景色self.bg_color = (20, 20, 20)self.stars = pygame.sprite.Group()self._create_starry()pygame.display.set_caption("Star Sky")def _create_starry(self):""" 创建星群 """# 创建一个星星并计算一行可容纳多少个星星star = Star(self)star_width, star_height = star.rect.size# 屏幕x方向左右各预留一个星星宽度self.availiable_space_x = self.screen.get_rect().width - (2 * star_width)# 星星的间距为星星宽度的3倍number_stars_x = self.availiable_space_x // (4 * star_width) + 1# 计算屏幕可容纳多少行星星# 屏幕y方向上下各预留一个星星宽度self.availiable_space_y = self.screen.get_rect().height - (2 * star_height)# 星星的间距为星星高度的3倍number_rows = self.availiable_space_y // (4 * star_height) + 1# 创建星群for row_number in range(number_rows):for star_number in range(number_stars_x):self._create_star(star_number, row_number)def _create_star(self, star_number, row_number):# 创建一个星星并将其加入到当前行star = Star(self)star.rect.x = randint(0, self.availiable_space_x)star.rect.y = randint(0, self.availiable_space_y)self.stars.add(star)def starry(self):""" 开始星空展示 """while True:# 屏幕展示for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()# 每次循环时都重绘屏幕self.screen.fill(self.bg_color)self.stars.draw(self.screen)# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建实例并运行sky = StarSky()sky.starry()

2.star.py不需要改动

运行效果如下:

《Python编程:从入门到实践》练习13-1、13-2相关推荐

  1. python入门到实践-Python编程从入门到实践(基础入门)

    Python编程从入门到实践-------基础入门 1.Python中的变量 2.Python首字母大写使用title()方法,全部大写upper()方法,全部小写lower()方法 3.Python ...

  2. python基础学习[python编程从入门到实践读书笔记(连载一)]

    写在前面:本文来自笔者关于<python编程从入门到实践>的读书笔记与动手实践记录. 程序员之禅 文章目录 02变量和简单数据类型 03 列表简介 04 操作列表 05 if语句 06 字 ...

  3. 《Python编程从入门到实践》记录之json模块(数据存储)

    模块json让你能够将简单的Python数据结构转储到文件中, 并在程序再次运行时加载该文件中的数据. 你还可以使用json在Python程序之间分享数据.更重要的是,JSON数据格式并非Python ...

  4. 《Python编程 从入门到实践》简单读书笔记

    目录 第2章 变量和简单数据类型 第3章 列表简介 第4章 操作列表 第5章 if语句 第6章 字典 第7章 用户输入和while循环 第8章 函数 第9章 类 第10章 文件和异常 第11章 测试代 ...

  5. python编程从入门到实践 第18章Django入门 2022年最新

    说明:这篇文章只是记录自己自学本书的一个痕迹,日后来看作为一个念想.至于做为公开,是希望对一些同样跟我一样的朋友有一点点帮助,当然我本人就是小白,帮助可能也不大哈哈. 这篇文章记录了<pytho ...

  6. 《Python编程从入门到实践》袁国忠 译 P1~P200学习笔记

    <Python编程从入门到实践>袁国忠 译 P1~P200 学习笔记 <Python编程从入门到实践>袁国忠 译 P1~P200之前两天在学习时做的笔记总结,在这里也记录一下, ...

  7. python开发之父亲自编写《python编程从入门到实践》中译版图书销量破百万册,完整版PDF开放下载

    为什么要学习python 主流编程语言 世界上的编程语言有600多种,但真正大家主流在使用的最多二三十种,不同的语言有自己的特点和擅长领域,随着计算机的不断发展,新语言在不断诞生,也同时有很多老旧的语 ...

  8. 《Python编程从入门到实践》习题答案及重点

    发现自己对于python的基础掌握的并不是很牢实,利用几天时间把重点写下来,并打算把(<Python编程从入门到实践>试一试)的代码全部敲一遍,如果有不对的地方,请不吝赐教. 目录 第1章 ...

  9. 《python编程从入门到实践》python入门级-学习笔记(1-2章)——持续更新中

    CSDN的小伙伴们你们好~从今天起我开始自学编程了. 恭喜你关注到一个成长型账号. 一以来作为美术出身的TA,我无数次的向往能打出几行属于自己的代码.为了跟上时代的步伐,也为了能更加深入TA这个职业, ...

  10. Python语法学习测试记录(Python编程从入门到实践——Eric Matthes著)

    注:工作之余,学习一门脚本语言,选择了当下火热的Python.2020-05-27日开始学习Python基础语法,期间参考<Python编程从入门到实践--Eric Matthes著>一书 ...

最新文章

  1. java 注解类说明
  2. 用最简单的例子说明设计模式(一)之单例模式、工厂模式、装饰模式、外观模式...
  3. Lake Counting POJ - 2386
  4. 自己帮别人写的网站可以公开源码吗_雷军靠写代码赚第一个 100 万,马化腾亲自写腾讯网,码农出身的大佬...
  5. 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
  6. 问题总结2015/05/05
  7. 手机屏幕坏了如何把手机里面的资料取出来_手机碎屏原来也有这么多讲究,早了解这几个方法就不会被坑了...
  8. ApacheCN PHP 译文集 20211101 更新
  9. 仙剑奇侠传7报错:the following components are required to run this program.microsoft visual c++ 2015 runtime
  10. python编程入门第3版pdf-Python程序设计 第3版pdf
  11. excel软件php函数,excel的函数
  12. python 公开课_python公开课|可以用Python做的十件事,刚开始学python,你一定要知道...
  13. 极值点、驻点、拐点、关系点
  14. 仿网易云音乐网站(加入个人社区)
  15. 使用image-map编写校区平面示意图
  16. 普元应用服务器软件AppServer V7版本正式发布
  17. java通用软件下载网址_一些常用软件下载网址(分享)
  18. 拒绝选择恐惧症!国内好用的Markdown编辑器之有道云笔记
  19. 451+Sony索尼Slog2和Slog3灰片视频电影级调色LUT预设 Slog2 Slog3调色LUTs预设
  20. 梦幻手游最新服务器,梦幻西游手游2月7日服务器合并一览 新服务器名称介绍-游侠手游...

热门文章

  1. 用例建模 - 绘制用例图
  2. 解读订单簿点对点挂单交易
  3. Unity四元数和向量相乘作用及其运算规则
  4. C语言PAT刷题 - 1032 挖掘机技术哪家强
  5. 从古至今的计算机设备,从古至今的计算工具
  6. Qt布局setStretch()后获取部件大小不更新的解决办法
  7. mac 下终端访问文件出现“Permission Denied”解决方案
  8. Rational Test Suite-Purify
  9. 关于mysql百万级别数据条件查询过慢问题以及count()过慢
  10. 为什么样本点平均值会经过线性回归直线?