Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Есть предложения по логике кода шахмат на C++?

Isturfore Ученик (221), на голосовании 1 неделю назад
Код

Да, я знаю, подход хреновый, я еще изучаю плюсы.
Дополнен 1 месяц назад
сейчас на ум пришло представить каждую фигуру как объект, который хранит координаты и цвет, но хз, сработает ли это?
Дополнен 1 месяц назад
но тогда и весь массив придется представлять не как чар а как обьекты и выходит что мне нужно звездочку обьектом делать?
Голосование за лучший ответ
Сухачев Мудрец (12460) 1 месяц назад
Хорошо, давай разберем твой код!

Основные моменты:

Хорошая структура: Ты разделил код на функции, что делает его более читаемым и организованным.
Графический интерфейс: Ты создал базовую реализацию шахматной доски.
Инициализация: Ты заполнил доску фигурами, но можно добавить возможность перемещения фигур.
Предложения по улучшению:

Логика игры:

Проверка хода: Добавь функции, которые проверяют, является ли ход допустимым (например, не выходит ли фигура за пределы доски, не блокирует ли ее другая фигура).
Шах и мат: Реализуй проверку на шах и мат, чтобы определить победителя.
Перемещение фигур: Добавь функцию, которая перемещает фигуру на новое поле.
Выбор фигуры: Сделай так, чтобы пользователь мог выбирать, какую фигуру он хочет передвинуть.
Интерфейс пользователя:

Ввод координат: Сделай ввод координат более удобным (например, используя буквенные обозначения столбцов и числовые строки).
Визуализация: Добавь возможность визуализации ходов, например, показывать на доске, какие клетки доступны для выбранной фигуры.
Оптимизация:

Переменные: Используй более описательные имена переменных. Например, вместо size можно использовать boardSize.
Массив: Ты можешь оптимизировать работу с массивом, используя двумерный массив char board[8][8] вместо указателя на указатели.
Пример реализации логики хода:

bool isValidMove(char** board, int size, int fromRow, int fromCol, int toRow, int toCol) {
// Проверка выхода за пределы доски
if (toRow < 0 || toRow >= size || toCol < 0 || toCol >= size) {
return false;
}

// Проверка, есть ли на конечной клетке фигура того же цвета
if (board[toRow][toCol] != '*' && ((board[toRow][toCol] >= 'A' && board[fromRow][fromCol] >= 'A') ||
(board[toRow][toCol] <= 'Z' && board[fromRow][fromCol] <= 'Z'))) {
return false;
}

// Дополнительные проверки для разных фигур (например, ход ладьи)
// ...

return true;
}
Пример реализации перемещения фигуры:

void movePiece(char** board, int size, int fromRow, int fromCol, int toRow, int toCol) {
board[toRow][toCol] = board[fromRow][fromCol];
board[fromRow][fromCol] = '*';
}
Дополнительные советы:

Тестирование: Добавь тестовые примеры, чтобы проверить, что твой код работает как ожидается.
Чтение документации: Изучи документацию по стандартной библиотеке C++, чтобы узнать о доступных функциях и алгоритмах.
Не бойся экспериментировать и не сдавайся! Постепенно твой код станет более совершенным.
IsturforeУченик (221) 1 месяц назад
я поэтому и спросил, я просто хз как тут можно по цветам их разбить
Похожие вопросы