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

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

时间:2022-08-23 22:25:51浏览次数:67  
标签:飞船 07 settings Python self ship screen rect

系列文章目录

第一章:武装飞船

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类做修改

image

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)

image

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()
# 代码重构完成

image

4.运行效果

A:按下右箭头键后飞船向右移动,直到移动到游戏界面右边缘后停止。

image

B:按下左箭头键后飞船向左移动,直到移动到游戏界面左边缘后停止

image

二、学习笔记

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 星期二

标签:飞船,07,settings,Python,self,ship,screen,rect
From: https://www.cnblogs.com/Penetration-redhat/p/16617992.html

相关文章

  • 学习python-Day45
    今日学习内容一、表单标签补充知识name相当于字典的键,value相当于字典值。对于前端到后端传数据需要用到name属性,不然无法被后端识别该数据是什么。form表单在朝......
  • Python3项目初始化9-->用户登录和用户管理和密码加密
    26、用户登录页面修改使用用户登录现成的模板。鼠标右键查看页面原代码,直接复制粘贴:https://v3.bootcss.com/examples/signin/调整login.html代码,{%loadstatic%}<!docty......
  • python序列-元组
    元组-tuple元组(tuple)也是python中一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成,但是它是不可变序列。因此元组也称为不可变的列表。形式上元组......
  • Python if __name__ == '__main__':
    每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当该模块被直接执行的时候,__name__等于文件名(包含后缀.py);如果该模块impor......
  • day24--Java集合07
    Java集合0714.HashMap底层机制(k,v)是一个Node,实现了Map.Entry<K,V>,查看HashMap的源码可以看到jdk7.0的HashMap底层实现[数组+链表],jdk8.0底层[数组+链表+红黑树]14.......
  • 《Python神经网络编程》PDF高清版下载,
                               《 Python神经网络编程》PDF高清版免费下载地址   内容简介  · · · · ......
  • opencv-python常用函数
    一、安装pipinstallopencv-python二、图像读写cv2.imread(path,flag)返回值类型:np.ndarraycv2.imwrite(filename,image)三、常用绘图cv2.rectangle(image,......
  • Python 中 Iterator和Iterable的区别
    Python中list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。为什么?因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少......
  • Python3项目初始化8-->css和bootstrap入门学习
    24、CSS基础HTML盒模型divspanCSS选择器,常见属性值Bootstrap栅格系统,表单,表格,常用组件。Div一个盒子,默认站一行Span行内元素P段落元素为什么需要div?t......
  • 常用设计模式(Python版)
    1.设计模式是什么?有什么用?设计模式是软件开发过程中经过验证的、用于解决特定环境下、重复出现的、特定问题的解决方案。根据GoF(GangOfFour),设计模式被分为三类:创......