import pygame
import random
# 初期化
pygame.init()
# ゲーム画面の設定
width, height = 800, 600
screen = pygame.display.set_mode*1
pygame.display.set_caption("Galaxian")
# 色の設定
black = (0, 0, 0)
white = (255, 255, 255)
yellow = (255, 255, 0)
# プレイヤーの設定
player_width = 50
player_height = 50
player_x = width // 2 - player_width // 2
player_y = height - 2 * player_height
player_speed = 5
# 敵の設定
enemy_width = 50
enemy_height = 50
enemies =
# 弾の設定
bullet_width = 5
bullet_height = 10
bullet_speed = 7
player_bullets =
enemy_bullets = []
# フォントの設定
font = pygame.font.SysFont(None, 55)
# スコアの初期化
score = 0
# ゲームループ
running = True
clock = pygame.time.Clock()
def create_enemy():
enemy_x = random.randint(0, width - enemy_width)
enemy_y = random.randint(-50, -10)
enemy_speed = random.uniform(1, 3) # ランダムな速度
return [enemy_x, enemy_y, enemy_speed]
for i in range(5):
enemies.append(create_enemy())
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_speed
if keys[pygame.K_RIGHT] and player_x < width - player_width:
player_x += player_speed
if keys[pygame.K_UP] and player_y > 0:
player_y -= player_speed
if keys[pygame.K_DOWN] and player_y < height - player_height:
player_y += player_speed
# 弾の発射
if keys[pygame.K_SPACE]:
bullet_x = player_x + player_width // 2 - bullet_width // 2
bullet_y = player_y
player_bullets.append([bullet_x, bullet_y])
# 敵の移動
for enemy in enemies:
enemy[1] += enemy[2] # 速度を考慮
if enemy[1] > height:
enemies.remove(enemy)
enemies.append(create_enemy())
score += 10
# 敵がランダムで弾を発射
if random.randint(1, 100) == 1:
enemy_bullet_x = enemy[0] + enemy_width // 2 - bullet_width // 2
enemy_bullet_y = enemy[1] + enemy_height
enemy_bullets.append([enemy_bullet_x, enemy_bullet_y])
# 弾の移動と当たり判定
for bullet in player_bullets:
bullet[1] -= bullet_speed
if bullet[1] < 0:
player_bullets.remove(bullet)
for enemy in enemies:
if (
enemy[0] < bullet[0] < enemy[0] + enemy_width
and enemy[1] < bullet[1] < enemy[1] + enemy_height
):
player_bullets.remove(bullet)
enemies.remove(enemy)
score += 100
# プレイヤーと敵の当たり判定
for enemy in enemies:
if (
player_x < enemy[0] + enemy_width
and player_x + player_width > enemy[0]
and player_y < enemy[1] + enemy_height
and player_y + player_height > enemy[1]
):
running = False
# 敵の弾の移動と当たり判定
for bullet in enemy_bullets:
bullet[1] += bullet_speed
if bullet[1] > height:
enemy_bullets.remove(bullet)
if (
player_x < bullet[0] < player_x + player_width
and player_y < bullet[1] < player_y + player_height
):
running = False
# 描画
screen.fill(black)
pygame.draw.rect(screen, white, [player_x, player_y, player_width, player_height])
for enemy in enemies:
pygame.draw.rect(screen, yellow, [enemy[0], enemy[1], enemy_width, enemy_height])
for bullet in player_bullets:
pygame.draw.rect(screen, white, [bullet[0], bullet[1], bullet_width, bullet_height])
for bullet in enemy_bullets:
pygame.draw.rect(screen, yellow, [bullet[0], bullet[1], bullet_width, bullet_height])
# スコア表示
score_text = font.render("Score: " + str(score), True, white)
screen.blit(score_text, [10, 10])
# ゲーム終了条件の判定
if not enemies:
win_text = font.render("YOU WIN!", True, white)
screen.blit(win_text, [width // 2 - 100, height // 2])
pygame.display.flip()
pygame.time.delay(2000) # 2秒間待機
running = False
elif not running:
game_over_text = font.render("GAME OVER", True, white)
screen.blit(game_over_text, [width // 2 - 120, height // 2])
pygame.display.flip()
pygame.time.delay(2000) # 2秒間待機
pygame.display.flip()
clock.tick(60)
pygame.quit()
*1:width, height