飞机大战项目梳理(一)
尽力而为和志在必得还是有点差别的。
一、思路梳理
今天的内容:建立一个空白的窗口,在这个窗口里需要有一个小飞机(图片),小飞机可以根据用户按键向右或向左移动。
“建立窗口” 就需要一些参数:窗口宽高,窗口上方的名字,窗口颜色、如何退出窗口
“引入小飞船” 就需要写明:图片存储位置、图片在窗口的位置、图片颜色、图片大小
“根据按键左右移动” 需要写明:移动的距离、检测到按键动作、移动的范围
流程总结:先写粗糙的大块文件——>再加一个功能——>测试——>再加一个功能——>测试——>代码优化。
不断的迭代这个过程 ,就写出来了。
二、基本操作代码梳理
先要了解一些我们要用的基本操作代码
需要引入的包:pygame sys
初始化游戏:pygame.ihit()
创建一个屏幕对象:
- 屏幕大小——screen = pygame.display.set_mode((800,800))
- 窗口名字——pygame.display.set_caption(“Alien invasion”)
- 窗口颜色——screen. fil( bg_color ) bg_color=(a ,b ,c )
监视鼠标事件:
- 得到事件:for event in pygame.event.get()
- 退出:if event.type==pygame.QUIT :sys.exit()
- 如果是按键: If event.tpye==pygame.KEYDOWN
- 如果是按键抬起:if event.type==pygame.KEYUP
- 如果是按向左键: if event.type==pygame.K_LEFT
- 如果是按向右键:if event.tpye==pygame.K_RIGHT
其它细小的操作代码:
加载飞船图像:image=pygame.image.load(‘//‘)
获取飞船的外接矩形:rect=self.image.get_rect()
飞船的位置设置:self.rect.centerx=self.screen_rect.centerx self.rect.bottom=self.screen_rect.bottom
把飞船放在设置好的位置上: self.screen.blit ( self.image,self.rect )
三、代码块
运行的代码文件只有一个,其它作为配置引入 。
运行的文件为alien_invasion.py,它里面是对下面那些文件的调用
setting.py中写的是窗口的设置,比如大小、颜色
ship.py中写的是小飞船的位置、大小、移动速度。
game_function.py中写的是用到的函数,比如监测事件并响应。
下面附上代码:
#alien_invasion.py
import sys
import pygame
from setting import Setting
import game_function as gf
from ship import Ship
def run_game():
pygame.init()
ai_settings=Setting()
screen=pygame.display.set_mode((ai_setting.screen_width,ai_setting.screen_height))
ship=Ship(screen)
while True:
gf.check_event(ship)
ship.update()
gf.update_screen(ai_setting,screen,ship)
run_game()
#setting.py
import sys
import pygame
class Setting():
def __init__(self):
self.screen_width=500
self.screen_height=500
self.bg_color=(230,230,230)
self.ship_speed_factor=1.5
#ship.py
import sys
import pygame
from setting import Setting
class Ship():
def __init__(self,screen):
self.ai_setting=Setting()
self.screen=screen
self.image=pygame.image.load('image/ship.bmp')
self.rect=self.image.get_rect()
self.screen_rect=screen.get_rect()
self.moving_right=False
self.moving_left=False
self.rect.centerx=self.screen_rect.centerx
self.rect.bottom=self.screen_rect.bottom
self.center=float(self.rect.centerx)
def blitme(self):
self.screen.blit(self.image,self.rect)
def update(self):
if self.moving_right and self.rect.right<self.screen_rect.right:
self.center+=self.ai_setting.ship_speed_factor
elif self.moving_left and self.rect.left>0:
self.center-=self.ai_setting.ship_speed_factor
self.rect.centerx=self.center
#game_function.py
import sys
import pygame
def check_keydown_event(event,ship):
if event.key==K_RIGHT:
ship.moving_right=True
elif event.key==K_LIFT:
ship.moving_left=True
def check_keyup_event(event,ship)
if event.key==K_RIGHT:
ship.moving_right=False
elif event.key==K_LIFT:
ship.moving_left=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_event(event,ship)
elif event.type==pygame.KEYUP
check_keyup_event(event,ship)
def update_screen(ai_setting,screen,ship):
screen.fill(ai_setting.bg_color)
ship.blitme()
pygame.display.flip()
还没有评论,来说两句吧...