飞机大战项目梳理(一)

尽力而为和志在必得还是有点差别的。

一、思路梳理

今天的内容:建立一个空白的窗口,在这个窗口里需要有一个小飞机(图片),小飞机可以根据用户按键向右或向左移动。

“建立窗口”  就需要一些参数:窗口宽高,窗口上方的名字,窗口颜色、如何退出窗口

“引入小飞船” 就需要写明:图片存储位置、图片在窗口的位置、图片颜色、图片大小

“根据按键左右移动” 需要写明:移动的距离、检测到按键动作、移动的范围

流程总结:先写粗糙的大块文件——>再加一个功能——>测试——>再加一个功能——>测试——>代码优化。

不断的迭代这个过程 ,就写出来了。

 

二、基本操作代码梳理

先要了解一些我们要用的基本操作代码

需要引入的包:pygame  sys

初始化游戏:pygame.ihit()

创建一个屏幕对象:

  1.  屏幕大小——screen  =  pygame.display.set_mode((800,800))   
  2.  窗口名字——pygame.display.set_caption("Alien invasion")
  3. 窗口颜色——screen. fil( bg_color )            bg_color=(a ,b ,c )

监视鼠标事件:   

  1. 得到事件:for event in pygame.event.get()   
  2. 退出:if event.type==pygame.QUIT :sys.exit()
  3. 如果是按键: If event.tpye==pygame.KEYDOWN
  4. 如果是按键抬起:if event.type==pygame.KEYUP
  5. 如果是按向左键: if  event.type==pygame.K_LEFT
  6. 如果是按向右键: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()
    

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纸城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值