Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动
系列文章目录
第一章:武装飞船
06:让飞船移动
一、驾驶飞船
下面来让玩家能够左右移动飞船。我们将编写代码,在用户按左或右箭头键时做出响应。我们将首先专注于向右移动,再使用同样的原理来控制向左移动。通过这样做,你将学会如何控制屏幕图像的移动。
二、让飞船移动
1.代码及注释(笔记)
(笔记在代码的注释中!!!)
A:修改文件:game_functions.py
点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#game_functions.py
#存储让游戏运行的函数
import sys
import pygame
def check_events(ship): # 在玩家按右箭头时需要将飞船向右移动,
# 所以给函数加上了形参ship
for event in pygame.event.get(): # 监听键盘和鼠标事件
if event.type == pygame.QUIT:
sys.exit()
#修改alien_invasion.py,使其导入game_functions
#并将事件循环替换为对函数check_events()的调用
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
#移动飞船
ship.moving_right = True
#玩家按下右箭头键时标志设为true
elif event.key == pygame.K_LEFT:
ship.moving_left = True
# 玩家按下左箭头键时标志设为true
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
ship.moving_right = False
# 玩家松开右箭头键时标志设为false
elif event.key == pygame.K_LEFT:
ship.moving_left = False
# 玩家松开左箭头键时标志设为false
def update_screen(ai_settings,screen,ship):
# 将更新屏幕的代码移到此处
screen.fill(ai_settings.bg_color) # 每次循环都会重绘屏幕
ship.blitme() # 每次循环时重新绘制飞船
pygame.display.flip() # 让最近绘制的屏幕可见
# 然后修改alien_invasion.py
B:修改文件:alien_invasion.py
点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#创建pygame窗口以及响应用户输入
import sys
#模块sys用来退出游戏
import pygame
from settings import Setting
#导入刚创建的设置类
from ship import Ship
#导入管理飞船行为的类
import game_functions as gf
def run_game():
pygame.init() #初始化屏屏幕对象
ai_settings = Setting()
# 创建Setting类的实例,并存储在ai_settings变量中
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) #创建显示窗口
pygame.display.set_caption("Alien Invasion")
ship = Ship(screen) #绘制一艘飞船
#开始游戏主循环
while True:
gf.check_events(ship)
ship.update()
# 飞船移动已经设置完成
gf.update_screen(ai_settings,screen,ship)
run_game()
# 代码重构完成
C:修改文件:ship.py
点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#ship.py
#管理飞船行为的类
import pygame
class Ship():
def __init__(self,screen):
#参数screen用来指定将飞船绘制到什么地方
self.screen = screen
#加载飞船图片并获取其外接矩形
self.image = pygame.image.load('F:/PythonProject/pythongame/images/ship.bmp')
#复制图片路径后需要将斜杠改为反斜杠
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#将每艘新飞船放在屏幕中间
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
# 移动标志,玩家按下右箭头键时,将标志设为true,松开时重新设置为false
self.moving_right = False
self.moving_left = False
# 方法update()检查标志状态,标志为true时调整飞船位置
def update(self):
if self.moving_right:
self.rect.centerx += 1 #实现了飞船向右移动
if self.moving_left:
self.rect.centerx -= 1 #实现了飞船向左移动
def blitme(self):
# 在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
2.运行效果
A.按下右箭头键后向右移动,再按下左箭头键时停止
B.按下左箭头键后向右移动,再按下右箭头键时停止
有什么不懂的地方在评论区留言哦!希望我的文章能对你有所帮助,如果喜欢我的文章,请点赞收藏并关注!你的认可是对我创作最大的鼓励!
2022-08-22 20:59:23 星期一
Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动的更多相关文章
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围
系列文章目录 第一章:武装飞船 07调整飞船速度 08限制飞船活动范围 一.代码及演示 1.修改settings 修改文件:settings.py 点击查看代码 #渗透小红帽python的学习之路 # ...
- Python小游戏——外星人入侵(保姆级教程)第一章 05重构模块game_functions
系列文章目录 第一章:武装飞船 05:重构:模块game_functions 一.重构 在大型项目中,经常需要在添加新代码前重构既有代码.重构旨在简化既有代码的结构,使其更容易扩展.在本节中,我们将创 ...
- Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类
系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...
- 保姆级教程——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版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- RocketMQ保姆级教程
大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...
- 自建本地服务器,自建Web服务器——保姆级教程!
搭建本地服务器,Web服务器--保姆级教程! 本文首发于https://blog.chens.life/How-to-build-your-own-server.html. 先上图!大致思路就是如此. ...
- Python小游戏、小程序
python 小游戏之摇骰子猜大小 python 实现一个双色球生成程序 python-循环与判断练习题
- Eclipse for C/C++ 开发环境部署保姆级教程
Eclipse for C/C++ 开发环境部署保姆级教程 工欲善其事,必先利其器. 对开发人员来说,顺手的开发工具必定事半功倍.自学编程的小白不知道该选择那个开发工具,Eclipse作为一个功能强大 ...
随机推荐
- CentOS搭建BWAPP靶场并安装docker
为了不触碰国家安全网络红线作为技术人员我们尽可能的要在自己本机在上面创建自己的靶场: 在centos上面搭建靶场看似非常简单短短几行代码,需要注意以下几个点:(1.在docker上搭建 2.端口号 ...
- Eclipse for C/C++ 开发环境部署保姆级教程
Eclipse for C/C++ 开发环境部署保姆级教程 工欲善其事,必先利其器. 对开发人员来说,顺手的开发工具必定事半功倍.自学编程的小白不知道该选择那个开发工具,Eclipse作为一个功能强大 ...
- Python中的类变量和成员变量
类变量 定义 在类里面定义,且不位于构造或者成员函数里面,同时没有" self. " 的前缀:或者在类外定义,用 类名.类变量名 来新增加类变量. 使用 两种使用方法: (1)类名 ...
- 使用Java编写一个日期时间封装类
package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...
- Java中Double类型数据比较大小
方法一:转成字符串之后比较 如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等.注意这种方法 ...
- React key究竟有什么作用?深入源码不背概念,五个问题刷新你对于key的认知
壹 ❀ 引 我在[react]什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行一文中介绍了react对于fiber处理的协调与提交两个阶段,而在介绍协调时 ...
- 总结vue 需要掌握的知识点
使用的开发工具是webstorm,它是默认就安装好了vuejs插件,idea要使用的话,需要安装一下该插件 一.快速搭建项目vue-cli 脚手架(Vue2.0) 1.Vue CLI使用前提 –Nod ...
- 06 MySQL_数据冗余
数据冗余--拆分表 如果表设计不合理,可能会出现大量的重复数据,这种现象被称为数据冗余,通过拆分表的形式可以解决此问题 保存集团总部下财务部里面的财务A部的张三工资8000 年龄18 保存集团总部下研 ...
- 1_day01_java入门
java入门 学习目标: 1.熟悉计算机编程语言 2.熟练掌握java特点 3.熟练配置java开发环境 4.熟练编写入门程序 5.熟练编写注释信息 一.计算机语言 1.1 什么是编程语言 计算机语言 ...
- P3622 [APIO2007]【一本通提高状态压缩类动态规划】动物园
广告 绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/ 绿树智能 - 官方网站:https://wangping-lvshu.github. ...