系列文章目录

第一章:武装飞船

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限制飞船活动范围的更多相关文章

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

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

  2. Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动

    系列文章目录 第一章:武装飞船 06:让飞船移动 一.驾驶飞船 下面来让玩家能够左右移动飞船.我们将编写代码,在用户按左或右箭头键时做出响应.我们将首先专注于向右移动,再使用同样的原理来控制向左移动. ...

  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. Java - happens-before

    Java - happens-before JSR-133对 happens-before 关系的定义如下: 如果一个操作 happens-before 另一个操作,那么第一个操作的执行结果将对第二个 ...

  2. Python3 filter()函数和map()函数

    filter(function or None,iterable) 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换. 该接收两个参数,第 ...

  3. Docker-Compose实现Mysql主从

    1. 简介 通过使用docker-compose 搭建一个主从数据库,本示例为了解耦 将两个server拆分到了两个compose文件中,当然也可以放到一个compose文件中 演示mysql版本:5 ...

  4. Tarjan算法模板(USACO03FALL受欢迎的牛)

    好文章 #include<bits/stdc++.h> using namespace std; const int N = 10010, M = 50010; int n, m; int ...

  5. 干货合集│最好用的 python 库都在这

    一.分词 - jieba 优秀的中文分词库,依靠中文词库,利用词库确定汉子之间关联的概率,形成分词结果 import jieba word = '伟大的中华人民共和国' jieba.cut(word) ...

  6. 深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  7. 如何写出同事看不懂的Java代码?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra. 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码 ...

  8. JavaScript中动态生成表格

    动态生成表格,首先需要输入并获取动态的数字,html中结构代码如下:行:<input type="text" id="row" value="5 ...

  9. raid划分及创建

    RAID 的划分 RAID 0 - RAID 0是最早出现的,是数据分条技术.组建磁盘阵列中最简单的一种形式,可以提高整个磁盘的性能和吞吐量,利用率100%,缺点:一但磁盘损坏,raid0将失效,数据 ...

  10. Turtle绘图——python简单上手小案例

    Turtle绘图 Turtle模块提供了在二维平面上移动的环境. Turtle可以实现位置.航向和各种可能的状态和动作. import turtle as tu roo = tu.Turtle() # ...