尽力而为和志在必得还是有点差别的。
今天的内容:建立一个空白的窗口,在这个窗口里需要有一个小飞机(图片),小飞机可以根据用户按键向右或向左移动。
“建立窗口” 就需要一些参数:窗口宽高,窗口上方的名字,窗口颜色、如何退出窗口
“引入小飞船” 就需要写明:图片存储位置、图片在窗口的位置、图片颜色、图片大小
“根据按键左右移动” 需要写明:移动的距离、检测到按键动作、移动的范围
流程总结:先写粗糙的大块文件——>再加一个功能——>测试——>再加一个功能——>测试——>代码优化。
不断的迭代这个过程 ,就写出来了。
先要了解一些我们要用的基本操作代码
需要引入的包: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()