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()
至此:飞船能根据键盘的操作左右移动,且在屏幕范围内移动

 


 

 

 

posted @ 2021-02-04 14:40  小仙女学Linux  阅读(61)  评论(0编辑  收藏  举报