import pygame import random import math pygame.init() WIDTH, HEIGHT = 800, 600 win = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Mini Smash Karts") clock = pygame.time.Clock() # Colors WHITE = (255, 255, 255) RED = (255, 0, 0) # Kart settings PLAYER_SPEED = 3 BULLET_SPEED = 7 # Load simple kart image PLAYER_IMG = pygame.Surface((40, 20)) PLAYER_IMG.fill((0, 200, 0)) ENEMY_IMG = pygame.Surface((40, 20)) ENEMY_IMG.fill((200, 0, 0)) class Kart: def __init__(self, x, y, color, is_player=False): self.image = PLAYER_IMG if is_player else ENEMY_IMG self.rect = self.image.get_rect(center=(x, y)) self.angle = 0 self.speed = 0 self.health = 100 self.is_player = is_player self.cooldown = 0 self.bullets = [] def draw(self, win): rotated = pygame.transform.rotate(self.image, -self.angle) rect = rotated.get_rect(center=self.rect.center) win.blit(rotated, rect.topleft) def move(self, keys): if keys[pygame.K_w]: self.speed = PLAYER_SPEED elif keys[pygame.K_s]: self.speed = -PLAYER_SPEED else: self.speed = 0 if keys[pygame.K_a]: self.angle += 3 if keys[pygame.K_d]: self.angle -= 3 rad = math.radians(self.angle) self.rect.x += math.sin(rad) * self.speed self.rect.y += math.cos(rad) * -self.speed def shoot(self): if self.cooldown == 0: rad = math.radians(self.angle) dx = math.sin(rad) * BULLET_SPEED dy = math.cos(rad) * -BULLET_SPEED bullet = Bullet(self.rect.centerx, self.rect.centery, dx, dy) self.bullets.append(bullet) self.cooldown = 20 def update(self): if self.cooldown > 0: self.cooldown -= 1 for b in self.bullets: b.update() if not win.get_rect().colliderect(b.rect): self.bullets.remove(b) class Bullet: def __init__(self, x, y, dx, dy): self.rect = pygame.Rect(x, y, 5, 5) self.dx = dx self.dy = dy def update(self): self.rect.x += self.dx self.rect.y += self.dy def draw(self, win): pygame.draw.rect(win, RED, self.rect) # Initialize player and enemies player = Kart(400, 300, (0, 255, 0), is_player=True) enemies = [Kart(random.randint(100, 700), random.randint(100, 500), (255, 0, 0)) for _ in range(3)] def handle_enemy_movement(enemy): enemy.angle += random.choice([-1, 0, 1]) rad = math.radians(enemy.angle) enemy.rect.x += math.sin(rad) * 1 enemy.rect.y += math.cos(rad) * -1 def check_bullet_hits(): for bullet in player.bullets: for enemy in enemies: if enemy.rect.colliderect(bullet.rect): enemy.health -= 10 player.bullets.remove(bullet) break def draw_window(): win.fill((30, 30, 30)) player.draw(win) for bullet in player.bullets: bullet.draw(win) for enemy in enemies: enemy.draw(win) pygame.display.update() # Game loop running = True while running: clock.tick(60) keys = pygame.key.get_pressed() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False player.move(keys) player.update() if keys[pygame.K_SPACE]: player.shoot() for enemy in enemies: handle_enemy_movement(enemy) check_bullet_hits() draw_window() pygame.quit()