• python从入门到实践飞船游戏中怎么使飞船上下移动啊?运行时可以左右
  • python

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('images/ship.png')
       self.rect=self.image.get_rect()#rect表示矩形对象,此处获取了飞船的外接矩形
       self.screen_rect=screen.get_rect()

       #飞船放中央
       self.rect.centerx=self.screen_rect.centerx
       #center,centerx,centery分别表示放在x和y,x,y中央
       self.rect.centery=self.screen_rect.centery

       #在飞船的属性center中储存小数值
       self.centerx=float(self.rect.centerx)
       self.centery=float(self.rect.centery)

       self.moving_right=False
       self.moving_left=False
       self.moving_top=False
       self.moving_bottom=False

   def update(self):
       """根据移动标志调整飞船位置"""

       #更新飞船的center值,而不是rect
       if self.moving_right and self.rect.right<self.screen_rect.right:
           self.centerx+=self.ai_settings.ship_speed_factor
       if self.moving_left and self.rect.left>0:
           self.centerx-=self.ai_settings.ship_speed_factor
       if self.moving_top and self.rect.top<self.screen_rect.top:
           self.centery-=self.ai_settings.ship_speed_factor
       if self.moving_bottom and self.rect.bottom>0:
           self.centery+=self.ai_settings.ship_speed_factor

       #根据self.center更新rect
       self.rect.centerx=self.centerx
       self.rect.centery=self.centery
   def blitme(self):
       """指定位置放飞船"""
       self.screen.blit(self.image,self.rect)#绘制这艘船

alien_invasion.py

import pygame#开发游戏所需功能

from settings import Settings
from ship import Ship
import game_functions as gf

def run_game():
   pygame.init()#初始化背景设置
   ai_settings=Settings()
   screen=pygame.display.set_mode(#创建显示窗口
           (ai_settings.screen_width,ai_settings.screen_height))
   screen=pygame.display.set_mode((1200,700))#指定游戏尺寸宽和高
   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()#初始化游戏并开始循环

game_functions.py

import sys

import pygame

def check_keydown_events(event,ship):
   """响应按键"""
   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_DOWN:
       ship.moving_BOTTOM=True
   elif event.key==pygame.K_UP:
       ship.moving_TOP=True
def check_keyup_events(event,ship):
   """响应松开"""
   if event.key==pygame.K_RIGHT:
       ship.moving_right=False
   if event.key==pygame.K_LEFT:
       ship.moving_left=False
   if event.key==pygame.K_DOWN:
       ship.moving_bottom=False
   if event.key==pygame.K_UP:
       ship.moving_top=False

def check_events(ship):
   "相应鼠标按键和事件"
   for event in pygame.event.get():
       if event.type==pygame.QUIT:
           sys.exit()#退出游戏模块
       elif event.type==pygame.KEYDOWN:#检测到按了键
           check_keydown_events(event,ship)
       elif event.type==pygame.KEYUP:#松开按键
           check_keyup_events(event,ship)                  

def update_screen(ai_settings,screen,ship):
   #重绘屏幕
   screen.fill(ai_settings.bg_color)
   ship.blitme()

   #让屏幕可见
   pygame.display.flip()

settings.py

class Settings():
   "储存类"
   def __init__(self):
       """初始化游戏设置"""
       #屏幕设置
       self.screen_width=1200
       self.screen_height=700
       self.bg_color=(230,230,230)#设置背景色,RGB颜色定义
       self.ship_speed_factor=0.5


  • TIMI    2019-11-21 11:18:39
  • 阅读 946    收藏 0    回答 1
  • 邀请
  • 收藏
  • 分享
发送
登录 后发表评论
  • 51testing软件测试圈微信