![]() |
|
Модераторы: Rickert |
![]()
|
|
| Rpahut |
|
||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
px и py имеют тип int - это видно там где они созданы:
int тоже объект, но объект примитивного типа - т.е. он встроен в сам язык программирования и имеет только одно свойство - значение. Поэтому к этому свойству можно добраться без точки. Объект DrawablePoint мы создавали сами - написали класс, его переменные и методы, с помощью которых с ним можно что-то делать. К переменным и методам как раз обращение идет через точку.
Как линии сделать толще я тоже не знаю. Не говоря уж о заливке. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||
|
|||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
||||
|
||||
| Rpahut |
|
||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Ок, выкладываю что у меня получилось. Алгоритм еще нуждается в проверке.
1. Добавляем в DrawablePoint:
2. Добавляем в GridsCanvas массив - член класса:
3. !!! Рекурсивная ф-ция определения захваченности точки !!!:
Тут много буков, но это из за повторяющегося кода. Разберем позже. 4. Добавляем в mouseWasClicked():
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||
|
|||||||||
| Rpahut |
|
||||||||||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
______________________________________________
Qawra, вы рекурсию проходили? Тут в общем смысл в том что метод pointCaptured() вызывает сам себя, но с другими параметрами, для соседних точек. И вызывает до тех пор, пока не убедится что наша точка внутри контура, или наоборот не внутри... Если точка внутри замкнутого контура, то от нее нельзя прошагать до края поля, не наткнувшись на контур. Если мы добрались до края поля, значит контура вокруг точки нет. Что важно для рекурсивного кода - это чтобы он не вызывал сам себя до бесконечности, иначе мы никогда не дождемся результатов проверки
Вторая половина проверки
это собственно проверка на попадание в границу - если наткнулись на незахваченную точку с цветом текущего игрока, то дальше тоже не идем. Вернее возвращаемся на шаг назад, и идем дальше в каком-нибудь другом направлении. Если мы на этой точке еще не были и если это не граница, помечаем точку
и вызываем pointCaptured() для соседних точек - сначала для точек по горизонтали и вертикали:
Они тоже вызывают pointCaptured() для своих соседних точек, и те для своих тоже, и так пока есть непроверенные точки. Правда, если в какой-то момент pointCaptured() будет вызван для точки за пределами поля, то он вернет ноль - тогда в одной из этих строчек сработает проверка, например тут:
В этом случае поиск завершается досрочно - ноль возвращается и возвращается, пока не попадет к нам в руки, сюда:
откуда мы метод и вызываем. Если точка внутри замкнутого контура, то проверка продолжится пока мы не посетим все точки внутри контура. В этом случае ноль нигде не возвращается и выполнение доходит до строки
Единица опять же возвращается сюда
и так мы понимаем, что точка захвачена. __________________ Там возможен еще третий вариант - когда точка принадлежит текущему игроку, метод возвращает -1. Так что игрок может захватить собственные точки, только если перед этим они были захвачены другим игроком. Пока не знаю как от этого избавиться. __________________ В методе pointCaptured() помимо соседних точек по горизонтали и вертикали проверяются еще и точки по диагонали. Как выяснилось это необходимо. Перед этим дополнительно проверяется, нет ли на пути диагональной границы, в остальном здесь то же что и выше.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||||||||||
|
|||||||||||||||||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
3 пункт добавляем в GridCanvas ? Я пока его туда определила ..
Mы реккурсию на практике будем проходить через год .Но я о ней читала . Теория графов которая нужна в нашем случае тоже начнётся в следующем году . Это сообщение отредактировал(а) Qawra - 6.2.2009, 00:01 |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Теорию графов я еще и сам не проходил. Переделаем в следующем году
Да, pointCaptured() должен быть в GridsCanvas - он ведь там и используется. ЗЫ Если будут вопросы - задавайте. Разберемся с этим и займемся доводкой программы. ЗЫЗЫ Метод pointCaptured() должен быть private. Куда мои глаза глядели... Это сообщение отредактировал(а) Rpahut - 6.2.2009, 00:00 --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Всё скомпелировалось но с функциональной стороны изменения не заметны .
Захватываем всё ! И точки ... и пустую территорию ! Ни от чего не отказываемся ! Не знаю точно какой язык будем в следующем году изучать . Звучит как Императивное и обьектно - ориентированное программирование . Наверно С и С++ Видела студентка у них ( на курс старше ) проект "виртуальное пианино" писала и страдала что ей плохо от запоздалой нотной грамотности Значит зададут нам что-то связаное с мультимедия . Это сообщение отредактировал(а) Qawra - 6.2.2009, 00:18 |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Чтоб было видно изменения, нужно править DrawablePoint.paint() - учесть в коде значение переменной captured и менять отображение точки.
Тут очень много вариантов, как выделять захваченные точки, так что конкретного решения не предлагаю. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Я пока пытаюсь нарисовать flowchart к алгоритмам .
не умею прикреплять большую картинку , даю ссылку не неё http://img6.imageshack.us/my.php?image=flowchart2an6.png Это ещё не реккурсивный зверь . Это тот playerColor о который я так часто спотыкалась Это сообщение отредактировал(а) Qawra - 7.2.2009, 17:54 |
|||
|
||||
| Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
Нада мне вас догонять=) Вот выкладываю свое творение.
Присоединённый файл ( Кол-во скачиваний: 10 )
Faraon.zip 52,62 Kb-------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Куда ближе к оригинальным правилам
Qawra, как там у вас дела? --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Я пока медленно схожу с ума от Сlass диаграмм ...
Наверно поэтому у меня в последней версии Какаду линии не рисуются |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
У меня не скачивается а открывается.. но при этом ничего не понятно ...
Мы когда в Grid Canvas метод makeConnections прописылали
for(int j=-1; j<=1; j++) { for(int i=-1; i<=1; i++) { был для зазора в координатах ? пытаюсь сейчас весь алгоритм рисования линий с начала до конца проследить и словами связно его обьяснить . пока он у меня идёт от DrawablePoint к mouseWasClicked . А надо бы наоборот Это сообщение отредактировал(а) Qawra - 10.2.2009, 23:34 |
|||
|
||||
| Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
Мда, перебилдить забыл, когда архивировал. Извини Qawra.
(Я тут заметил, что с проектированием интерфейса у меня какие-то заморочки. Надо книжку про Swing подчитать. Обидно только, что в четверг уже начинается универ.) Я вам скажу, Rpahut, что это прикольно придумано так просматривать окружающие точки вложенными циклами от -1 до 1. Интересно, вы пробовали читать мой код? Мне кажется, что отойдя от строго использования классов при описании поля я нарушил читабельность кода. Вернее, не читабельность, а наглядность реализации идеи... Наверное это не очень хорошо. Можете как-то прокомментировать? -------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |