1. ホーム
  2. python

python3 航空機戦争のソースコードとソースコード使用のチュートリアル(白人に最初の小さなゲームを作らせる)。

2022-02-14 10:32:48
<パス

python3飛行機バトル

I. ソースコードの使い方と環境設定に関するチュートリアル

1. 環境設定

pycharmを開き、ファイルに移動し、設定を開きます。

プロジェクトインタプリタを開き、右上の+記号をクリックします。

pygame モジュールの検索とインポート

この時点で、環境は設定されています。

2. ソースコードの使い方のチュートリアル

新しいPythonフォルダを作成し、名前を"airplane"とします。
新しいフォルダの下に、ゲーム用の画像を保存するために "images" という名前の別のフォルダを作成します。

以下の画像をデスクトップにダウンロードし(必ずリネームしてください)、"images"フォルダにドラッグします(直接ドラッグ&ドロップしてもかまいません)。

画像の名前をbackgroundに変更し、png形式で保存します。

画像の名前を bullet1 に変更し、png 形式で保存します。

画像を enemy1 にリネームし、png 形式で保存します。

画像の名前をme1に変更し、png形式で保存します。

次に、"plane" フォルダに "plane_main" という名前の Python ファイルを作成します。
そして、次のコードをコピーして、完了です。

II. ソースコード

import random
import pygame


# Constants for screen size
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
# Frame rate for refresh
FRAME_PER_SEC = 60
# Timer constants for creating enemy machines
CREATE_ENEMY_EVENT = pygame.USEREVENT
# Hero fires bullet events
HERO_FIRE_EVENT = pygame.USEREVENT + 1


class GameSprite(pygame.sprite:)
    """Airplane Wars Game Sprite"""

    def __init__(self, image_name, speed=1):

        # Call the initialization method of the parent class
        super(). __init__()

        # Define the properties of the object
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):

        # Move in the vertical direction of the screen
        self.rect.y += self.speed


class Background(GameSprite):
    """Game background sprite"""

    def __init__(self, is_alt=False):

        # 1. call parent class methods to implement sprite creation (image/rect/speed)
        super(). __init__(". /images/background.png")

        # 2. determine if it is an alternate image, if so, need to set the initial position
        if is_alt:
            self.rect.y = -self.rect.height

    def update(self):

        # 1. call the parent class method to implement
        super().update()

        # 2. determine whether to move out of the screen, if so, set the image to the top of the screen
        if self.rect.y >= SCREEN_RECT.height:
            self.rect.y = -self.rect.height


class Enemy(GameSprite):
    """Enemy sprite"""

    def __init__(self):

        # 1. call the parent class method, create the enemy sprite, and specify the enemy picture
        super(). __init__(". /images/enemy1.png")

        # 2. specify the initial random speed of the enemy aircraft 1 ~ 3
        self.speed = random.randint(1, 3)

        # 3. specify the initial random position of the enemy aircraft
        self.rect.bottom = 0

        max_x = SCREEN_RECT.width - self.rect.width
        self.rect.x = random.randint(0, max_x)

    def update(self):

        # 1. call parent method to keep vertical flight
        super().update()

        # 2. determine whether to fly out of the screen, if so, need to remove enemy aircraft from the sprite group
        if self.rect.y >= SCREEN_RECT.height:
            # print("fly out of the screen, need to remove from the sprite group ... ")
            # The kill method removes the sprite from all sprite groups, and the sprite is automatically destroyed
            self.kill()

    def __del__(self):
        # print("Enemy machine hung %s" % self.rect)
        pass


class Hero(GameSprite):
    """HeroSprite"""

    def __init__(self):

        # 1. call parent class method to set image&speed
        super(). __init__(". /images/me1.png", 0)

        # 2. set the initial position of the hero
        self.rect.centerx = SCREEN_RECT.centerx
        self.rect.bottom = SCREEN_RECT.bottom - 120

        # 3. create a sprite group of bullets
        self.bullets = pygame.sprite.Group()

    def update(self):

        # Hero moves horizontally
        self.rect.x += self.speed

        # Control that the hero cannot leave the screen
        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.right > SCREEN_RECT.right:
            self.rect.right = SCREEN_RECT.right

    def fire(self):
        print("Firing bullets... ")

        for i in (0, 1, 2):
            # 1. create bullet sprite
            bullet = Bullet()

            # 2. set the position of the sprite
            bullet.rect.bottom = self.rect.y - i * 20
            bullet.rect.centerx = self.rect.centerx

            # 3. Add sprites to the sprite group
            self.bullets.add(bullet)


class Bullet(GameSprite):
    """Bullet sprite"""

    def __init__(self):

        # Call parent class method, set bullet image, set initial velocity
        super(). __init__(". /images/bullet1.png", -2)

    def update(self):

            # Call the parent method to make the bullet fly in the vertical direction
        super().update()

        # Determine if the bullet is flying off the screen
        if self.rect.bottom < 0:
            self.kill()

    def __del__(self):
        print("Bullet was destroyed... ")


class PlaneGame(object):
    """Plane Wars main game"""

    def __init__(self):
        print("Game initialization")

        # 1. create the game's window
        self.screen = pygame.display.set_mode(SCREEN_RECT.size)
        # 2. create the game's clock
        self.clock = pygame.time.Clock()
        # 3. call private methods, sprite and sprite group creation
        self.__create_sprites()

        # 4. set timer event - create enemy 1s
        pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
        pygame.time.set_timer(HERO_FIRE_EVENT, 500)

    def __create_sprites(self):

        # Create background sprites and sprite groups
        bg1 = Background()
        bg2 = Background(True)

        self.back_group = pygame.sprite.Group(bg1, bg2)

        # Create a sprite group of enemy planes
        self.enemy_group = pygame.sprite.Group()

        # Create sprites and sprite groups for heroes
        self.hero = Hero()
        self.hero_group = pygame.sprite.Group(self.hero)

    def start_game(self):
        print("Game started... ")

        while True:
            # 1. set the refresh frame rate
            self.clock.tick(FRAME_PER_SEC)
            # 2. listen to events
            self.__event_handler()
            # 3. collision detection
            self.__check_collide()
            # 4. update/draw sprite groups
            self.__update_sprites()
            # 5. update the display
            pygame.display.update()

    def __event_handler(self):

        for event in pygame.event.get():

            # Determine whether to exit the game
            if event.type == pygame.QUIT:
                PlaneGame.__game_over()
            elif event.type == CREATE_ENEMY_EVENT:
                # print("Enemy aircraft out... ")
                # Create enemy sprite
                enemy = Enemy()

                # Add enemy sprites to the enemy sprite group
                self.enemy_group.add(enemy)
            elif event.type == HERO_FIRE_EVENT:
                self.hero.fire()
            # elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
            # print("Move right.

III. ゲームエフェクトのショーケース

IV. 結論

この記事が役に立ったら、ブロガーに「いいね!」を押してください!!!