import pygame import random pygame.init() # Ukuran layar WIDTH, HEIGHT = 600, 700 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Balapan Mobil 2D") clock = pygame.time.Clock() font = pygame.font.SysFont(None, 36) big_font = pygame.font.SysFont(None, 60) # Warna GREEN = (40, 150, 60) GRAY = (55, 55, 55) WHITE = (255, 255, 255) RED = (220, 40, 40) BLUE = (30, 100, 220) YELLOW = (255, 220, 0) BLACK = (20, 20, 20) # Jalan road = pygame.Rect(100, 0, 400, HEIGHT) # Mobil pemain player = pygame.Rect(280, 580, 40, 75) player_speed = 6 # Mobil lawan enemies = [] enemy_speed = 5 spawn_timer = 0 score = 0 game_over = False running = True while running: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Tekan R untuk mengulang if event.type == pygame.KEYDOWN: if event.key == pygame.K_r and game_over: player.x = 280 enemies.clear() score = 0 enemy_speed = 5 game_over = False if not game_over: # Kontrol mobil keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and player.left > road.left: player.x -= player_speed if keys[pygame.K_RIGHT] and player.right < road.right: player.x += player_speed # Membuat mobil lawan spawn_timer += 1 if spawn_timer >= 50: spawn_timer = 0 x = random.randint(road.left + 10, road.right - 50) enemies.append(pygame.Rect(x, -80, 40, 75)) # Gerakkan mobil lawan for enemy in enemies[:]: enemy.y += enemy_speed # Jika berhasil melewati pemain if enemy.top > HEIGHT: enemies.remove(enemy) score += 1 # Semakin tinggi skor, semakin cepat enemy_speed = min(12, 5 + score // 5) # Tabrakan if player.colliderect(enemy): game_over = True # Gambar layar screen.fill(GREEN) # Jalan pygame.draw.rect(screen, GRAY, road) # Garis jalan for y in range(-50, HEIGHT, 100): pygame.draw.rect(screen, WHITE, (295, y, 10, 50)) # Mobil pemain pygame.draw.rect(screen, BLUE, player) pygame.draw.rect(screen, BLACK, (player.x + 8, player.y + 10, 24, 20)) # Mobil lawan for enemy in enemies: pygame.draw.rect(screen, RED, enemy) pygame.draw.rect( screen, BLACK, (enemy.x + 8, enemy.y + 10, 24, 20) ) # Skor score_text = font.render(f"Skor: {score}", True, WHITE) screen.blit(score_text, (20, 20)) # Game over if game_over: overlay = pygame.Surface((WIDTH, HEIGHT)) overlay.set_alpha(180) overlay.fill(BLACK) screen.blit(overlay, (0, 0)) text = big_font.render("GAME OVER", True, RED) result = font.render(f"Skor: {score}", True, WHITE) restart = font.render("Tekan R untuk mengulang", True, WHITE) screen.blit(text, (180, 280)) screen.blit(result, (250, 350)) screen.blit(restart, (160, 400)) pygame.display.flip() pygame.quit()