В целом, проблемы, с которыми вы столкнетесь, будут зависеть от вас и ваших подходов. Друг обычно говорит, что комплекс прост с другой точки зрения.
Выбор графической библиотеки зависит от того, какую игру вы собираетесь писать? OpenGL является распространенным выбором в подобных проектах, но вы также можете использовать некоторую GUI-библиотеку или просто использовать собственные библиотеки windows или xorg. Если вы собираетесь делать фантазии, просто используйте OpenGL.
Вопросы, которые вы должны задать:
Является ли C ++ разумным выбором для этого проекта? Рассмотрим C и / или Python. Мой ответ на это будет таким: если вы просто хотите написать реверси, зайдите на python. Но если вы хотите выучить язык низкого уровня, сначала делайте С. C ++ является расширением для C, поэтому там есть чему поучиться больше, чем в C. И, на мой взгляд, больше того, чему вы должны учиться на C ++, не стоит усилий.
Как вы используете графическую библиотеку? Если вы собираетесь делать необычные эффекты, перейдите к графу сцены. Вместо этого вы можете просто визуализировать сетку реверси с кнопками на ней.
Как вы должны реализовать пользовательский интерфейс, должны ли вы использовать общие концепции пользовательского интерфейса? Обычные концепции пользовательского интерфейса (окна, фреймы, кнопки, меню, диалоги) не так хороши, как думают люди, есть много работы для их правильной реализации. Примените граф сцены для интерпретации ввода и попробуйте разные хитрые способы управления игрой. Избегайте вводных меню (они глупые и бесполезные), используйте аргументы командной строки для большинства настроек.
Я еще даю вам несколько идей, с чего можно начать:
Доска Отелло имеет размер 8х8 и 64 ячейки. Вы можете назначить байт для каждой ячейки, что составляет 64 байта для каждого состояния платы. Это 8 длинных целых, совсем немного! Вы можете сохранить весь прогресс игры, а игрок даже не заметит этого. Поэтому рекомендуется реализовать доску othello как неизменную структуру, которую вы всегда копируете при изменении состояния. Это также поможет вам позже с вашим ИИ и внедрением функции отмены.
Поскольку один байт может хранить больше информации, чем просто три состояния (EMPTY, BLACK, WHITE), я советую вам также предоставить два дополнительных состояния (BLACK_ALLOWED, WHITE_ALLOWED, BOTH_ALLOWED). Вы можете рассчитать эти значения при копировании нового состояния.
Алгоритм проверки того, где вы можете поместить блок, может проходить доску один за другим, а затем прослеживать от пустых ячеек в каждом направлении для регулярных выражений: B + W => W ^, W + B => B ^ Таким образом, вы можете заключить правила игры в простой интерфейс, который позаботится обо всем этом.