Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围
系列文章目录
第一章:武装飞船
07调整飞船速度
08限制飞船活动范围
一、代码及演示
1.修改settings
修改文件:settings.py
点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#创建设置类Setting()
#存储外星人入侵小游戏的所有设置的类
class Setting():
def __init__(self): #__init__ 注意是两个短下划线
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
self.ship_speed_factor = 1.5 #飞船速度设置为1.5,则移动时每次移动1.5像素
# 因为rect的centerx等属性只能存储整数值,所以需要对ship类做修改
2.修改ship
修改文件:ship.py
点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#ship.py
#管理飞船行为的类
import pygame
class Ship():
def __init__(self,ai_settings,screen):
#参数screen用来指定将飞船绘制到什么地方
#参数ai_settings让飞船能获取到速度设置
self.screen = screen
#加载飞船图片并获取其外接矩形
self.ai_settings = ai_settings
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
#在飞船的属性centerx中存储小数值
self.center = float(self.rect.centerx)
# 移动标志,玩家按下右箭头键时,将标志设为true,松开时重新设置为false
self.moving_right = False
self.moving_left = False
# 方法update()检查标志状态,标志为true时调整飞船位置
def update(self):
#更新飞船的center值,而不是rect
#在修改self.center的值前检查飞船的位置
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center += self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left > 0:
self.center -= self.ai_settings.ship_speed_factor
#根据self.center更新rect的对象
self.rect.centerx = self.center
def blitme(self):
# 在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
3.修改alien_invasion
修改文件: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(ai_settings,screen) #绘制一艘飞船
#开始游戏主循环
while True:
gf.check_events(ship)
ship.update()
# 飞船移动已经设置完成
gf.update_screen(ai_settings,screen,ship)
run_game()
# 代码重构完成
4.运行效果
A:按下右箭头键后飞船向右移动,直到移动到游戏界面右边缘后停止。
B:按下左箭头键后飞船向左移动,直到移动到游戏界面左边缘后停止
二、学习笔记
1. 调整飞船速度
A:需要在setting类中添加控制飞船速度的属性。
B:因为rect的centerx等属性只能存储整数值,所以需要对ship类做修改。
C:参数ai_settings让飞船能获取到速度设置。
D:在飞船的属性centerx中存储小数值。
E:更新飞船的center值,而不是rect。
self.center = float(self.rect.centerx)
F:使用函数float()将self.rect.centerx的数值转换为小数,将结果存储在self.center中。
2. 限制飞船活动范围
A:如果玩家长时间按住箭头键,则飞船有可能移动到屏幕外面,所以需要限制飞船的活动范围,让飞船在到达屏幕边缘后停止移动。
self.rect.right < self.screen_rect.right
B:self.rect.right返回飞船外接矩形右边缘的x坐标。如果这个值小于self.screen_rect.right的值说明飞船没有触及屏幕右侧边缘。
self.rect.left > 0
C:如果rect的左边缘x坐标大于0,说明飞船没有触及左边缘。
有什么不懂的地方在评论区留言哦!希望我的文章能对你有所帮助,如果喜欢我的文章,请点赞收藏并关注!你的认可是对我创作最大的鼓励!
2022-08-23 22:01:39 星期二
Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围的更多相关文章
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动
系列文章目录 第一章:武装飞船 06:让飞船移动 一.驾驶飞船 下面来让玩家能够左右移动飞船.我们将编写代码,在用户按左或右箭头键时做出响应.我们将首先专注于向右移动,再使用同样的原理来控制向左移动. ...
- 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作为一个功能强大 ...
随机推荐
- CabloyJS究竟是一款什么样的框架
CabloyJS是什么样的框架 CabloyJS 是一款自带工作流引擎的 Node.js 全栈框架,一款面向开发者的低代码开发平台,更是一款兼具低代码的开箱即用和专业代码的灵活定制的 PAAS 平台 ...
- torch.tensor(),torch.Tensor()
Pytorch tensor操作 https://www.cnblogs.com/jeshy/p/11366269.html 我们需要明确一下,torch.Tensor()是python类,更明 ...
- Hash表、 继承
Hash表 我们来了解什么是Hash表?? 要想知道什么是哈希表,那得先了解哈希函数 二叉平衡树 红黑树 B B+树,它们的查找都是先从根节点进行查找,从节点取出数据或索引与查找值进行比较.那么,有没 ...
- .NET中的迭代器(Iterator)
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月30日. 一.迭代器介绍 C#2.0开始,我们可以使用迭代器(iterator).编译器自动把我们定义的迭代器生成 可枚举类型 或 ...
- MongoDB学习总览
第1部分: MongoDB入门(第1~6章) 该部分介绍MongoDB的基本概念及入门知识. 通过该部分的学习,读者可对MongoDB自身的技术全貌形成一定的认识. 第2部分: MongoDB微服务开 ...
- 【翻译】驯服野兽:Scylla 如何利用控制理论来控制压实
教程翻译自Seastar官方文档:https://www.scylladb.com/2018/06/12/scylla-leverages-control-theory/ 转载请注明出处:https: ...
- rhel安装程序
Linux下软件分类 rpm软件包,包管理器 yum deb软件包,包管理器 apt 源代码软件包 一般为".tar.gz".&quo ...
- centos7 yum error yum doesn't have enough cached data
1.vi /etc/resolv.conf,添加下面一行 nameserver 114.114.114.114 修改完成后service network restart进行重启,试一下yum upda ...
- SQL语句的整合
基础语法 https://blog.csdn.net/m0_37989980/article/details/103413942 CRUD 提供给数据库管理员的基本操作,CRUD(Create, Re ...
- python type 与 metaclass理解
简介 众所周知,type在一般情况下,我们都会去获取一个对象的类型,然后进行类型的比较:除此之外,type还有一个不为人知的作用:动态的创建类.在了解这个之前,首先了解以下type和isinstanc ...