0
0

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 - Platform ゲーム - [4] Player クラスの作成

Posted at

Pygame Platform ゲームを作成 [4]

Playerクラスの作成

Tasks

  • sprites.pyファイルを作成
  • sprites.pyにPlayerクラスを作成
  • main.py の update(), draw(), event() メソッドを実装する

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

  • project/ -- 全てを入れるフォルダ(ディレクトリ)
    • main.py -- ゲームをスタートするファイル
    • settings.py -- constantを入れておくファイル
    • sprites.py -- PlayerなどのSpriteのコードを書くファイル
sprites.py

# Sprite classes
import pygame as pg
from settings import *


class Player(pg.sprite.Sprite):
    def __init__(self):
        super().__init__()  # Spriteクラスからの継承を初期化
        self.image = pg.Surface((30, 40))  # Surfaceを作成
        self.image.fill(YELLOW)  # 色を設定 (YELLOWはsettings.pyから)
        self.rect = self.image.get_rect()  # SurfaceのRectを取得
        self.vx = 0  # xのvelocityを初期化
        self.vy = 0  # yのvelocityを初期化

    def update(self):
        self.vx = 0
        # pygame.key.get_pressed()は現在押されているkeyを取得する
        keys = pg.key.get_pressed()  
        if keys[pg.K_LEFT]:  # LEFTキーが押されていたら
            self.vx = -5
        if keys[pg.K_RIGHT]:  # RIGHTキーが押されていたら
            self.vx = 5

        self.rect.x += self.vx  # vxを常にrectに足す
        self.rect.y += self.vy  # vyを常にrectに足す

main.py

import pygame as pg
import random
from settings import *
from sprites import *


class Game:
    def __init__(self):
        # ゲームを初期化
        self.running = True
        pg.init()
        pg.mixer.init()
        self.screen = pg.display.set_mode((WIDTH, HEIGHT))
        pg.display.set_caption(TITLE)
        self.clock = pg.time.Clock()
        self.all_sprites = None
        self.playing = False
        
        # NEW!! playerインスタンスを入れる「空箱」を用意
        self.player = None

    def new(self):
        # ゲームオーバー後のニューゲーム

        # 全てのSpriteを入れる、all_spritesグループを作成
        self.all_sprites = pg.sprite.Group()
        # Playerクラスのインスタンス
        self.player = Player()
        # all_spritesに足す
        self.all_sprites.add(self.player)
        self.run()

    def run(self):
        # ゲームループ
        self.playing = True
        while self.playing:
            self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    # NEW!! 
    def update(self):
        # アップデート
        self.all_sprites.update()  # spriteのupdateメソッドを実行
    
    #NEW!!
    def events(self):
        # イベント
        for event in pg.event.get():
            if event.type == pg.QUIT:
                if self.playing:
                    self.playing = False
                self.running = False
    
    # NEW!!
    def draw(self):
        # 描画
        self.screen.fill(BLACK)
        self.all_sprites.draw(self.screen)  # spriteを描画する
        pg.display.flip()  # 更新したものを描画する

    def show_start_screen(self):
        # ゲームスタート画面
        pass

    def show_go_screen(self):
        # ゲームオーバー画面
        pass


g = Game()
g.show_start_screen()
while g.running:
    g.new()
    g.show_go_screen()

pg.quit()

settings.py

# game options/settings
TITLE = "Jumpy!"
WIDTH = 480
HEIGHT = 600
FPS = 60

# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
DARKGREY = (27, 140, 141)
LIGHTGREY = (189, 195, 199)
GREEN = (60, 186, 84)
RED = (219, 50, 54)
YELLOW = (244, 194, 13)
BLUE = (72, 133, 237)

:link: Links :link:

Github platformer

Pygame - Platform ゲーム - [3]

Pygame - Platform ゲーム - [2]

Pygame - Platform ゲーム - [1]

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?