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)

运行效果:

猜你喜欢

转载自blog.csdn.net/veray/article/details/85309128