見出し画像

Pythonでブロック回避ゲームを作る part2

前回pythonでちょっとしたゲームを作ったのですが、ゲーム作るの楽しいなと思い改良を加えてみました。

前回のプログラムではプレイヤーは左右にしか動けず、敵は上からしか降ってこなかったのですが、

プレイヤーを全方向、敵は上下左右のどこからか出現するように改良してみました。

ゲーム画面
import pygame
import random

pygame.init()

# 画面サイズの設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# 色の定義
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

# プレイヤー設定(初期位置を画面中央に設定)
player_width = 50
player_height = 50
player_x = (screen_width / 2) - (player_width / 2)
player_y = (screen_height / 2) - (player_height / 2)
player_velocity = 5

# 敵(ブロック)の生成と初期設定
def create_enemy():
    side = random.choice(["top", "bottom", "left", "right"])
    if side == "top":
        return [random.randrange(0, screen_width), -50, random.randint(-1, 1), random.randint(1, 3)]
    elif side == "bottom":
        return [random.randrange(0, screen_width), screen_height + 50, random.randint(-1, 1), -random.randint(1, 3)]
    elif side == "left":
        return [-50, random.randrange(0, screen_height), random.randint(1, 3), random.randint(-1, 1)]
    else: # right
        return [screen_width + 50, random.randrange(0, screen_height), -random.randint(1, 3), random.randint(-1, 1)]

enemies = []
enemy_timer = 0
enemy_interval = 100  # 敵が出現する間隔(フレーム数)

clock = pygame.time.Clock()
running = True

# ゲームのメインループ
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_velocity
    if keys[pygame.K_RIGHT] and player_x < screen_width - player_width:
        player_x += player_velocity
    if keys[pygame.K_UP] and player_y > 0:
        player_y -= player_velocity
    if keys[pygame.K_DOWN] and player_y < screen_height - player_height:
        player_y += player_velocity

    screen.fill(white)

    # プレイヤーの描画
    pygame.draw.rect(screen, black, [player_x, player_y, player_width, player_height])

    # 敵の追加
    enemy_timer += 1
    if enemy_timer >= enemy_interval:
        enemies.append(create_enemy())
        enemy_timer = 0

    # 敵の更新と描画
    for enemy in enemies[:]:
        enemy_x, enemy_y, velocity_x, velocity_y = enemy
        pygame.draw.rect(screen, red, [enemy_x, enemy_y, 50, 50])
        # 敵の位置を更新
        enemy[0] += velocity_x
        enemy[1] += velocity_y

        # 敵が画面外に出たらリストから削除
        if enemy_x < -100 or enemy_x > screen_width + 100 or enemy_y < -100 or enemy_y > screen_height + 100:
            enemies.remove(enemy)

        # 衝突のチェック
        if player_x < enemy_x + 50 and player_x + player_width > enemy_x and player_y < enemy_y + 50 and player_y + player_height > enemy_y:
            running = False

    pygame.display.update()
    clock.tick(60)

pygame.quit()

前回より難しくなったので少し遊びごたえが出てきた感じがします。
pythonでゲームは作ったことなかったので、新鮮で面白いです。
気が向いたらもっと改良加えて作り込んでみます。

シキでした。

この記事が気に入ったらサポートをしてみませんか?