Untitled

 avatar
unknown
plain_text
5 months ago
4.8 kB
2
Indexable
import pygame
import random
import sys

# Initialize pygame
pygame.init()

# Constants
WIDTH, HEIGHT = 800, 800
BACKGROUND_COLOR = (255, 255, 255)
SQUARE_SIZE = 80
BOARD_COLOR = (0, 0, 0)
PIECE_RADIUS = 25
SAFE_COLOR = (173, 216, 230)
TRACK_COLORS = [(255, 0, 0), (0, 0, 255), (0, 255, 0), (255, 255, 0)]  # Red, Blue, Green, Yellow

# Set up the game window
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Ludo Game")

# Load images for dice (optional for dice images)
dice_images = [pygame.Surface((60, 60)) for _ in range(6)]
for i in range(6):
    dice_images[i].fill((i + 1) * 40)  # Just an example, you can replace this with actual dice images

# Player class
class Player:
    def _init_(self, color, start_pos):
        self.color = color
        self.pieces = [start_pos] * 4  # All pieces start at position 0
        self.home_positions = [0, 0, 0, 0]
        self.in_game = [False, False, False, False]
        self.finished = 0

    def roll_dice(self):
        return random.randint(1, 6)

    def move_piece(self, piece_index, steps):
        if not self.in_game[piece_index] and steps == 6:  # Move piece from home
            self.pieces[piece_index] = steps
            self.in_game[piece_index] = True
        else:
            self.pieces[piece_index] += steps

    def reset_piece(self, piece_index):
        self.pieces[piece_index] = 0
        self.in_game[piece_index] = False

# Game class
class LudoGame:
    def _init_(self):
        self.players = [Player((255, 0, 0), 0), Player((0, 0, 255), 0), Player((0, 255, 0), 0), Player((255, 255, 0), 0)]
        self.current_turn = 0
        self.dice_roll = 0
        self.font = pygame.font.SysFont("Arial", 30)
        self.board = self.create_board()

    def create_board(self):
        board = []
        for i in range(15):
            row = []
            for j in range(15):
                if (i in [0, 14] or j in [0, 14]) or (7 <= i <= 8 and 7 <= j <= 8):
                    row.append("safe")
                else:
                    row.append("track")
            board.append(row)
        return board

    def draw_board(self):
        screen.fill(BACKGROUND_COLOR)

        # Draw the grid
        for row in range(15):
            for col in range(15):
                color = BOARD_COLOR if self.board[row][col] == "track" else SAFE_COLOR
                pygame.draw.rect(screen, color, (col * SQUARE_SIZE, row * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE), 2)

        # Draw the players' pieces
        for i, player in enumerate(self.players):
            for j, piece_pos in enumerate(player.pieces):
                if player.in_game[j]:
                    pygame.draw.circle(screen, player.color,
                                       (piece_pos % 10 * SQUARE_SIZE + SQUARE_SIZE // 2, piece_pos // 10 * SQUARE_SIZE + SQUARE_SIZE // 2), PIECE_RADIUS)

    def draw_dice(self):
        dice_image = dice_images[self.dice_roll - 1] if self.dice_roll else dice_images[0]
        screen.blit(dice_image, (WIDTH - 100, HEIGHT - 100))

    def check_for_hit(self, player, piece_index):
        for i, other_player in enumerate(self.players):
            if i == self.current_turn:
                continue
            if player.pieces[piece_index] in other_player.pieces:
                # If there's a hit, reset the piece
                hit_piece_index = other_player.pieces.index(player.pieces[piece_index])
                other_player.reset_piece(hit_piece_index)

    def handle_turn(self):
        player = self.players[self.current_turn]
        self.dice_roll = player.roll_dice()
        print(f"Player {self.current_turn + 1} rolled a {self.dice_roll}")

        # Ask player which piece to move (simple prompt for testing purposes)
        # You would replace this with a GUI-based piece selection logic
        piece_index = random.choice([i for i in range(4) if player.in_game[i]])
        player.move_piece(piece_index, self.dice_roll)

        self.check_for_hit(player, piece_index)

    def game_over(self):
        for player in self.players:
            if all(piece >= 100 for piece in player.pieces):
                print(f"Player {self.players.index(player) + 1} wins!")
                return True
        return False

    def play_game(self):
        while not self.game_over():
            self.draw_board()
            self.draw_dice()
            pygame.display.update()

            self.handle_turn()

            self.current_turn = (self.current_turn + 1) % 4  # Move to next player
            pygame.time.delay(1000)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

if _name_ == "_main_":
    game = LudoGame()
    game.play_game()
Editor is loading...
Leave a Comment