Python微信打飛機遊戲編程學習筆記04

對主程序的優化,看別人的文章到這裏,雖然沒完全懂。

此段代碼主要是針對,主程序的優化和建立類來進行管理畫面元素。

對原程序進行了修改,優化和整理

import pygame                   #導入pygame庫
from pygame.locals import *     #導入pygame庫中的一些常量
from sys import exit            #導入sys庫中的exit函數


#創建Hero類,繼承自pygame.sprite.Sprite
class Hero(pygame.sprite.Sprite):

    def __init__(self,hero_surface,hero_init_pos):
        pygame.sprite.Sprite.__init__(self)
        self.image =  hero_surface
        self.rect = self.image.get_rect()
        self.rect.topleft = hero_init_pos
        self.speed = 6

    def move(self,offset):
        hero_x=self.rect.left+offset[pygame.K_RIGHT]-offset[pygame.K_LEFT]
        hero_y=self.rect.top+offset[pygame.K_DOWN]-offset[pygame.K_UP]
        
        if hero_x < 0:
            self.rect.left = 0
        elif hero_x > SCREEN_WIDTH - self.rect.width:
            self.rect.left = SCREEN_WIDTH - self.rect.width
        else:
            self.rect.left = hero_x
            
        
        if hero_y < 0:
            self.rect.top = 0
        elif hero_y > SCREEN_HEIGHT - self.rect.height:
            self.rect.top = SCREEN_HEIGHT - self.rect.height
        else:
            self.rect.top = hero_y


#定義窗口的分辨率
SCREEN_WIDTH =  480
SCREEN_HEIGHT =  640


FRAME_RATE = 60

ANIMATE_CYCLE = 20

#計數ticks
ticks = 0

#去除了不斷繪製飛機,容易消耗資源,使用clock,控制最大幀率FRAME_RATE
clock =pygame.time.Clock()

#創建字典,按下上下左右鍵的的增量
offset ={pygame.K_LEFT:0,pygame.K_RIGHT:0,pygame.K_UP:0,pygame.K_DOWN:0}

#初始化遊戲
pygame.init()

screen = pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])
pygame.display.set_caption('這是一個打飛機遊戲!')

#載入背景圖
background = pygame.image.load('images/background.png')

#載入資源圖
hero_surface=[]
hero_surface.append(pygame.image.load('images/me1.png'))
hero_surface.append(pygame.image.load('images/me2.png'))
hero_pos=[200,500]

#創建玩家
hero = Hero(hero_surface[0],hero_pos)

#事件循環
while True:
    clock.tick(FRAME_RATE)
    #繪製背景
    screen.blit(background,(0,0))

    #繪製飛機,在循環過程中讓每過25個週期切換2個飛機圖。這樣會產生動圖的效果
    if ticks >= ANIMATE_CYCLE:
        ticks = 0

    hero.imgae =hero_surface[ticks//(ANIMATE_CYCLE//2)]
    screen.blit(hero.imgae,hero.rect)


    ticks += 1


    #更新屏幕
    pygame.display.update()


    #處理遊戲退出
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()


        #按鍵按下和放開的事件,按下時座標增3,放開,置零
        if event.type == pygame.KEYDOWN:
            if event.key in offset:
                offset[event.key] = hero.speed   #增量的大小,主飛機移動速度的快慢


        elif event.type == pygame.KEYUP:
            if event.key in offset:
                offset[event.key] = 0

    hero.move(offset)

運行效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章