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 1 year has passed since last update.

Day 2: python初心者がダンジョンゲーム作成してみる

Posted at

Day 2: ゲームオブジェクトを作成する

今回作成した物の画像

pygameの動画を撮影拒否されたので、画像添付
スクリーンショット 2023-07-06 231622.png

  1. ライブラリのインポート:
import pygame
import random

Pygameは、Pythonでゲームやマルチメディアアプリケーションを作成するためのモジュールです。また、ランダムな数値を生成するためにrandomモジュールもインポートされています。

  1. Pygameの初期化:
pygame.init()

Pygameモジュールを初期化します。

  1. ゲームの初期設定:
screen_width = 800
screen_height = 600

common_width = 50
common_height = 50

画面の幅と高さ、オブジェクトの共通の大きさを設定しています。

  1. 画面の作成:
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("My Game")

set_mode()関数を使用して画面を作成し、set_caption()関数を使用してウィンドウのタイトルを設定しています。

  1. Playerクラスの定義:
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("player.png")
        self.image = pygame.transform.scale(self.image, (common_width, common_height))
        self.rect = self.image.get_rect()
        self.rect.center = (screen_width // 2, screen_height // 2)
        self.speed = 1

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT]:
            self.rect.x += self.speed
        if keys[pygame.K_UP]:
            self.rect.y -= self.speed
        if keys[pygame.K_DOWN]:
            self.rect.y += self.speed

Playerクラスは、プレイヤーのキャラクターを表すオブジェクトです。pygame.sprite.Spriteクラスを継承しています。__init__()メソッドでは、プレイヤーの画像を読み込み、サイズを変更し、位置と速度を初期化しています。update()メソッドでは、キーボードの入力に応じてプレイヤーの位置を更新します。

  1. Enemyクラスの定義:
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("enemy.png")
        self.image = pygame.transform.scale(self.image, (common_width, common_height))
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(0, screen_width), random.randint(0, screen_height))
        self.speed = 1

    def update(self):
        self.rect.x += self.speed
        if self.rect.left > screen_width:
            self.rect.right = 0
            self.rect.bottom = random.randint(0, screen_height)

Enemyクラスは、敵キャラクターを表すオブジェクトです。pygame.sprite.Spriteクラスを継承しています。__init__()メソッドでは、敵の画像を読み込み、サイズを変更し、ランダムな位置と速度を初期化しています。update()メソッドでは、敵の位置を水平方向に移動させます。また、敵が画面外に出た場合には、ランダムな位置に再配置します。

  1. Itemクラスの定義:
class Item(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("item.png")
        self.image = pygame.transform.scale(self.image, (100, common_height))
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(0, screen_width), random.randint(0, screen_height))
        self.speed = 1

    def update(self):
        self.rect.x += self.speed
        if self.rect.left > screen_width:
            self.rect.right = 0

Itemクラスは、アイテムを表すオブジェクトです。pygame.sprite.Spriteクラスを継承しています。__init__()メソッドでは、アイテムの画像を読み込み、サイズを変更し、ランダムな位置と速度を初期化しています。update()メソッドでは、アイテムの位置を水平方向に移動させます。また、アイテムが画面外に出た場合には、画面の反対側に再配置します。

  1. プレイヤー、敵、アイテムの作成:
player = Player()

enemies = pygame.sprite.Group()
for _ in range(5):
    enemy = Enemy()
    enemies.add(enemy)

items = pygame.sprite.Group()
for _ in range(10):
    item = Item()
    items.add(item)

Playerクラスのインスタンスを作成し、EnemyクラスとItemクラスの複数のインスタンスを生成します。それぞれのインスタンスは、それぞれのグループに追加されます。

  1. ゲームループ:
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player.update()
    enemies.update()
    items.update()

    screen.fill((0, 0, 0))

    screen.blit(player.image, player.rect)
    for enemy in enemies:
        screen.blit(enemy.image, enemy.rect)
    for item in items:
        screen.blit(item.image, item.rect)

    pygame.display.flip()

ゲームのメインループが実行されます。イベントを処理し、プレイヤー、敵、アイテムの位置を更新します。screen.fill()関数を使用して画面を塗りつぶし、プレイヤー、敵、アイテムの画像を画面上に描画します。最後にpygame.display.flip()を呼び出して、画面を更新します。

  1. ゲームの終了:
pygame.quit()

ゲームループが終了した後、Pygameを終了させます。

まとめ

今回で、インスタンスの概念や、継承、初期化について、学習ができました!
作成したものが目で見える形になると、少し楽しくなる!

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?