Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Шахматы(компьютер-компьютер) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ проблема с проверкой вводимых данных http://www.cyberforum.ru/cpp-beginners/thread356175.html
#include <iostream> #include <conio.h> using namespace std; double c,f; int main() { setlocale(LC_ALL, "Russian"); setlocale(LC_ALL, "rus");
C++ Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости Здравствуйте! Помогите пожалуйста полному чайнику решить две задачки. 1) Даны действительные числа x1, y1, x2, y2. Вычислить min(x1, y1, x2, y2)+min(x1,x2,y1). 2) Даны вещественные числа x, y.... http://www.cyberforum.ru/cpp-beginners/thread356147.html
C++ Задача про шахматы
Все доброго времени. Помогите пожалуйста с заданием. Нужно с помощью двумерного массива вывести на экран шахматную доску с расставленными на начальных местах фигурами. Выглядеть результат, как...
C++ Проверка вводимых символов
Привет форум! Уже пытался кое-что найти в книжках по С++ по поводу сабжа, но многое мне не ясно, ибо я очень очень чайник. Вот что мне нужно: Пользователь должен ввести вещественное число с...
C++ Массивы: определить количество дней с осадками больше среднего http://www.cyberforum.ru/cpp-beginners/thread356131.html
Во всех приведенных ниже вариантах использовать меню для организации работы программы, исходные данные предварительно записать в текстовый файл. Разработать схему алгоритма и программу, используя...
C++ Написать функцию которая проверяет если число(простые числа) не делится на N и меньше N... Написать функцию которая проверяет если число(простые числа) не делится на N и меньше N... подробнее

Показать сообщение отдельно
Bers
Заблокирован
30.09.2011, 23:13
на базе вектора делается 2д контейнер (на самом деле это вектор векторов, + методы, с помощью которых можно обращаться к контейнеру, как к двухмерному массиву)

Класс шахматной доски: содержит 2д контейнер. Каждый элемент 2д контейнера - ИД_фигуры; //вместо айдишника можно впиндюрить указатель. Это не суть.

Умеет выдывать айдишник фигуры по запросу клиента. Например: Доска.КакаяФигура(координаты);
Умеет двигать фигуру по доске: Доска.ПередвинутьФигуру(ид, новые_координаты);



Класс фигур: имеет полиморфную природу. То бишь создаётся базовый класс с полями: цвет, название. И один виртуальный метод ВернутьСписокКлеток_КудаЯМогуСходить().

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

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

Класс игроков - полиморфный. Базовый игрок имеет виртуальный метод ТвойХод();

От базового игрока наследуются два потомка: КомпьютерныйИгрок, и ЖивойИгрок.

Задача КомпьютерногоИгрока - выбрать фигурку из списка оставшихся в живых (по смыслу задачи - рандомно).
И попросить фигурку вернуть список возможных ходов.
Из этого списка выбрать наиболее подходящий (по смыслу задачи - рандомный вариант из полученного списка) вариант. Таким образом получаем координаты, куда будит сдвинута фигурка.
Далее, игрок приказывает доске передвинуть фигурку на новую клетку.
Игрок умеет запоминать свой последний ход (какую фигурку куда сдвинул), или же все свои ходы. И выдавать эту информацию по запросу клиента.

ЖивойИгрок (его по смыслу задачи нет. Однако, если не ввести эту сущность на этапе проектирования архитектуры, потом придётся переделывать минимум весь класс игроков. Поэтому, если даже влом его изготавливать, заложить саму возможность для будущего расширения функциональности заготовки - идея правильная)

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


Класс Игровой Логики: знает о существовании доски, и о существовании игроков.
Поочередно делает каждому игроку: Игрок.ТвойХод();
после чего, через интерфейс доски проверяет состояние фигур. И на основании этого провозглашает следующий ход, либо завершение игры.
Умеет опрашивать игрока о его последнем ходе, и на основании онного выводить данные на экран (если игра с графикой - двигать спрайты фигур, если текстовая - просто выводить данные о совершенных ходах).

Данная архитектура довольно проста, и стабильна. Она легко расширяется: ИгровуюЛогику легко научить выводить данные в виде красивой графики.
Легко можно научить Игровую логику, например, на основании расположения фигур кричать: Шах! и тп.

А Игроков легко можно изменять так, что бы они становились более умными. Ну и прикручивать удобные интерфейсы для управления живым игроков.

При данной архитектуре,из грубоватой заготовки можно будит сделать полноценную игру.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru