はじめに
pygameでパックマン風のゲームを作りました。
説明
黄の四角 : 自機(パックマン)
赤の四角 : 敵
青の四角 : メダル的なもの
十字キーで移動します。
一度的に当たったら「Game Over」と表示して3秒後にウィンドウを閉じます。
青の四角を全部取ったら「Game Clear」と表示して3秒後にウィンドウを閉じます。
ソースコード
py main.py
import pygame
import random
# Pygameの初期化
pygame.init()
# ウィンドウの設定
width, height = 640, 480
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Pac-Man")
# 色の定義
black = (0, 0, 0)
white = (255, 255, 255)
yellow = (255, 255, 0)
red = (255, 0, 0)
blue = (0, 0, 255)
# フォントの設定
font = pygame.font.Font(None, 74)
# フレームレート
clock = pygame.time.Clock()
fps = 30
# パックマンの設定
pacman_size = 20
pacman_x = width // 2
pacman_y = height // 2
pacman_speed = 5
# 敵の設定
enemy_size = 20
enemy_speed = 2
enemies = [{"x": random.randint(0, width - enemy_size), "y": random.randint(0, height - enemy_size)} for _ in range(3)]
# コインの設定
coin_size = 10
coins = [{"x": random.randint(0, width - coin_size), "y": random.randint(0, height - coin_size)} for _ in range(10)]
# ゲームループ
running = True
game_clear = False
game_over = False
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]:
pacman_x -= pacman_speed
if keys[pygame.K_RIGHT]:
pacman_x += pacman_speed
if keys[pygame.K_UP]:
pacman_y -= pacman_speed
if keys[pygame.K_DOWN]:
pacman_y += pacman_speed
# パックマンの画面外移動制限
pacman_x = max(0, min(width - pacman_size, pacman_x))
pacman_y = max(0, min(height - pacman_size, pacman_y))
# 敵の移動
for enemy in enemies:
if enemy["x"] < pacman_x:
enemy["x"] += enemy_speed
elif enemy["x"] > pacman_x:
enemy["x"] -= enemy_speed
if enemy["y"] < pacman_y:
enemy["y"] += enemy_speed
elif enemy["y"] > pacman_y:
enemy["y"] -= enemy_speed
# コインの収集
for coin in coins[:]:
if abs(pacman_x - coin["x"]) < coin_size and abs(pacman_y - coin["y"]) < coin_size:
coins.remove(coin)
# 敵との衝突判定
for enemy in enemies:
if abs(pacman_x - enemy["x"]) < enemy_size and abs(pacman_y - enemy["y"]) < enemy_size:
game_over = True
running = False
# コインがすべて収集された場合
if not coins:
game_clear = True
running = False
# 画面の描画
win.fill(black)
pygame.draw.rect(win, yellow, (pacman_x, pacman_y, pacman_size, pacman_size))
for enemy in enemies:
pygame.draw.rect(win, red, (enemy["x"], enemy["y"], enemy_size, enemy_size))
for coin in coins:
pygame.draw.rect(win, blue, (coin["x"], coin["y"], coin_size, coin_size))
pygame.display.update()
clock.tick(fps)
# ゲームクリアの表示
if game_clear:
win.fill(black)
text = font.render("Game Clear", True, white)
text_rect = text.get_rect(center=(width / 2, height / 2))
win.blit(text, text_rect)
pygame.display.update()
pygame.time.wait(3000)
# ゲームオーバーの表示
if game_over:
win.fill(black)
text = font.render("Game Over", True, white)
text_rect = text.get_rect(center=(width / 2, height / 2))
win.blit(text, text_rect)
pygame.display.update()
pygame.time.wait(3000)
pygame.quit()
起動
$ python main.py
おわり
できた。