import pygame
import random
import sys
# 初期化
pygame.init()
WIDTH, HEIGHT = 800, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("無限ジャンプゲーム")
# 色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
# プレイヤー
player_size = 50
player_x = 100
player_y = HEIGHT - player_size - 10
player_vel_y = 0
gravity = 1
jump_power = -15
# 障害物
obstacles = []
obstacle_speed = 5
obstacle_frequency = 1500 # ミリ秒
last_obstacle = 0
# スコア
score = 0
font = pygame.font.SysFont(None, 36)
clock = pygame.time.Clock()
def draw_player(x, y):
pygame.draw.rect(screen, RED, (x, y, player_size, player_size))
def create_obstacle():
height = random.randint(30, 70)
return {
'x': WIDTH,
'height': height,
'width': 20,
'passed': False
}
def draw_obstacles():
for obstacle in obstacles:
pygame.draw.rect(screen, BLACK, (obstacle['x'], HEIGHT - obstacle['height'], obstacle['width'], obstacle['height']))
# メインゲームループ
running = True
while running:
current_time = pygame.time.get_ticks()
screen.fill(WHITE)
# イベント処理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and player_y == HEIGHT - player_size - 10:
player_vel_y = jump_power
# プレイヤー更新
player_vel_y += gravity
player_y += player_vel_y
if player_y > HEIGHT - player_size - 10:
player_y = HEIGHT - player_size - 10
player_vel_y = 0
# 障害物生成
if current_time - last_obstacle > obstacle_frequency:
obstacles.append(create_obstacle())
last_obstacle = current_time
# 障害物更新
for obstacle in obstacles[:]:
obstacle['x'] -= obstacle_speed
# 衝突判定
if (player_x < obstacle['x'] + obstacle['width'] and
player_x + player_size > obstacle['x'] and
player_y + player_size > HEIGHT - obstacle['height']):
running = False
# スコア計算
if not obstacle['passed'] and obstacle['x'] + obstacle['width'] < player_x:
obstacle['passed'] = True
score += 1
if obstacle['x'] < -obstacle['width']:
obstacles.remove(obstacle)
# 描画
draw_player(player_x, player_y)
draw_obstacles()
# スコア表示
score_text = font.render(f"スコア: {score}", True, BLACK)
screen.blit(score_text, (10, 10))
pygame.display.update()
clock.tick(60)
# ゲームオーバー
print(f"ゲームオーバー! 最終スコア: {score}")
pygame.quit()
sys.exit()