Как бы вы занялись реализацией игры reversi? (Отелло) - PullRequest
6 голосов
/ 14 октября 2008

Я думал о том, чтобы начать побочный проект дома, чтобы немного тренировать свой мозг. Реверси выглядит просто как игра, в которой мобильность сильно влияет на ход игры. Это по крайней мере шаг вверх от крестика-нолика. Это будет один игрок против какого-то ИИ.

Я думаю попробовать это в C ++ на ПК.

С какими проблемами я могу столкнуться?

Какую графическую библиотеку вы бы порекомендовали?

Какие вопросы я недостаточно умен, чтобы задать себе вопрос?

Ответы [ 9 ]

3 голосов
/ 14 октября 2008

Вопросы ...

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

Надеюсь, это поможет!

2 голосов
/ 14 октября 2008

В целом, проблемы, с которыми вы столкнетесь, будут зависеть от вас и ваших подходов. Друг обычно говорит, что комплекс прост с другой точки зрения.

Выбор графической библиотеки зависит от того, какую игру вы собираетесь писать? 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 ^ Таким образом, вы можете заключить правила игры в простой интерфейс, который позаботится обо всем этом.

2 голосов
/ 14 октября 2008

После того, как вы сами разберетесь с игровой логикой, прочитайте главу 18 выдающейся книги Питера Норвига Парадигмы программирования ИИ . (Исходный код здесь .) У него довольно короткая и чрезвычайно удобочитаемая программа, которая может ударить практически любого человека; Вы должны многому научиться, сравнивая свое решение с ним.

2 голосов
/ 14 октября 2008

Вы захотите заглянуть в минимакс с альфа-бета-отсечкой, если напишите ИИ, с которым будете играть. Вашему любимому поисковику будет что рассказать по этой теме.

2 голосов
/ 14 октября 2008

Поскольку ребята предлагали мою идею рассказать вам, прежде всего, об алгоритмах и игровой логике. Следующим ответом для меня была графическая библиотека, это зависит от вашей целевой платформы, языка программирования, фреймворка и т. д. Но, как я предлагаю, используйте C # с графической библиотекой 2D-графики Cairo, чего вы можете добиться с помощью фреймворка Mono (который затем можно настроить для всех трех основные операционные системы для вашей игры для работы) -> www.mono-project.org. Тем временем я нашел это, я думаю, что и этот вид ресурсов поможет вам: http://home.datacomm.ch/t_wolf/tw/misc/reversi/html/index.html. Но если вы закончите это, вы можете попробовать внедрить Судоку.

2 голосов
/ 14 октября 2008

Как уже упоминалось другими, я бы начал с глубокого понимания игрового процесса и стратегий, а также задействованных алгоритмов. Эта ссылка может быть вам полезна, она описывает основные стратегии и алгоритмы Отелло:

http://www.site -constructor.com / Отелло / Present / Basic_Strategy.html

1 голос
/ 17 ноября 2015

Существует множество библиотек, но, насколько я могу судить, вашей игре понадобятся библиотеки событий и графики ... и звуковая библиотека для большего удовольствия! Allegro 5 - лучший выбор ... Все в одной библиотеке. http://liballeg.org/ хотя он написан на языке C, вы можете создавать объектно-ориентированные программы.

и учебник для этого ...

http://fixbyproximity.com/2d-game-development-course/

или вы можете использовать низкоуровневые API, такие как ... OpenGL для графики. OpenAL для звука. glfw для событий.

но OpenGL - большая проблема, потому что вам нужно создать свой собственный обработчик листов спрайтов и все эти 2d вещи.

Иди с аллегро ... Завершите игру, а затем переходите на OpenGL!

0 голосов
/ 14 октября 2008

Я написал игру реверси много лет назад, когда я еще учился в школе. Его стратегия была очень простой, она просто рассчитывалась на максимальное количество фигур, но была взвешенной, поэтому она предпочитала края и особенно углы и не любила квадраты, которые рискуют раздавать углы.

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

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

0 голосов
/ 14 октября 2008

Реверси должна быть очень простой для реализации игрой. Идеально изучить некоторые базовые алгоритмы теории игр (в частности, min-max) при реализации ИИ.

Одна вещь, на которую стоит обратить внимание ИИ, это то, что совершенно возможно создать идеальный ИИ для Реверси (тот, который всегда выигрывает независимо от действий своего противника). Так что на стороне стратегии, если ваш ИИ проигрывает, у вас еще есть над чем поработать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...