Advertisement

12.3 火箭

阅读量:

rocket_fly.py

复制代码
 # -*- coding:utf_8 -*-

    
 """
    
 作者:蓝小武
    
 日期:2022年01月13日
    
 """
    
 import sys
    
 import pygame
    
 from rocket_settings import Settings
    
 from rocket import Rocket
    
 import rocket_functions as rf
    
  
    
 def run_game():
    
     """初始化游戏并创建一屏幕对象"""
    
     pygame.init()
    
     ai_settings = Settings()
    
     screen = pygame.display.set_mode(
    
     (ai_settings.screen_width,ai_settings.screen_heigh))
    
     pygame.display.set_caption("一飞冲天")
    
     """设置背景色"""
    
     bg_color = (150,162,140)
    
     '''创建一支火箭'''
    
     rocket = Rocket(ai_settings,screen)
    
     """开始游戏的主循环"""
    
     while True:
    
     '''监视键盘和鼠标事件'''
    
     rf.check_events(rocket)
    
     rocket.update()
    
     '''每次循环时都重绘屏幕'''
    
     rf.update_screen(ai_settings,screen,rocket)
    
 run_game()

rocket_settings.py

复制代码
 # -*- coding:utf_8 -*-

    
 """
    
 作者:蓝小武
    
 日期:2022年01月13日
    
 """
    
 class Settings():
    
     """存储《一飞冲天》的所有设置的类"""
    
     def __init__(self):
    
     '''初始化游戏的设置'''
    
     self.screen_width = 1200
    
     self.screen_heigh = 800
    
     self.bg_color = (150,162,140)
    
     self.rocket_speed_factor = 1.5

rocket.py

复制代码
 # -*- coding:utf_8 -*-

    
 """
    
 作者:蓝小武
    
 日期:2022年01月13日
    
 """
    
 import pygame
    
  
    
 class Rocket():
    
  
    
     def __init__(self,ai_settings,screen):
    
     '''初始化火箭并设置其初始位置'''
    
     self.screen = screen
    
     self.ai_settings = ai_settings
    
     '''加载火箭图像并获取其外接矩形'''
    
     self.image = pygame.image.load('images/rocket.bmp')
    
     self.rect = self.image.get_rect()
    
     self.screen_rect = screen.get_rect()
    
     '''将每艘新火箭放在屏幕中央'''
    
     self.rect.centerx = self.screen_rect.centerx
    
     self.rect.centery = self.screen_rect.centery
    
     '''在火箭的属性center中存储小数值'''
    
     self.center1 = float(self.rect.centerx)
    
     self.center2 = float(self.rect.centery)
    
     '''移动标志'''
    
     self.moving_right = False
    
     self.moving_left = False
    
     self.moving_up = False
    
     self.moving_down = False
    
  
    
     def update(self):
    
     '''根据移动标志调整火箭的位置'''
    
     '''更新火箭的center值,而不是rect'''
    
     if self.moving_right and self.rect.right < self.screen_rect.right:
    
         self.center1 += self.ai_settings.rocket_speed_factor
    
     if self.moving_left and self.rect.left > 0:
    
         self.center1 -= self.ai_settings.rocket_speed_factor
    
     if self.moving_up and self.rect.top > 0:
    
         self.center2 -= self.ai_settings.rocket_speed_factor
    
     if self.moving_down and self.rect.bottom < self.screen_rect.bottom:
    
         self.center2 += self.ai_settings.rocket_speed_factor
    
     '''根据self.center更新rect对象'''
    
     self.rect.centerx = self.center1
    
     self.rect.centery = self.center2
    
  
    
     def blitme(self):
    
     '''在指定位置绘制火箭'''
    
     self.screen.blit(self.image,self.rect)

rocket_function.py

复制代码
 # -*- coding:utf_8 -*-

    
 """
    
 作者:蓝小武
    
 日期:2022年01月13日
    
 """
    
 import sys
    
 import pygame
    
 def check_keydown_events(event,rocket):
    
     '''响应按键'''
    
     if event.key == pygame.K_RIGHT:
    
     rocket.moving_right = True
    
     elif event.key == pygame.K_LEFT:
    
     rocket.moving_left = True
    
     elif event.key == pygame.K_UP:
    
     rocket.moving_up = True
    
     elif event.key == pygame.K_DOWN:
    
     rocket.moving_down = True
    
  
    
 def check_keyup_events(event,rocket):
    
     if event.key == pygame.K_RIGHT:
    
     rocket.moving_right = False
    
     elif event.key == pygame.K_LEFT:
    
     rocket.moving_left = False
    
     elif event.key == pygame.K_UP:
    
     rocket.moving_up = False
    
     elif event.key == pygame.K_DOWN:
    
     rocket.moving_down = False
    
  
    
 def check_events(rocket):
    
     '''响应按键和鼠标事件'''
    
     for event in pygame.event.get():
    
     if event.type == pygame.QUIT:
    
         sys.exit()
    
     elif event.type == pygame.KEYDOWN:
    
         check_keydown_events(event,rocket)
    
     elif event.type == pygame.KEYUP:
    
         check_keyup_events(event,rocket)
    
 def update_screen(ai_settings,screen,ship):
    
     '''更新屏幕上的图像,并切换到新屏幕'''
    
     '''每次循环时都重绘屏幕'''
    
     screen.fill(ai_settings.bg_color)
    
     ship.blitme()
    
     '''让最近绘制的屏幕可见'''
    
     pygame.display.flip()

全部评论 (0)

还没有任何评论哟~