第一个文件,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章 武装飞船 之 调整飞船的速度程序实践相关推荐

  1. 添加简单的linux内核模块,操作系统实践 第12章-添加最简单的Linux内核模块.ppt

    操作系统实践 第12章-添加最简单的Linux内核模块.ppt 文档编号:310662 文档页数:16 上传时间: 2018-07-21 文档级别: 文档类型:ppt 文档大小:2.00MB 第12章 ...

  2. 第 12 章 武装飞船

    第 12 章 武装飞船 我们来开发一个游戏吧! 我们将使用Pygame, 这是一组功能强大而有趣的模块, 可用于管理图形. 动画乃至声音, 让你能够更轻松地开发复杂的游戏. 通过使用 Pygame来处 ...

  3. 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则

    第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理"胖"接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有"胖"接口 ...

  4. 《Python游戏趣味编程》第12章 坚持一百秒

    12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...

  5. 明解C语言入门篇_第12章_结构体

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  6. python基础课程第12章,Python基础教程学习笔记 | 第12章 | 图形用户界面

    Python支持的工具包很多,但没有一个被认为标准的工具包,用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: ------ 丰富的平台: Tkinter实际上类似于标 ...

  7. Android app开发入门复习一(1-2章)

    第一章 Android是基于Linux的移动端开源操作系统 第一部Android手机由HTC公司制造 两大操作系统:Android(谷歌公司),iOS(苹果公司) SDK(software delve ...

  8. 以小饭桌网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  9. Python 编程快速上手 第十五章 保持时间,计划任务和启动程序

    前言 这一章节的主要内容是: 处理时间类型的数据(使用python 的两个模块: time 和 datetime 来处理) 创建多个线程 (使用 threading 模块来创建多个线程) 进行多个进程 ...

最新文章

  1. Facebook新AI模型实现直接从非英语语言翻译到另一种非英语语言
  2. 第5章 案例研究: QuickCheck
  3. 【cocos2d-x从c++到js】02:解决在vs中修改js源文件无效
  4. 【腾讯通服务器的消息集成解决方案】之与勤哲Excel服务器的集成
  5. Android核心分析之GUI框架的原理
  6. java类同步,Java同步工具類(一)
  7. php银行转账,php+mysqli事务控制实现银行转账实例_PHP教程
  8. C#的Socket-UDP通信
  9. Maven3.0.5代理nexus
  10. Linux查看所有用户及用户管理命令
  11. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
  12. JAVA I/O基本操作
  13. 数值优化-梯度下降法
  14. 搭建ASP环境-win7安装IIS并运行ASP程序
  15. python安装包时报错Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools
  16. 运动式蓝牙耳机什么牌子好、运动式蓝牙耳机推荐
  17. cordova build时出错Minimum supported Gradle version is 5.4.1. Current version is 4.10.3
  18. SpringBoot MultipartResolver的坑
  19. VS报错:没有足够的内存继续执行程序
  20. ‘gbk‘ codec can‘t decode byte 0xa4 in position 16433: illegal multibyte sequence

热门文章

  1. Druid:一个用于大数据实时处理的开源分布式系统
  2. python 数据结构-字典
  3. document.execCommand()函数可用参数解析 (转)
  4. php basic publish,RabbitMQ入门(PHP语言描述)
  5. php写新闻浏览历史,PHP实现浏览历史记录
  6. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
  7. RxSwift之UI控件Label扩展的使用
  8. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和
  9. 2020\Simulation_1\3.叶节点数
  10. 1042:奇偶ASCII值判断