![見出し画像](https://assets.st-note.com/production/uploads/images/134975128/rectangle_large_type_2_035d176a54f99fa0056caa459b4f408e.png?width=1200)
Pythonでブロック回避ゲームを作る part2
前回pythonでちょっとしたゲームを作ったのですが、ゲーム作るの楽しいなと思い改良を加えてみました。
前回のプログラムではプレイヤーは左右にしか動けず、敵は上からしか降ってこなかったのですが、
プレイヤーを全方向、敵は上下左右のどこからか出現するように改良してみました。
![](https://assets.st-note.com/img/1711277962990-g7vo9h6wOg.png?width=1200)
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でゲームは作ったことなかったので、新鮮で面白いです。
気が向いたらもっと改良加えて作り込んでみます。
シキでした。