python--pygame03
1.设置飞船位置移动
设置飞船的移动速度为1
game_function.py
import sys import pygame from setting import Settings from ship import Ship def check_events(ship): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: ##键盘的按键用python中的event表示。每次按键都被注册一个KEYDOWN事件 if event.key == pygame.K_RIGHT: #右键 ship.rect.centerx+=1 #飞船移动位置向右移动一个
elif event.key==pygame.K_LEFT:
ship.rect.centerx-=1
elif event.type == pygame.KEYUP: #松开键盘时向右移动为false
if event.key == pygame.K_RIGHT:
ship.moving_right=False
elif event.key == pygame.K_LEFT:
ship.moving_right = False
def update_screen(ai_settings,screen,ship): screen.fill(ai_settings.bg_color) ship.blitime() pygame.display.flip()
ship.py
import pygame class Ship(): def __init__(self,screen): self.screen=screen self.image=pygame.image.load('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 self.moving_right=False def update(self): if self.moving_right: self.rect.centerx+=1 #绘制飞船 def blitime(self): self.screen.blit(self.image,self.rect)
2.改造:设置飞船能持续不断移动,玩家按着键盘不送飞船能持续移动。且控制飞船的移动位置不超过屏幕范围
ship.py
import pygame class Ship(): def __init__(self,ai_settings,screen): self.screen=screen self.ai_settings=ai_settings self.image=pygame.image.load('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 self.center=float(self.rect.centerx) self.moving_right=False self.moving_left = False def update(self): 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.rect.centerx=self.center #绘制飞船 def blitime(self): self.screen.blit(self.image,self.rect)
game_function.py
import sys import pygame from setting import Settings from ship import Ship def check_events(ship): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: ship.moving_right=True elif event.key==pygame.K_LEFT: ship.moving_left=True elif event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: ship.moving_right=False elif event.key == pygame.K_LEFT: ship.moving_left = False def update_screen(ai_settings,screen,ship): screen.fill(ai_settings.bg_color) ship.blitime() pygame.display.flip()
setting.py
class Settings(): def __init__(self,bg_color): #__init__是类的方法。每创建新实例时会自动调用 screen_width = input("please input what you like the screen width,default 800") self.screen_width = int(screen_width) screen_height = input("please input what you like the screen height,default 1200") self.screen_height = int(screen_height) self.bg_color = bg_color self.ship_speed_factor=0.5
allien_invasion.py
import pygame import game_functions as gf from ship import Ship from setting import Settings def run_game(): pygame.init() ai_settings=Settings('white') 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()
至此:飞船能根据键盘的操作左右移动,且在屏幕范围内移动