2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PygameでShootingゲーム 01

Last updated at Posted at 2018-10-12

目標:

Pygame でShootingゲームを作る 01

Tasks

  • player.pngでPlayerクラスを作成
  • player は左右に動く
  • background.png で背景設定

プロジェクトストラクチャー

  • project/ -- 全てを入れるフォルダ(ディレクトリ)
    • img/ -- 画像を保存するフォルダ(ディレクトリ)
      • player.png
      • background.png
    • app.py -- codeを書くファイル

player.pngでPlayerクラス
player は右左と動く
background.png で背景設定


まずはインポート

import pygame
import random
import os

コンスタントを設定

WIDTH = 400
HEIGHT = 600
FPS = 80

# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)
BLUE = (0, 0, 255)

Assets: 使う部品の設定

# ディレクトリのパスを格納
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, "img")


pygame初期化

# pygame を初期化
pygame.init()
# ゲーム画面のSurfaceであるscreen を設定
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# ウィンドウ上部のタイトルを設定
pygame.display.set_caption("Shooting!")
# フレームを管理する時計をclockに格納
clock = pygame.time.Clock()

クラスを作成

# ---- Player Class ----
class Player(pygame.sprite.Sprite):
    # sprite for the Player
    def __init__(self):
        super().__init__()
        self.image = pygame.transform.scale(player_img, (50, 38))
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()

        # 最初の座標を設定
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10

        # 左右に動くスピード
        self.speedx = 0

    def update(self):
        self.speedx = 0

        # get_pressed()で現在押されているKeyの状態が含まれているdictionaryを返す
        # 押されている場合は True を返す
        keystate = pygame.key.get_pressed()
        
        # もし、K_LEFT、K_RIGHTが押されていたら
        # speedxを変更する
        if keystate[pygame.K_LEFT]:
            self.speedx = -10
        if keystate[pygame.K_RIGHT]:
            self.speedx = 10
        
        # player.rectに常にspeedx値を足す
        self.rect.x += self.speedx

        # もし、player.rectの右が画面幅より大きい場合
        if self.rect.right > WIDTH:
            # player.rectのrightは画面幅になる(つまり止まる)
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

画像を読み込む

# ---- LOAD IMAGES:  ----
background = pygame.image.load(
    os.path.join(img_folder, "background.png")).convert()

# backgroundのRectを格納
background_rect = background.get_rect()

# player画像を読み込む
player_img = pygame.image.load(
    os.path.join(img_folder, "player.png")).convert()

スプライトの設定

# ---- SPRITES:  ----
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

ゲームループを作成

# ゲームが走っているかを判断するBool値
running = True

while running:

    # ---- EVENTS: イベントを管理 ----
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # ---- UPDATE: 状態の更新 ----
    all_sprites.update()

    # ---- DRAW: 描写するもの準備 ----
    screen.fill(BLACK)
    screen.blit(background, background_rect)
    all_sprites.draw(screen)

    # ---- FLIP: 画面を描く ----
    pygame.display.flip()

    # ---- フレームを空ける ----
    clock.tick(FPS)

pygame.quit()

参照しているページ
Pygame
Program Arcade Games
KidsCanCode

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?