python从入门到实践 第12章 武装飞船 之 调整飞船的速度程序实践
第一个文件,main.py是主程序
#main.py
import sys
import pygame
from settings import Settings
from ship import Ship
import update as pt
def run_game():my_set = Settings()pygame.init()screen = pygame.display.set_mode(my_set.set_mode)my_ship = Ship(screen,my_set)pygame.display.set_caption(my_set.set_caption)while True:pt.update(my_ship,screen,my_set)
run_game()
第二个文件:settings.py
class Settings():def __init__(self):self.color = (255,255,255)self.set_mode = (1000,800)self.new_speed_factor = 1.5self.set_caption = 'ship invasion'
第三个文件:update.py
#update.py
import pygame
import sys
def check_events(ship):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:ship.moving_right = Trueif event.key == pygame.K_LEFT:ship.moving_left = Trueif event.key == pygame.K_UP:ship.moving_up = Trueif event.key == pygame.K_DOWN:ship.moving_down = Trueelif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:ship.moving_right = Falseif event.key == pygame.K_LEFT:ship.moving_left = Falseif event.key == pygame.K_UP:ship.moving_up = Falseif event.key == pygame.K_DOWN:ship.moving_down = False
def update(ship,screen,settings):check_events(ship)ship.update()#特别要注意:填充颜色的下面这句话一定要在绘图之前进行(也就是要放在ship.blitme之前,否则#颜色会覆盖掉前面的绘好的图形)screen.fill(settings.color)ship.blitme()pygame.display.flip()
第四个文件:ship.py
import pygame
import sys
class Ship():def __init__(self,screen,settings):self.settings = settingsself.screen = screenself.image = pygame.image.load("ship.bmp")self.rect = self.image.get_rect()self.screen_rect = self.screen.get_rect()self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottomself.center = float(self.rect.centerx)self.moving_left = Falseself.moving_right = Falseself.moving_up = Falseself.moving_down = Falsedef blitme(self):self.screen.blit(self.image,self.rect)def update(self):if self.moving_right == True:self.center += self.settings.new_speed_factorif self.moving_left == True:self.center -= self.settings.new_speed_factorif self.moving_up == True:self.rect.bottom -= 1if self.moving_down == True:self.rect.bottom += 1self.rect.centerx = self.center
本文所用到的ship.bmp和alien.bmp的下载 链接: https://pan.baidu.com/s/1Dn5yaQGZLIsN0BohM8PzoA 密码: 38ie
注:以上程序只是提高了横向的速度,纵向移动速度并没有改变,如果要改变纵向移动速度,必须改变ship.py文件,自己改动的代码如下(其它文件不变):
import pygame
import sys
class Ship():def __init__(self,screen,settings):self.settings = settingsself.screen = screenself.image = pygame.image.load("ship.bmp")self.rect = self.image.get_rect()self.screen_rect = self.screen.get_rect()self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottomself.center_x = float(self.rect.centerx)self.center_y = float(self.rect.bottom)self.moving_left = Falseself.moving_right = Falseself.moving_up = Falseself.moving_down = Falsedef blitme(self):self.screen.blit(self.image,self.rect)def update(self):if self.moving_right == True:self.center_x += self.settings.new_speed_factorif self.moving_left == True:self.center_x -= self.settings.new_speed_factorif self.moving_up == True:self.center_y -= self.settings.new_speed_factorif self.moving_down == True:self.center_y += self.settings.new_speed_factorself.rect.centerx = self.center_xself.rect.bottom = self.center_y
随着代码越来越长,我们队update.py文件进行重构,把check_events()的部分代码放在不同的文件中,update.py文件重新布置代码如下:
import pygame
import sys
def check_keydown_events(event,ship):if event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:ship.moving_right = Trueif event.key == pygame.K_LEFT:ship.moving_left = Trueif event.key == pygame.K_UP:ship.moving_up = Trueif event.key == pygame.K_DOWN:ship.moving_down = True
def check_keyup_events(event,ship):if event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:ship.moving_right = Falseif event.key == pygame.K_LEFT:ship.moving_left = Falseif event.key == pygame.K_UP:ship.moving_up = Falseif event.key == pygame.K_DOWN:ship.moving_down = False
def check_events(ship):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:
#因为上面已经定义过函数check_keydown_events,所以可以直接使用check_keydown_events(event,ship)elif event.type == pygame.KEYUP:
#因为上面已经定义过函数check_up_events,所以下面也可以直接使用check_keyup_events(event,ship)
def update(ship,screen,settings):check_events(ship)ship.update()screen.fill(settings.color)ship.blitme()pygame.display.flip()
注意:在update.py文件中,的update函数里,screen.fill函数一定要放在blitme函数之前,否则颜色会覆盖掉绘好的图形,也就是尽早填充颜色
python从入门到实践 第12章 武装飞船 之 调整飞船的速度程序实践相关推荐
- 添加简单的linux内核模块,操作系统实践 第12章-添加最简单的Linux内核模块.ppt
操作系统实践 第12章-添加最简单的Linux内核模块.ppt 文档编号:310662 文档页数:16 上传时间: 2018-07-21 文档级别: 文档类型:ppt 文档大小:2.00MB 第12章 ...
- 第 12 章 武装飞船
第 12 章 武装飞船 我们来开发一个游戏吧! 我们将使用Pygame, 这是一组功能强大而有趣的模块, 可用于管理图形. 动画乃至声音, 让你能够更轻松地开发复杂的游戏. 通过使用 Pygame来处 ...
- 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理"胖"接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有"胖"接口 ...
- 《Python游戏趣味编程》第12章 坚持一百秒
12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...
- 明解C语言入门篇_第12章_结构体
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- python基础课程第12章,Python基础教程学习笔记 | 第12章 | 图形用户界面
Python支持的工具包很多,但没有一个被认为标准的工具包,用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: ------ 丰富的平台: Tkinter实际上类似于标 ...
- Android app开发入门复习一(1-2章)
第一章 Android是基于Linux的移动端开源操作系统 第一部Android手机由HTC公司制造 两大操作系统:Android(谷歌公司),iOS(苹果公司) SDK(software delve ...
- 以小饭桌网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.
- Python 编程快速上手 第十五章 保持时间,计划任务和启动程序
前言 这一章节的主要内容是: 处理时间类型的数据(使用python 的两个模块: time 和 datetime 来处理) 创建多个线程 (使用 threading 模块来创建多个线程) 进行多个进程 ...
最新文章
- Facebook新AI模型实现直接从非英语语言翻译到另一种非英语语言
- 第5章 案例研究: QuickCheck
- 【cocos2d-x从c++到js】02:解决在vs中修改js源文件无效
- 【腾讯通服务器的消息集成解决方案】之与勤哲Excel服务器的集成
- Android核心分析之GUI框架的原理
- java类同步,Java同步工具類(一)
- php银行转账,php+mysqli事务控制实现银行转账实例_PHP教程
- C#的Socket-UDP通信
- Maven3.0.5代理nexus
- Linux查看所有用户及用户管理命令
- Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
- JAVA I/O基本操作
- 数值优化-梯度下降法
- 搭建ASP环境-win7安装IIS并运行ASP程序
- python安装包时报错Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools
- 运动式蓝牙耳机什么牌子好、运动式蓝牙耳机推荐
- cordova build时出错Minimum supported Gradle version is 5.4.1. Current version is 4.10.3
- SpringBoot MultipartResolver的坑
- VS报错:没有足够的内存继续执行程序
- ‘gbk‘ codec can‘t decode byte 0xa4 in position 16433: illegal multibyte sequence
热门文章
- Druid:一个用于大数据实时处理的开源分布式系统
- python 数据结构-字典
- document.execCommand()函数可用参数解析 (转)
- php basic publish,RabbitMQ入门(PHP语言描述)
- php写新闻浏览历史,PHP实现浏览历史记录
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
- RxSwift之UI控件Label扩展的使用
- 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和
- 2020\Simulation_1\3.叶节点数
- 1042:奇偶ASCII值判断