pygame動畫3

這是一個完整的示例 但是沒有加入聲音

import pygame
import random
from pygame import *
from sys import exit

WIDTH, HEIGHT = 600, 480
FPS = 30
jet_image = "D:\\workspace\\game\\data\\jet.png"
cloud_image = "D:\\workspace\\game\\data\\cloud.png"
missile_image = "D:\\workspace\\game\\data\\missile.png"


class GameSprite(pygame.sprite.Sprite):
    """遊戲精靈基類"""

    def __init__(self, speed=1):
        # 調用父類的初始化方法
        super().__init__()

        # 加載圖像 一個30*30的綠色小方塊
        self.surf = pygame.image.load(jet_image)
        self.surf.set_colorkey((255, 255, 255), RLEACCEL)
        # 設置尺寸
        self.rect = self.surf.get_rect()
        # 記錄速度
        self.speed = speed

    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)

        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        if self.rect.bottom >= HEIGHT:
            self.rect.bottom = HEIGHT


class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super(Enemy, self).__init__()
        self.surf = pygame.image.load(missile_image)
        self.surf.set_colorkey((255, 255, 255), RLEACCEL)
        self.rect = self.surf.get_rect(
            center=(
                random.randint(WIDTH + 20, WIDTH + 100),
                random.randint(0, HEIGHT),
            )
        )
        self.speed = random.randint(5, 20)

    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            self.kill()


class Cloud(pygame.sprite.Sprite):
    """
    背景的雲
    """
    def __init__(self):
        super(Cloud, self).__init__()
        self.surf = pygame.image.load(cloud_image)
        self.surf.set_colorkey((0, 0, 0), RLEACCEL)
        self.rect = self.surf.get_rect(
            center=(
                random.randint(WIDTH + 20, WIDTH + 100),
                random.randint(0, HEIGHT),
            )
        )

    def update(self):
        self.rect.move_ip(-5, 0)
        if self.rect.right < 0:
            self.kill()


def main():
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()

    # 精靈和精靈組
    game = GameSprite()
    enemies = pygame.sprite.Group()
    clouds = pygame.sprite.Group()
    all_sprites = pygame.sprite.Group()
    all_sprites.add(game)

    # 自定義事件
    # 每隔250毫秒生成敵人
    ADDENEMY = pygame.USEREVENT + 1
    pygame.time.set_timer(ADDENEMY, 250)
    # 每隔一秒生成雲
    ADDCLOUD = pygame.USEREVENT + 2
    pygame.time.set_timer(ADDCLOUD, 1000)
    # 事件隊列
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
            elif event.type == ADDENEMY:
                # 創建新的敵人 並且加入到精靈組中
                new_enemy = Enemy()
                enemies.add(new_enemy)
                all_sprites.add(new_enemy)
            elif event.type == ADDCLOUD:
                # 創建新的雲並且加入到精靈組中
                new_cloud = Cloud()
                clouds.add(new_cloud)
                all_sprites.add(new_cloud)
        clock.tick(FPS)

        pressed_keys = pygame.key.get_pressed()
        # 屏幕背景色
        screen.fill((135, 206, 250))
        # 將我們的小方框繪製到屏幕中
        screen.blit(game.surf, game.rect)
        # 調用update方法來觸發事件

        # 將玩家和敵人繪製到屏幕中
        for entity in all_sprites:
            screen.blit(entity.surf, entity.rect)

        # 調用update方法每幀更新一次
        game.update(pressed_keys)
        enemies.update()
        clouds.update()
        # 碰撞檢測 檢測玩家是否和敵人相撞
        if pygame.sprite.spritecollideany(game, enemies):
            # If so, then remove the player and stop the loop
            pygame.time.wait(1200)
            print("Game Over!")
            game.kill()
            exit()
        pygame.display.update()


if __name__ == '__main__':
    main()

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