《Python编程:从入门到实践》外星人入侵项目课后练习12-5
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《Python编程:从入门到实践》外星人入侵项目课后练习12-5,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5032字,纯文字阅读大概需要8分钟。
内容图文
![《Python编程:从入门到实践》外星人入侵项目课后练习12-5](/upload/InfoBanner/zyjiaocheng/619/122db939ec0f4c028766da967826f654.jpg)
最近在看 《python编程:从入门到实践》,书中的项目实践部分有一些课后练习,为了巩固自己学的东西,我选择了一些自己感兴趣的习题进行编程,目前只看到项目1部分,项目2还没开始,以后继续更新代码,因为自己是新手,欢迎大家对我编码过程中的不足和错误进行指正。
12-5:侧面射击
这个题目所需创建的py文件如下所示,题中没有要求显示外星人的操作,所以只需要一张飞船的照片(我提前将飞船顺时针旋转90度),放在image文件夹中即可。
下面是各个模块对应的代码块:
首先是基本游戏的一些基本设置,比如游戏屏幕的长宽、背景的颜色、子弹的速度、子弹的长宽、子弹的颜色以及子弹移动的速度等。
settings.py
class Settings():
def __init__(self):
# 定义屏幕的宽度和高度
self.screen_width = 1900
self.screen_height = 1000
self.bg_color = (230, 230, 230) # 设置背景色,浅灰色
self.ship_speed_factor = 1.5
self.bullet_speed_factor = 1
self.bullet_width = 15
self.bullet_height = 3
self.bullet_color = 60, 60, 60
self.bullets_allowed = 3
接下来是飞船的一些基本属性,包括如何导入飞船图片、飞船的初始位置、以及游戏开始后位置如何更新、飞船如何显示等。
ship.py
import pygame
class Ship():
def __init__(self,ai_settings,screen):
self.screen = screen
self.image = pygame.image.load('C:/Users/Xin/PycharmProjects/alien_invasion/image/ship.bmp')
self.ai_settings = ai_settings
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.rect.centery = self.screen_rect.centery
self.center = float(self.rect.centery)
self.moving_right = False
self.moving_left = False
def biltme(self):
self.screen.blit(self.image, self.rect)
def update(self):
''' 根据移动标志调整飞船位置'''
if self.moving_right:
self.center +=self.ai_settings.ship_speed_factor
if self.moving_left:
self.center -= self.ai_settings.ship_speed_factor
self.rect.centery = self.center
接下来是子弹的一些基本属性,包括如何产生子弹、子弹位置初始化、子弹位置如何更新、子弹的显示。
bullet.py
#创建子弹类,定义子弹的位置、如何变化以及显示子弹
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
def __init__(self,ai_settings,screen,ship):
super().__init__()
self.screen = screen
#在(0,0)处创建一个表示子弹的矩形,然后再设置位置
self.rect = pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)
self.rect.centery = ship.rect.centery
self.rect.right = ship.rect.right
# 存储用小数表示的子弹的位置
self.x = float(self.rect.x)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
self.x += self.speed_factor
self.rect.x = self.x
def draw_bullet(self):
pygame.draw.rect(self.screen,self.color,self.rect)
接下来是用到的主要函数,实时响应鼠标和键盘的操作从而更新飞船、子弹的位置,并显示对应的位置,或者结束游戏。
game_functions.py
'''
包含一系列函数,管理飞船、子弹的位置更新等等
'''
import sys
import pygame
from moving_up_down.bullet import Bullet
def check_events(ai_settings,screen,ship,bullets):
'''
响应按键和鼠标事件
:return:
'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,ai_settings,screen,ship,bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event,ship)
def update_screen(ai_settings,screen,ship,bullets):
"""
更新屏幕上的图像,并切换到新屏幕上
:param ai_settings:
:param ship:
:return:
"""
screen.fill(ai_settings.bg_color) # 将背景色填满整个屏幕
for bullet in bullets.sprites():
#返回一个包含bullets中所有精灵的列表
bullet.draw_bullet()
ship.biltme()
# 让最近绘制的屏幕可见
pygame.display.flip()
def check_keydown_events(event,ai_settings,screen,ship,bullets):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
elif event.key == pygame.K_SPACE:
fire_bullet(ai_settings,screen,ship,bullets)
elif event.key == pygame.K_q:
sys.exit()
def fire_bullet(ai_settings,screen,ship,bullets):
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
def check_keyup_events(event,ship):
if event.key == pygame.K_LEFT:
ship.moving_left = False
elif event.key == pygame.K_RIGHT:
ship.moving_right = False
def update_bullets(bullets,ai_settings):
#更新子弹位置
bullets.update()
for bullet in bullets.copy():
# 删除屏幕之外的子弹
if bullet.rect.left > ai_settings.screen_width:
bullets.remove(bullet)
最后是主文件,创建一系列需要用到的对象,开始游戏。
alien_invasion.py
'''
主文件
创建一系列、整个游戏都需用到的对象
'''
import pygame
from pygame.sprite import Group
from moving_up_down.settings import Settings
from moving_up_down import game_functions as f
from moving_up_down.ship import Ship
def run_game():
#初始化游戏并创建一个屏幕对象
pygame.init()
ai_settings = 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)
bullets = Group()
# #开始游戏主循环
while True:
# 监视鼠标和键盘事件,根据事件进行相应的操作
f.check_events(ai_settings, screen, ship, bullets)
# 更新位置
ship.update()
f.update_bullets(bullets,ai_settings)
# 每次循环都重新绘制屏幕
f.update_screen(ai_settings, screen, ship, bullets)
run_game()
《Python编程:从入门到实践》外星人入侵项目课后练习12-5
内容总结
以上是互联网集市为您收集整理的《Python编程:从入门到实践》外星人入侵项目课后练习12-5全部内容,希望文章能够帮你解决《Python编程:从入门到实践》外星人入侵项目课后练习12-5所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。