Подробный гайд: Шахматная доска с фигурой при загрузке Astra Linux

Гайд по созданию шахматной доски на Python/Pygame с автозапуском в Astra Linux. Готовый код, установка и отладка.

2026.04.23                  


Подробный гайд: Шахматная доска с фигурой при загрузке Astra LinuxПодробный гайд: Шахматная доска с фигурой при загрузке Astra Linux Вот подробное руководство по созданию шахматной доски с фигурой, которая будет автоматически запускаться при загрузке Astra Linux.

Содержание

  1. Установка необходимых компонентов
  2. Создание программы шахматной доски
  3. Настройка автостарта в Astra Linux
  4. Полный рабочий пример

1. Установка необходимых компонентов {#установка}

Установка Python и Pygame

Откройте терминал и выполните команды:

# Обновление списков пакетов
sudo apt update

# Установка Python (если не установлен)
sudo apt install python3 python3-pip

# Установка библиотеки Pygame
pip3 install pygame

Проверка установки

python3 --version
pip3 list | grep pygame

2. Создание программы шахматной доски {#создание}

Простой пример шахматной доски с одной фигурой

Создайте файл chess_board.py:

nano ~/chess_board.py

Вставьте следующий код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Шахматная доска с фигурой для Astra Linux
"""

import pygame
import sys

# Инициализация Pygame
pygame.init()

# Константы
WIDTH = 800
HEIGHT = 800
SQUARE_SIZE = WIDTH // 8

# Цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
GOLD = (255, 215, 0)

# Создание окна
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Шахматная доска - Astra Linux')

# Шрифты
font = pygame.font.Font(None, 74)
small_font = pygame.font.Font(None, 36)

def draw_board():
    """Рисует шахматную доску 8x8"""
    for row in range(8):
        for col in range(8):
            # Определяем цвет клетки
            if (row + col) % 2 == 0:
                color = LIGHT_BROWN
            else:
                color = DARK_BROWN

            # Рисуем клетку
            x = col * SQUARE_SIZE
            y = row * SQUARE_SIZE
            pygame.draw.rect(screen, color, (x, y, SQUARE_SIZE, SQUARE_SIZE))

    # Рисуем рамку вокруг доски
    pygame.draw.rect(screen, GOLD, (0, 0, WIDTH, HEIGHT), 5)

def draw_piece(piece_char, row, col):
    """Рисует шахматную фигуру на указанной позиции"""
    x = col * SQUARE_SIZE + SQUARE_SIZE // 2
    y = row * SQUARE_SIZE + SQUARE_SIZE // 2

    # Рендерим символ фигуры
    text_surface = font.render(piece_char, True, BLACK)
    text_rect = text_surface.get_rect(center=(x, y))

    screen.blit(text_surface, text_rect)

def draw_coordinates():
    """Рисует координаты на доске (A-H, 1-8)"""
    letters = 'ABCDEFGH'
    numbers = '87654321'

    # Буквы снизу
    for i, letter in enumerate(letters):
        x = i * SQUARE_SIZE + SQUARE_SIZE // 2
        y = HEIGHT - 20
        text = small_font.render(letter, True, BLACK)
        screen.blit(text, (x - 10, y))

    # Цифры слева
    for i, number in enumerate(numbers):
        x = 10
        y = i * SQUARE_SIZE + SQUARE_SIZE // 2
        text = small_font.render(number, True, BLACK)
        screen.blit(text, (x, y - 10))

def main():
    """Основной цикл программы"""
    clock = pygame.time.Clock()
    running = True

    while running:
        # Обработка событий
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False

        # Очистка экрана
        screen.fill(WHITE)

        # Рисуем доску
        draw_board()

        # Рисуем координаты
        draw_coordinates()

        # Рисуем фигуру (например, белого короля на позиции e4)
        # Символы шахматных фигур Unicode:
        # Белые: ♔ ♕ ♖ ♗ ♘ ♙
        # Черные: ♚ ♛ ♜ ♝ ♞ ♟
        draw_piece('♔', 4, 4)  # Король на e4 (ряд 4, колонка 4)

        # Обновление экрана
        pygame.display.flip()

        # Ограничение FPS
        clock.tick(60)

    pygame.quit()
    sys.exit()

if __name__ == '__main__':
    main()

Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).

Делаем файл исполняемым

chmod +x ~/chess_board.py

Тестирование программы

python3 ~/chess_board.py

3. Настройка автостарта в Astra Linux {#автостарт}

Astra Linux использует графический инструмент fly-admin-autostart для управления автозапуском программ.

Способ 1: Через графический интерфейс

  1. Откройте меню "Пуск" -> "Настройки" -> "Автозапуск программ"
  2. Нажмите кнопку "Добавить"
3. Укажите:
  • Имя: Шахматная доска
  • Команда: /usr/bin/python3 /home/ваш_пользователь/chess_board.py
  • Комментарий: Шахматная доска с фигурой
  1. Нажмите "OK"

Способ 2: Ручная настройка (создание .desktop файла)

Создайте файл автозапуска:

mkdir -p ~/.config/autostart
nano ~/.config/autostart/chess_board.desktop

Вставьте содержимое:

[Desktop Entry]
Type=Application
Name=Шахматная доска
Comment=Шахматная доска с фигурой при загрузке
Exec=/usr/bin/python3 /home/ваш_пользователь/chess_board.py
Icon=chess
Terminal=false
Categories=Game;BoardGame;
OnlyShowIn=FLY;

Важно:

  • Замените ваш_пользователь на ваше фактическое имя пользователя!

Сохраните файл и сделайте его исполняемым:

chmod +x ~/.config/autostart/chess_board.desktop

Способ 3: Глобальный автостарт (для всех пользователей)

Если нужно запускать программу для всех пользователей системы:

sudo nano /etc/xdg/autostart/chess_board.desktop

Содержимое аналогично предыдущему варианту.

4. Расширенный пример с разными фигурами {#пример}

Вот более сложный пример с возможностью выбора фигуры:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Шахматная доска с выбором фигуры
"""

import pygame
import sys

pygame.init()

# Константы
WIDTH = 900
HEIGHT = 900
SQUARE_SIZE = WIDTH // 9  # Дополнительная колонка для выбора фигур

# Цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
BLUE = (100, 149, 237)
RED = (220, 20, 60)

# Шахматные фигуры Unicode
PIECES = {
    'white_king': '♔',
    'white_queen': '♕',
    'white_rook': '♖',
    'white_bishop': '♗',
    'white_knight': '♘',
    'white_pawn': '♙',
    'black_king': '♚',
    'black_queen': '♛',
    'black_rook': '♜',
    'black_bishop': '♝',
    'black_knight': '♞',
    'black_pawn': '♟'
}

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Шахматная доска - Выбор фигуры')

font = pygame.font.Font(None, 74)
small_font = pygame.font.Font(None, 36)
title_font = pygame.font.Font(None, 48)

class ChessBoard:
    def __init__(self):
        self.selected_piece = 'white_king'
        self.piece_on_board = None
        self.piece_position = (3, 3)  # Начальная позиция

    def draw_board(self):
        """Рисует шахматную доску"""
        for row in range(8):
            for col in range(8):
                if (row + col) % 2 == 0:
                    color = LIGHT_BROWN
                else:
                    color = DARK_BROWN

                x = col * SQUARE_SIZE
                y = row * SQUARE_SIZE
                pygame.draw.rect(screen, color, (x, y, SQUARE_SIZE, SQUARE_SIZE))

        # Подсветка позиции фигуры
        if self.piece_position:
            row, col = self.piece_position
            x = col * SQUARE_SIZE
            y = row * SQUARE_SIZE
            pygame.draw.rect(screen, BLUE, (x, y, SQUARE_SIZE, SQUARE_SIZE), 5)

    def draw_piece_panel(self):
        """Рисует панель выбора фигур"""
        # Фон панели
        panel_x = 8 * SQUARE_SIZE
        pygame.draw.rect(screen, WHITE, (panel_x, 0, SQUARE_SIZE, HEIGHT))
        pygame.draw.line(screen, BLACK, (panel_x, 0), (panel_x, HEIGHT), 3)

        # Заголовок
        title = small_font.render('Выберите', True, BLACK)
        screen.blit(title, (panel_x + 10, 10))
        title2 = small_font.render('фигуру:', True, BLACK)
        screen.blit(title2, (panel_x + 10, 40))

        # Рисуем фигуры для выбора
        y_offset = 100
        for i, (name, symbol) in enumerate(PIECES.items()):
            y = y_offset + (i // 2) * 70
            x = panel_x + 20 + (i % 2) * 60

            # Подсветка выбранной фигуры
            if name == self.selected_piece:
                pygame.draw.rect(screen, RED, (x - 15, y - 35, 70, 70), 3)

            text = font.render(symbol, True, BLACK)
            screen.blit(text, (x, y))

    def draw_piece_on_board(self):
        """Рисует фигуру на доске"""
        if self.piece_position and self.selected_piece:
            row, col = self.piece_position
            x = col * SQUARE_SIZE + SQUARE_SIZE // 2
            y = row * SQUARE_SIZE + SQUARE_SIZE // 2

            symbol = PIECES[self.selected_piece]
            text = font.render(symbol, True, BLACK)
            text_rect = text.get_rect(center=(x, y))
            screen.blit(text, text_rect)

    def get_piece_at_click(self, x, y):
        """Определяет, на какую фигуру в панели кликнули"""
        if x < 8 * SQUARE_SIZE:
            return None

        col = (x - 8 * SQUARE_SIZE) // 60
        row = (y - 100) // 70
        index = row * 2 + col

        if 0 <= index < len(PIECES):
            return list(PIECES.keys())[index]
        return None

    def get_board_position(self, x, y):
        """Определяет позицию на доске"""
        if x >= 8 * SQUARE_SIZE:
            return None

        col = x // SQUARE_SIZE
        row = y // SQUARE_SIZE

        if 0 <= row < 8 and 0 <= col < 8:
            return (row, col)
        return None

def main():
    clock = pygame.time.Clock()
    board = ChessBoard()
    running = True

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:  # Левая кнопка мыши
                    x, y = event.pos

                    # Проверяем клик по панели фигур
                    piece = board.get_piece_at_click(x, y)
                    if piece:
                        board.selected_piece = piece
                        continue

                    # Проверяем клик по доске
                    pos = board.get_board_position(x, y)
                    if pos:
                        board.piece_position = pos
                        board.piece_on_board = board.selected_piece

        # Отрисовка
        screen.fill(WHITE)
        board.draw_board()
        board.draw_piece_on_board()
        board.draw_piece_panel()

        # Инструкция
        instr = small_font.render('Кликните для выбора фигуры и позиции', True, BLACK)
        screen.blit(instr, (10, HEIGHT - 30))

        pygame.display.flip()
        clock.tick(60)

    pygame.quit()
    sys.exit()

if __name__ == '__main__':
    main()

Дополнительные возможности

Добавление звуков

# В начале файла
pygame.mixer.init()

# Загрузка звука
move_sound = pygame.mixer.Sound('/path/to/sound.wav')

# Воспроизведение при ходе
move_sound.play()

Сохранение позиции

import json

def save_position(filename, position, piece):
    with open(filename, 'w') as f:
        json.dump({'position': position, 'piece': piece}, f)

def load_position(filename):
    with open(filename, 'r') as f:
        return json.load(f)

Устранение проблем

Программа не запускается при старте

  1. Проверьте путь в .desktop файле
  2. Убедитесь, что файл исполняемый: chmod +x ~/chess_board.py
  3. Проверьте права доступа к файлам автостарта

Ошибки с отображением

Установите дополнительные шрифты:

sudo apt install fonts-dejavu fonts-liberation

Графические артефакты

Обновите драйверы видеокарты и проверьте настройки графического окружения FLY.

Проверка работы

  1. Перезагрузите систему: sudo reboot
  2. После входа в систему должна автоматически открыться шахматная доска
  3. Для закрытия нажмите ESC или крестик окна

Успешной работы с шахматами на Astra Linux!