Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логическая игра, с точками 
:(
    Опции темы
OXOTHUK
Дата 9.12.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



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

Я решил сделать такаю игру на компе. Я написал структуру, в которой есть:
1) координаты (x, y)
2) кем установлена точка
3) координаты окружающих 8-ми точек (xU, yU, xD, yD, ...)
4) 8 переменных принадлежности окружающих точек какому-либо игроку, т.е. кем установлена, к примеру, точка сверху.
5) 8 булевских переменных: соеденены ли точки?!

У меня в программе все переменный для каждой точки уже вычисляются, кроме последних 8ми.
Сколько не мучил, не знаю как сделать.

Какой алгоритм можете посоветовать?

P.S. И как можно узнать какие точки попали в круг.
P.P.S. Я пишу на Си++ и точки у меня представлены 2-мерным массивом размеров 29 на 29.
PM MAIL   Вверх
Fighter
Дата 10.12.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Ты VB знаешь, я кстати точно такую же игру пишу. Я уже написал проставление точек и т.д. и т.п., и вот теперь надо написать логику, если переключишься на VB я могу тебе исходники переслать и будет вместе работать над игрой, возможно вдвоем что-нить и получится.
PM MAIL   Вверх
Fighter
Дата 11.12.2005, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



а кто-нибудь еще не хотел бы заняться этой проблемой...
PM MAIL   Вверх
OXOTHUK
Дата 13.12.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



VB я не знаю, но логикой программы можно обмениваться.
Я вообще смотрю: самое сложное - это представить кольцо(визуально(на глаз)кажется ерудна, а как массив ... smile ).
По-началу хотел методом перебора, но тут не знаешь с какой точки начать, как не повторяться, а об счёте кол-ва точек внутри и ИИ речи идти не может.
PM MAIL   Вверх
Fighter
Дата 14.12.2005, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(OXOTHUK @ 13.12.2005, 18:16)
но тут не знаешь с какой точки начать


Я считаю что надо так. Сначала надо проверить первая это точка или нет. Если первая то общет вообще не нужен. Если это не первая точка то обсчет надо начинать с последней поставленной точки, и надо считать так чтобы он проходил через все точки. Если комп прошел через все точки и вернулся в первоначальную, то тогда все замкнуто точками, если комп не вернулся то тогда ничего точками не замкнуто.
PM MAIL   Вверх
powerfox
Дата 14.12.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Я бы мог подключиться. Пишу на С/С++. Для графики использую SDL. Смогу,может, что поделать после 25 декабря.


--------------------
user posted image
PM WWW   Вверх
OXOTHUK
Дата 15.12.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



Цитата
вернулся в первоначальную


А если несколько колец? И ведь кольца не может быть если внутри нет хотя бы 1ной вражеской точки.
PM MAIL   Вверх
Fighter
Дата 16.12.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(OXOTHUK @ 15.12.2005, 11:34)
А если несколько колец? И ведь кольца не может быть если внутри нет хотя бы 1ной вражеской точки.


Впринципе правильно, значит нужен еще алгоритм нахождения находится ли в данном так сказать полигоне вражеская точка либо надо проверять точки противника (ну например, если ходится игрок 1, то по жесткой логике нужно проверять все точки игрока 2).
Добавлено @ 16:49
Цитата(powerfox @ 14.12.2005, 14:48)
Пишу на С/С++. Для графики использую SDL.


Я поясни (расшифруй) пожалуйста, что такое SDL, и в чем ты пишешь на C++ (Borland Builder or MSVC)?

PM MAIL   Вверх
powerfox
Дата 16.12.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



SDL - графическая библиотека(со своим API). Там есть функции для загрузки картинок(bmp, jpeg, png и др.), просто рисования, воспроизведения звуков, для работы со временем. На изучение SDL не требуется много времени(SDL совместима и с Java, Delphi - если не ошибаюсь).
Я работаю с MinGW(портирован с gcc) в Windows, в Linux с gcc.
Про SDL
На русском:
-хороший туториал поищи на plg.lrn.ru. Адрес более старого(несильно отличается http://pmg.org.ru/galaxy2d/SDLtutorial.zip
-документация http://plg.lrn.ru/temp/html_ru/

Сайт SDL - www.libsdl.org


--------------------
user posted image
PM WWW   Вверх
OXOTHUK
Дата 18.12.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



Можно через массивы сделать (легко) как проверить на окружение только 1-ой точки. А там как-нибудь дальше вытечет.
Алгоритм:
Массив строчек (пусть dots) размером (пусть) 29 на 29 - dots[29][29] (так на Си, не знаю как VB).
Например:
если точка dots[2][2] - Player 2 и dots[1][2] - Player 1 и dots[3][2] - Player 1 и dots[2][1] - Player 1 и dots[2][3] - Player 1, то 4 точки игрока 1 в кольцо:
010
121
010.
Тут надо подумать как несколько точек окружать...
PM MAIL   Вверх
powerfox
Дата 18.12.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



По-моему нужно что-то другое, так будет сложно делать большие окружения. После 26-го присоединюсь.


--------------------
user posted image
PM WWW   Вверх
Fighter
Дата 19.12.2005, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(OXOTHUK @ 18.12.2005, 17:07)
Тут надо подумать как несколько точек окружать...


Это все понятно. Я думаю, что может быть надо попробовать найти какую нибудь закономерность и затем свести все это
к перемножению матриц?
PM MAIL   Вверх
OXOTHUK
Дата 19.12.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



Цитата
перемножению матриц?


А как их меремножать? Я мало с матрицами работал.
PM MAIL   Вверх
segmentation_fault
Дата 26.12.2005, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 14.2.2005
Где: в интернете

Репутация: нет
Всего: 1



Помню такую игру, в детстве играл. smile
Мне эта проблема напоминает нахождение циклов в ненаправленном циклическом графе. В данном случае вершины - это точки (вашего цвета), и ребро существует между двумя вершинами только если они находятся на расстоянии в одну клетку друг от друга, т.е. если в случае цикла между ними можно нарисовать линию. Собственно алгоритм нахождения циклов я не знаю, но уверен что поиск на гугле даст искомый результат. Тут только не учитывается, если ваши точки окружают хотя бы одну точку противника.
PM MAIL   Вверх
powerfox
Дата 27.12.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



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


--------------------
user posted image
PM WWW   Вверх
OXOTHUK
Дата 28.12.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



Я с одним человеком поиграю в эту игру и попытаюсь выявить закономерность. Мы оба играем хорошо и выстраиваем такие баталии, что ого-го. Потом скажу, что получилось.
PM MAIL   Вверх
powerfox
Дата 30.12.2005, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Начинать нужно с простого - разработать графические библиотеки, сделать "детский интеллект" ------------> усовершенствовать, осознать ------------------------->спроектировать, написать. Всё просто smile


--------------------
user posted image
PM WWW   Вверх
OXOTHUK
Дата 30.12.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



Графа у меня есть, даже рисование связывающих линий, но только если булевская переменная, отвечающая за связывание, равна true. А это - то о чём я спрашивал в самом начале. Интелект не так обязательно, можно начинать игру делать с мультиплеера. А поиграть с другом пока, ещё не получилось.
PM MAIL   Вверх
p0s0l
Дата 30.12.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



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

Это сообщение отредактировал(а) p0s0l - 30.12.2005, 16:24


--------------------
С уважением, г-н Посол.
PM   Вверх
OXOTHUK
Дата 13.1.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



p0s0l
А чё в поиске-то ввести(хотя бы примерно)?! Я ведь и не знаю как называется и как её называли раньше когда обсуждали. Искал - не нашёл.
PM MAIL   Вверх
powerfox
Дата 13.1.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



В принципе нужно только определять, что часть линии, а что - её конец(две булевы переменные в структуре точки). Окружение происходит, когда у соседних точек значения 1;0 и 0;1.
Добавлено @ 17:12
Цитата(OXOTHUK @ 9.12.2005, 12:13)
P.S. И как можно узнать какие точки попали в круг.

Две крайние точки окружения по оси Oy: разность x1-x2, В окружении все точки с координатами (y; x1..x2).


--------------------
user posted image
PM WWW   Вверх
OXOTHUK
Дата 15.1.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.9.2005

Репутация: нет
Всего: 6



powerfox
про это уже говорили - а если в окружении много точек и вопрос (в начале) был задан как установить значения булевских.
PM MAIL   Вверх
Bog d`An
Дата 13.2.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Цитата(p0s0l @ 30.12.2005, 16:22 Найти цитируемый пост)
Поищите по форуму, про AI для этой игры были раньше обсуждения (на будущее). И про нахождения обведенных точек...

Цитата(OXOTHUK @ 13.1.2006, 16:34 Найти цитируемый пост)
Искал - не нашёл.

недавно нашел на делфе написана, там искай...
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.