【Python】赛车小游戏实战制作流程

1.定义常量

class Constant:

    SCREEN_WIDTH = 400 # 页面宽度
    SCREEN_HEIGHT = 600 # 页面长度
    BLACK = (0, 0, 0) 
    RED = "#FF0000"  # 结束界面
    FPS = 60   # 帧率大小
    SCORE = 0  # 初始分数
    SPEED = 5  # 敌人的运动速度

首先定义一个类,这个类的作用是定义一些以后会用得到的常量,例如页面的长宽高,游戏帧率的大小,这里的帧率选择60帧(可以根据自身喜好调节)。

2.设置敌人

class Enemy1(pygame.sprite.Sprite):

    def __init__(self):
        super(Enemy1,self).__init__()     # 调用父类的init方法初始化对象
        x,y = (random.randint(22,378),0)
        self.image = pygame.image.load("Demo/Enemy.png")
        self.surf = pygame.Surface((42, 70))
        self.rect = self.surf.get_rect(center=(x,y))  # 设置敌人的位置

    def move(self):
        global SCORE
        self.rect.move_ip(0,Constant.SPEED)
        if self.rect.top > Constant.SCREEN_HEIGHT:  # 设置加分机制
            Constant.SCORE += 1
            self.rect.top = 0                       
            self.rect.left = random.randint(0,356)  # 随机出现

设置一个敌人命名为Enemy1,初始化Enemy1,设置基础的参数,例如敌人的位置,敌人的大小,敌人随机出现的位置。最后利用一个if语句来设置我们的加分机制使得游戏更具挑战性。在设置完成我们第一个敌人以后我们可以复制粘贴,再增加一个敌人,使得游戏具体可玩性。

3.设置玩家

class Player(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()     # 调用父类的init方法初始化对象
        x,y = (Constant.SCREEN_WIDTH/2,Constant.SCREEN_HEIGHT/2)
        self.image = pygame.image.load("Demo/Player.png")
        self.surf = pygame.Surface((40,75))
        self.rect = self.image.get_rect(left=170,bottom=Constant.SCREEN_HEIGHT -21)

    def move(self):

        press_keys = pygame.key.get_pressed()

        if press_keys[K_DOWN] and self.rect.bottom <= Constant.SCREEN_HEIGHT -21:
            self.rect.move_ip(0, 5)
        if press_keys[K_UP] and self.rect.top >= 0:
            self.rect.move_ip(0, -5)
        if press_keys[K_RIGHT] and self.rect.right <= Constant.SCREEN_WIDTH - 4:
            self.rect.move_ip(5, 0)
        if press_keys[K_LEFT] and self.rect.left >= 0:
            self.rect.move_ip(-5, 0)

还是一样,我们首先初始化玩家的属性,将玩家的位置定义在居中靠下,设置玩家的大小。在初始化完成以后,我们利用pygame的功能,设置键盘让我们的赛车跑起来,并且要注意不要让玩家跑到我们的屏幕外面去了。

4.运行

class Game:

    def __init__(self):
        pygame.init()
        # 字体和文字
        self.font_big = pygame.font.SysFont("Impact", 60)
        self.font_small = pygame.font.SysFont("Verdana", 20)
        self.game_over = self.font_big.render("GAME OVER", True, Constant.BLACK)

        self.SPEED_UP = pygame.USEREVENT + 1
        pygame.time.set_timer(self.SPEED_UP, 1000)  # 设置计时器
        
        #设置标题以及界面大小 
        pygame.display.set_caption("逆行飙车")
        size = width, height = (Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT)
        self.screen = pygame.display.set_mode(size)
        self.clock = pygame.time.Clock()

        self.background = pygame.image.load("Demo/AnimatedStreet.png")

    def run(self):
        player = Player()
        enemy1 = Enemy1()
        enemy2 = Enemy2()

        enemies = pygame.sprite.Group()
        enemies.add(enemy1,enemy2)

        all_sprites = pygame.sprite.Group()
        all_sprites.add(player)
        all_sprites.add(enemy1,enemy2)

        pygame.mixer.Sound("Demo/background.wav").play(-1)
        OUT_OF_RANGE = pygame.USEREVENT + 1

        while True:
            self.screen.blit(self.background, (0, 0))
            scores = self.font_small.render(str(Constant.SCORE), True, Constant.BLACK)
            self.screen.blit(scores, (10, 10))

            for sprite in all_sprites:
                self.screen.blit(sprite.image, sprite.rect)
                sprite.move()

            for event in pygame.event.get():

                if event.type == self.SPEED_UP:
                    Constant.SPEED += 1

                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

            if pygame.sprite.spritecollide(player, enemies, True):  # True将敌人所在的组全部清除掉

                pygame.mixer.Sound("Demo/crash.wav").play()
                time.sleep(1)
                self.screen.fill(Constant.RED)
                self.screen.blit(self.game_over, (80, 150))

                pygame.display.update()
                time.sleep(2)

                pygame.quit()
                sys.exit()


            pygame.display.update()
            self.clock.tick(Constant.FPS)

在运行这个类里面,我们可以首先设置自己想要的字体,这里的字体我们可以自己在自己的电脑里找到电脑自带的字体。【Python】赛车小游戏实战制作流程_第1张图片

 随后我们将我们的玩家和敌人都放入到调用的pygame精灵这个库里面,使得我们的游戏运行起来。利用while循环让我们的游戏启动起来。

5.启动


if __name__=='__main__':   # 使得游戏真正运行起来
    game = Game()
    game.run()

调用这段代码使得我们的游戏真正运行起来。

你可能感兴趣的:(python)