系列文章目录

第一章:武装飞船

06:让飞船移动

一、驾驶飞船

下面来让玩家能够左右移动飞船。我们将编写代码,在用户按左或右箭头键时做出响应。我们将首先专注于向右移动,再使用同样的原理来控制向左移动。通过这样做,你将学会如何控制屏幕图像的移动。

二、让飞船移动

1.代码及注释(笔记)

(笔记在代码的注释中!!!)

A:修改文件:game_functions.py

点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #game_functions.py
  4. #存储让游戏运行的函数
  5. import sys
  6. import pygame
  7. def check_events(ship): # 在玩家按右箭头时需要将飞船向右移动,
  8. # 所以给函数加上了形参ship
  9. for event in pygame.event.get(): # 监听键盘和鼠标事件
  10. if event.type == pygame.QUIT:
  11. sys.exit()
  12. #修改alien_invasion.py,使其导入game_functions
  13. #并将事件循环替换为对函数check_events()的调用
  14. elif event.type == pygame.KEYDOWN:
  15. if event.key == pygame.K_RIGHT:
  16. #移动飞船
  17. ship.moving_right = True
  18. #玩家按下右箭头键时标志设为true
  19. elif event.key == pygame.K_LEFT:
  20. ship.moving_left = True
  21. # 玩家按下左箭头键时标志设为true
  22. elif event.type == pygame.KEYUP:
  23. if event.key == pygame.K_RIGHT:
  24. ship.moving_right = False
  25. # 玩家松开右箭头键时标志设为false
  26. elif event.key == pygame.K_LEFT:
  27. ship.moving_left = False
  28. # 玩家松开左箭头键时标志设为false
  29. def update_screen(ai_settings,screen,ship):
  30. # 将更新屏幕的代码移到此处
  31. screen.fill(ai_settings.bg_color) # 每次循环都会重绘屏幕
  32. ship.blitme() # 每次循环时重新绘制飞船
  33. pygame.display.flip() # 让最近绘制的屏幕可见
  34. # 然后修改alien_invasion.py

B:修改文件:alien_invasion.py

点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #创建pygame窗口以及响应用户输入
  4. import sys
  5. #模块sys用来退出游戏
  6. import pygame
  7. from settings import Setting
  8. #导入刚创建的设置类
  9. from ship import Ship
  10. #导入管理飞船行为的类
  11. import game_functions as gf
  12. def run_game():
  13. pygame.init() #初始化屏屏幕对象
  14. ai_settings = Setting()
  15. # 创建Setting类的实例,并存储在ai_settings变量中
  16. screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) #创建显示窗口
  17. pygame.display.set_caption("Alien Invasion")
  18. ship = Ship(screen) #绘制一艘飞船
  19. #开始游戏主循环
  20. while True:
  21. gf.check_events(ship)
  22. ship.update()
  23. # 飞船移动已经设置完成
  24. gf.update_screen(ai_settings,screen,ship)
  25. run_game()
  26. # 代码重构完成

C:修改文件:ship.py

点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #ship.py
  4. #管理飞船行为的类
  5. import pygame
  6. class Ship():
  7. def __init__(self,screen):
  8. #参数screen用来指定将飞船绘制到什么地方
  9. self.screen = screen
  10. #加载飞船图片并获取其外接矩形
  11. self.image = pygame.image.load('F:/PythonProject/pythongame/images/ship.bmp')
  12. #复制图片路径后需要将斜杠改为反斜杠
  13. self.rect = self.image.get_rect()
  14. self.screen_rect = screen.get_rect()
  15. #将每艘新飞船放在屏幕中间
  16. self.rect.centerx = self.screen_rect.centerx
  17. self.rect.bottom = self.screen_rect.bottom
  18. # 移动标志,玩家按下右箭头键时,将标志设为true,松开时重新设置为false
  19. self.moving_right = False
  20. self.moving_left = False
  21. # 方法update()检查标志状态,标志为true时调整飞船位置
  22. def update(self):
  23. if self.moving_right:
  24. self.rect.centerx += 1 #实现了飞船向右移动
  25. if self.moving_left:
  26. self.rect.centerx -= 1 #实现了飞船向左移动
  27. def blitme(self):
  28. # 在指定位置绘制飞船
  29. self.screen.blit(self.image, self.rect)

2.运行效果

A.按下右箭头键后向右移动,再按下左箭头键时停止

B.按下左箭头键后向右移动,再按下右箭头键时停止

有什么不懂的地方在评论区留言哦!希望我的文章能对你有所帮助,如果喜欢我的文章,请点赞收藏并关注!你的认可是对我创作最大的鼓励!

2022-08-22 20:59:23 星期一

Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动的更多相关文章

  1. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

  2. Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围

    系列文章目录 第一章:武装飞船 07调整飞船速度 08限制飞船活动范围 一.代码及演示 1.修改settings 修改文件:settings.py 点击查看代码 #渗透小红帽python的学习之路 # ...

  3. Python小游戏——外星人入侵(保姆级教程)第一章 05重构模块game_functions

    系列文章目录 第一章:武装飞船 05:重构:模块game_functions 一.重构 在大型项目中,经常需要在添加新代码前重构既有代码.重构旨在简化既有代码的结构,使其更容易扩展.在本节中,我们将创 ...

  4. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类

    系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...

  5. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  6. RocketMQ保姆级教程

    大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...

  7. 自建本地服务器,自建Web服务器——保姆级教程!

    搭建本地服务器,Web服务器--保姆级教程! 本文首发于https://blog.chens.life/How-to-build-your-own-server.html. 先上图!大致思路就是如此. ...

  8. Python小游戏、小程序

    python 小游戏之摇骰子猜大小 python 实现一个双色球生成程序 python-循环与判断练习题

  9. Eclipse for C/C++ 开发环境部署保姆级教程

    Eclipse for C/C++ 开发环境部署保姆级教程 工欲善其事,必先利其器. 对开发人员来说,顺手的开发工具必定事半功倍.自学编程的小白不知道该选择那个开发工具,Eclipse作为一个功能强大 ...

随机推荐

  1. 『忘了再学』Shell基础 — 25、扩展正则表达式

    目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...

  2. MySQL - 并发事务出现的问题

    1. 脏读 含义:在事务过程中,读到了其它事务为提交的数据. 解决方法:将数据库事务提升到读已提交或以上的隔离级别. 2. 不可重复读 含义:一次事务中,两次读操作中,读出来的数据内容不一致. 解决方 ...

  3. SQL的语法

    SQL的语法 SQL通用语法 SQL语句可以单行或多行书写,以分号(";")结尾. SQL语句可以使用空格或缩进增强可读性. MySQL数据库的SQL语句不区分大小写(建议关键字大 ...

  4. ShardingSphere-proxy-5.0.0部署之分表实现(一)

    一.说明 环境准备:JDK8+     mysql 5.x 官网:https://shardingsphere.apache.org/ 下载地址:https://archive.apache.org/ ...

  5. Redis之Lua的应用(四)

    一.什么是Lua脚本 Lua是一个高效的轻量级脚本语言(和JavaScript类似),用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lu ...

  6. 对vue响应式的理解

    1.所谓数据响应式就是能够使数据变化可以被检测并对这种变化做出响应的机制. 2.MVVM框架要解决的一个核心问题是连接数据层和视图层,通过数据驱动应用,数据变化,视图更新,要做到这点的就需要对数据做响 ...

  7. RPA 快手自动上传机器人

    1.打开账号Cookie预存表格 2.机器人自动登录账号 3.机器人开始按照预设视频位置开始自动上传视频 4.机器人开始自动填写视频相关信息内容 5.完成后,可自动切换下一个账号继续上传

  8. yearning_sql审核平台搭建

    Yearning SQL 审计平台 基于Vue.js与Django的整套mysql-sql审核平台解决方案.提供基于Inception的SQL检测及执行. GitHub:https://github. ...

  9. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  10. 基于Mybatis插件方式实现数据脱敏处理

    一.项目介绍 1.项目背景 有时候我们数据库中存储一些敏感的信息比如手机号.银行卡号,我们希望我们查询出来的的时候对一些敏感信息做一些脱敏处理. 当面项目是基于自定义Mybatis插件方式实现数据脱敏 ...