0
0

はじめに

pygameでパックマン風のゲームを作りました。

説明

黄の四角 : 自機(パックマン)
赤の四角 : 敵
青の四角 : メダル的なもの

十字キーで移動します。

一度的に当たったら「Game Over」と表示して3秒後にウィンドウを閉じます。
青の四角を全部取ったら「Game Clear」と表示して3秒後にウィンドウを閉じます。

スクリーンショット 2024-07-01 18.37.38.png

ソースコード

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

おわり

できた。

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