2008-10-14 2 views
6

Я подумывал о том, чтобы начать собственный проект дома, чтобы немного улучшить свой мозг. Reversi выглядит как простая игра, где мобильность оказывает глубокое влияние на игру. Это, по крайней мере, шаг вверх от tic tac toe. Это был бы один игрок против какого-либо ИИ.Как бы вы реализовали реализацию игры? (othello)

Я собираюсь попробовать это на C++ на ПК.

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

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

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

+1

Вы говорите о реализации стратегии для реверсирования или просто позволяете двум игрокам играть на компьютере? – Barth

+0

стратегия. хороший вопрос. – EvilTeach

ответ

2

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

Выбор графической библиотеки зависит от того, какую игру вы собираетесь писать? OpenGL - это общий выбор в таких проектах, но вы также можете использовать некоторую графическую библиотеку или напрямую использовать только собственные библиотеки Windows или xorg. Если вы собираетесь притворяться, просто используйте OpenGL.

Вопросы вы должны спросить:

Является ли C++ разумный выбор для этого проекта? Рассмотрим C и/или питон.Мой ответ на этот вопрос будет заключаться в том, что если вы просто хотите написать reversei, перейдите на python. Но если вы хотите изучить язык низкого уровня, сначала сделайте C. C++ - это расширение до C, поэтому есть чему поучиться там, чем в C. И, судя по моему мнению, чем больше вы должны учиться на C++, тем лучше.

Как вы используете графическую библиотеку? Если вы собираетесь делать причудливые эффекты, перейдите на график сцены. Вместо этого вы можете просто визуализировать сетку реверса с помощью кнопок на ней.

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

Я еще дать вам некоторые идеи, чтобы вы начали:

Отелло доска 8x8, 64 клеток в целом. Вы можете назначить байт на каждую ячейку, что составляет 64 байта на каждое состояние платы. Это 8 длинных ints, не очень много! Вы можете сохранить весь ход игры, и игрок не может даже заметить его. Поэтому рекомендуется использовать панель othello как неизменную структуру, которую вы копируете всегда, когда вы меняете состояние. Это также поможет вам позже с вашим ИИ и внедрением «отмены».

Поскольку один байт может хранить больше информации, чем только три состояния (ПУСТОЙ, ЧЕРНЫЙ, БЕЛЫЙ), я советую вам также предоставить два дополнительных состояния (BLACK_ALLOWED, WHITE_ALLOWED, BOTH_ALLOWED). Вы можете рассчитать эти значения при копировании нового состояния.

Алгоритм для проверки того, где вы можете поместить блок, мог идти по доске один за другим, а затем трассировать из пустых ячеек в каждое направление для регулярных выражений: B + W => W ^, W + B => B^Таким образом, вы можете инкапсулировать правила игры в простой интерфейс, который заботится обо всем этом.

+1

Плохой совет. C++ - это не просто расширение, это другой подход. Единственное, что они действительно разделяют, - это какой-то синтаксис, не более, чем C++ с javascript. C++ даст вам массу преимуществ, таких как улучшение управления памятью (с помощью повышения уровня), шаблоны, объекты и т. Д., Которые помогут. Сложнее отслеживать состояние программы без помощи объекта, потому что вы не можете иметь независимые данные, либо глобальные, либо в стеке. C. –

3

Вопросы ...

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

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

2

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

http://www.site-constructor.com/othello/Present/Basic_Strategy.html

2

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

2

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

2

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

0

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

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

+0

Я не уверен, полностью ли это верно, если противник также является ИИ , Википедия говорит, что идеальная игра с этой игрой, как полагают, заканчивается ничьей. – Cheery

+0

Я точно не помню, но мне кажется, что с двумя игроками из AI один из цветов всегда побеждает (я не знаю, белый или черный), ровно в одной точке. –

+0

Это неправда. Реверси не решен. –

0

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

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

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

+0

Максимизация ведет непосредственно к ранней потере. – EvilTeach

1

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

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

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

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

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

Пойдите с аллегро ... Заполните свою игру, а затем перейдите на OpenGL!

Смежные вопросы