![]() |
|
Модераторы: Rickert Страницы: (9) Все « Первая ... 4 5 [6] 7 8 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
А мне не понятно зачем выделение последней точки каждого игрока
Вообще это мелочи. Надо замыкание срочно писать. -------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
| Qawra |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Расказываю и показываю как я последнию точку выделила
Много мучалась потому что ободок зарисовывался цветом игрока . Пришлось вводить private boolean lastPoint два классах подкорректированы
и
Это сообщение отредактировал(а) Qawra - 30.1.2009, 17:48 |
||||
|
|||||
| Rpahut |
|
||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
А ну если в этом смысле... тогда вообще можно надпись сделать вроде "Ход игрока 1" и "Ход игрока 2". Заголовок окна менять например. Добавлено @ 18:59 Qawra, хитро Ну это можно убрать:
и передавать Graphics прямо в метод:
Ни к чему нам плодить ненужные переменные класса. Это сообщение отредактировал(а) Rpahut - 30.1.2009, 19:01 --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||
|
|||||||
| Rpahut |
|
||||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Сейчас думаю как организовать соединение точек.
Вообще нужно решить три задачи: 1. Как хранить соединение 2. Как создавать соединение 3. Как отображать соединение Хранить соединения лучше всего внутри класса DrawablePoint, потому как "соединенность" с другой точкой - это свойство самой точки. Для дальнейшей обработки удобнее хранить их в виде массива DrawablePoint размером [8](максимальное количество соединений у каждой точки). Каждый элемент этого массива будет тогда либо содержать null, либо хранить Точку, с которой у данной точки есть соединение. Создание соединений обязан выполнять класс GridsCanvas - именно в нем хранится поле, что позволяет нам рассмотреть каждую из соседних точек и определить необходимость соединения. В класс DrawablePoint нужно добавить метод connectTo(DrawablePoint p) чтобы можно было сохранить найденное соединение внутри Точки. Отображение соединений опять же возлагается на DrawablePoint. Единственное что для его реализации Точка должна знать свои собственные экранные координаты и иметь возможность получить координаты точек с которыми она соединена(для использования drawLine()). Из этих соображений нужно переделать конструктор класса DrawablePoint так, чтобы он принимал не Цвет, а экранные координаты Точки. Тем более что в качестве цвета в конструктор сейчас мы передаем всегда null - можно обойтись без передачи этого параметра. Тем более что в классе уже есть переменные int x, y которые нигде не используются. Тем более что мы рассчитываем и передаем экранные координаты точки каждый раз когда нужно ее нарисовать, хотя они всегда одинаковые и можно рассчитать их один раз. Еще у Точки должны быть методы public int getX(); public int getY(); которые позволят получить ее экранные координаты. ==================== Итак: Добавляем в члены класса DrawablePoint массив
Модифицируем конструктор DrawablePoint:
Добавляем в DrawablePoint методы для получения ее координат:
Добавляем drawConnections() и используем его в DrawablePoint.paint():
===================== Вторичные изменения: Поскольку мы изменили код конструктора Точки, создавать точки теперь тоже нужно по-другому:
То же самое с кодом отрисовки - экранные координаты точки теперь хранятся внутри нее и передавать их в paint() не нужно:
================== Кажется ничего не забыл. Думаю дальше над созданием соединений. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||||
|
|||||||||||||
| Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
Гм, Уважаемая. Мне такой подход в наведении окаёма вокруг точек кажется несколько подозрительным, как по мне то нелогично для каждой точки добавлять переменную, показывающую последняя ли она, когда по логике игры таких точек будет максимум две. (Логично ссылки на эти точки вынести полем класса DrawablePoint) Но я поверил наслово, скопипастил и убедился, что указанное выше не очень работает.
Собственно, у меня вопрос. Где вы присваиваете какой-нить точке true в поле для рисования окаёма? P.S. Мне долго надоедало, что если я нажал мышку, немного её подвигал и точка не ставилась. Теперь я всё, что было написано в MouseClicked переписал в MouseRealeased. Предлагаю автору сделать также. Это сообщение отредактировал(а) Kakadu - 31.1.2009, 15:00 -------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
| Qawra |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
А зачем вы нажали мышку и немного подвигали ? Вы же не рисовать собирались а территорию захватывать
Ваш метод рисования ободка я воплотить пыталась но у меня не получилось .Очень бы хотелось взглянуть на код . Буду очень вам признательна если вы его опубликуете и обьясните как он работает . У нас сейчас с замыканием поля много работы . Я внесла последнии изменения и там есть одно узкое место в paintComponent
пишет что не может быть применена к paint (int ,int , java.awt.Graphics ) я подставила x и y .Строчка
начались
Создаю сейчас документацию . Use Case Diagram для нашей игры оказалась совсем несложная . ![]() |
||||||
|
|||||||
| Rpahut |
|
||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Да есть такой момент - но это на мой взгляд вопрос "доводки" игры и решать его именно сейчас, да и решать вообще, мне кажется нет необходимости. Вообще, если по-хорошему делать, надо запоминать где была нажата кнопка мыши, и если указатель не уходил слишком далеко от этого места, засчитывать отпускание как клик в Точку. Можно и просто следить чтобы нажатие и отпускание было в пределах одной Точки.
Правильно пишет. Очевидно метод paint() все еще не исправлен. Он должен начинаться вот так:
Нужно код посмотреть. Скорее всего проблема в this.g или может в setColor(color); Кстати, расшифровка сообщения об ошибке:
Смотрите в эту строку и ищите что там не так. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||
|
|||||||||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Вы были правы . Я исправила в двух местах this.g на g и всё нормально заработало .
|
|||
|
||||
| Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
![]() Я тут кое-что состряпал. Правда пришлось несколько изменить количество классов и логику. Ну да ладно, потом распишу, если будут вопросы. P.S. прикрепляю исходники на NetBeans. Это сообщение отредактировал(а) Kakadu - 2.2.2009, 14:08 Присоединённый файл ( Кол-во скачиваний: 5 )
Faraon.zip 41,51 Kb-------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Cочетание цветов понравилось . В нём что-то есть . У меня к сожалению нет NetBeans . Поэтому я просто запустила jar файл и покликала мышкой .
Точки были а крестиков небыло ... Но всё равно неплохо . Какие идеи о замыкании поля ? Это сообщение отредактировал(а) Qawra - 2.2.2009, 20:31 |
|||
|
||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Крестиков в самом деле почему-то нет. В jikes собрать не получилось, качаю Сеть-Бобы.
Кстати, тут та же дырка, что и в моей версии ![]() Верхняя красная точка будет считаться захваченной, потому что волна от нее пойдет только по вертикали и горизонтали и до края поля не доберется. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Я поняла что если линии начать рисовать до того как контур можно замкнуть то играть не получиться . Они будут мешать искать замыкания . Красная линия автоматом соединилась ?
|
|||
|
||||
| Rpahut |
|
||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Создание соединений
Создаваться соединения будут в mouseWasClicked(), но сначала подготовим почву. От Точки нам нужны следующие методы:
Дальше можно вставлять метод создания соединений в GridsCanvas
Используем его в mouseWasClicked():
Добавлено через 9 минут и 11 секунд Qawra, да, между соседними точками автоматически образуется соединение, если этому ничего не мешает. Если в клетке уже есть одно диагональное соединение, то второе там уже не образуется. Это как раз правильно - просто при проверке захвата нам надо будет поиск по другому как-то делать. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||
|
|||||||||||
| Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Пояснения по поводу создания соединений:
После щелчка пользователя в точку, если ее цвет успешно изменился, мы перебираем все точки рядом с ней. Если цвет соседней точки совпадает с цветом нашей точки, мы их соединяем друг с другом. Так же, чтобы программа не падала, каждый раз проверяются координаты точки (goodCoords()), и если мы соединяем по диагонали, проверяем чтобы в клетке небыло другого диагонального соединения:
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
| Qawra |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Как интересно получилось ! Мне нравиться ! Можно будет ещё соединяющие линии потолще сделать и цветом заливать захваченную территорию . Совершенно другое ощущение от игры . Не надо ждать пока вражеские точки в плен попадуться . Динамично отхватываешь по кусочку территории и душа радуется
Не знаю как увеличить толщину линий .Залить территорию можно с Graphics FillPolygon . Только где его прописать ...В makeConnections ? Для меня удивительно что компайлер понимает что такое
Но если бы меня попросили их заранее написать я бы их написала через точку p.x и p.y (что выглядит немного странно ) . . Теоретически , p - это обьект , а координаты это его свойства - поэтому я бы их написала через точку ... В каких случаях можно обойтись без точки ? Буду пробовать изобразить алгоритм графически используя flow chart ... хотя нет ...oн слишком сложный что бы сразу рисовать диаграмму .Надо сначала в псевдо-коде его описать . Это сообщение отредактировал(а) Qawra - 3.2.2009, 14:58 |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |