![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Конечно выполнимая. Но лучше сначала сконцентрироваться на игровом процессе
![]() |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Qawra, что у вас уже написано?
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Пока у меня только классы в блокноте набросаны которые вы мне порекомендовали ( методы пока пустые). Там у меня один метод в голове не уложился , мне показалось что он в двух разных классах почему-то прописан .Не твёрдо знаю какие именно массивы создавать , поэтому это место пока тоже пусто .
Есть нечто странное с уроков по GUI ...
вот эти кусочки кода я теперь и пытаюсь осознать .Не то чтот-бы сложно , просто каждая строка несёт в себе некое откровение ... Жаль что как делать меню нам не обьяснили . А С АЛГОРИТМОМ то ПРОСТО БЕДА !!! Учитель сказал что его на нашем уровне не предполагается писать этот алгоритм самому но алгоритм должен работать правильно ![]() Основная проблема в замыкании контура из точек . Искусственного интеллекта нам не надо но с этой конкретной задачей компьютер должен справиться.И ещё лучше если он захваченные области цветом закрашивать будет .Хотя можно и без заливки цветом . Мне понравился как играет версия с сайта http://www.deyton.ru/points/ Но она не не на Java а на каком то другом языке . Функция сетевой игры которая там есть мне не нужна . Нужна только игра двух игроков .И интерфасе конечно нужно полностью переработать . У нас наверно 50 процентов оценки от интерфаса зависит . Был ещё кусочек кода с какого то сайта где этот алгоритм был написан кажется на BASIC но для меня это - зашифрованное НЕЧТО . |
|||
|
||||
Rpahut |
|
||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Он действительно прописан. Если класс Игра по совместительству еще и реализует весь интерфейс( ![]() Если интерфейс отдельными классами, тогда там по другому конечно нужно делать. Меню делается так же как и все остальное в свинге - создается при помощи new() и добавляется при помощи add().
Етесна перед этим нужно создать menuBar (класс JMenuBar) и добавить его к фрейму при помощи метода setJMenuBar() (фрейм это JFrame, наше окно). Когда menu создано, можно создавать элементы меню (класс JMenuItem) и добавлять их к menu тем же методом add(). ![]() Вот... Чтобы это меню еще и делало что-нибудь, нужно вписать в начале класса implements ActionListener и добавить метод
... у нас тут филиал форума по яве... ==============================================
Алгоритм писать не надо совсем, надо его понять и написать код. В классы мы можем запихать любые данные, которые нам понадобятся в процессе поиска контуров. Из того что написано ниже видно что нам нужна информация о том, с какими точками соединена каждая точка - поэтому в классе Точка есть массив "соединитьС", он не только для того чтобы рисовать соединения на экране. Так вот - смотрим что нужно сделать - придумываем (или ищем в интернете) как можно сделать - вписываем переменные которые понадобятся и - пишем методы которые с этими переменными работают. Контурные точки найти довольно просто. Первый вариант - это отбросить все не-контурные точки: Если точка является частью контура, то она соединена по меньшей мере с двумя другими точками, которые в свою очередь тоже соединены с двумя или больше точками каждая, которые в свою очередь тоже соединены с двумя или больше точками... и так до переполнения стека ![]() В цикле перебираем все точки поля Если находим незахваченную точку, выполняем для нее метод такой:
Все "нетупиковые" точки после этого цикла - это контурные точки. В теории. Не проверял. Проблема в том что каждый раз придется обрабатывать все поле целиком, а это лишние вычисления, особенно если с момента последней обработки не появилось новых контуров. Хотя такой вариант проще и нагляднее, потому как рекурсия без ветвлений проходит. Вариант второй - собственно ветвистая рекурсия ![]() Если начать с любой точки контура и идти по всем ее соединениям, и по всем соединениям ее соединений, и так далее, и еще записывать наш путь, то рано или поздно мы придем к точке, на которой уже были до этого(если конечно контур замкнут; иначе доходим до тупика и поворачиваем обратно, пробуем другие соединения). Теперь по записи нашего пути смотрим, когда эта точка нам попадалась; все точки пройденные от нее и до последнего шага - замкнутый контур. Продолжаем пока не пройдем все соединения, найденные точки контуров выписываем чтоб не забыть. Кстати, игрокам придется не только ставить точки, но и рисовать соединения. Лучше чем тупо автоматически соединять точки, которые достаточно близко друг к другу - единственный вариант, который пришел мне в голову. Interface - [ɪntəfeɪs] - интефейс, или если Р на русский манер произносить, то интерфейс. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||
|
|||||||||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Поначалу я тоже думала что "игрокам придется не только ставить точки, но и рисовать соединения ". Мысль о применении волнового рекурсивного алгоритма вводила меня тогда в ступор . Потом я увидела этот алгоритм здесь http://pointsxt.logicsworld.net/forum/inde...pic=69&st=0 Удивительно что он оказался даже меньше чем Quick sort алгоритм который казался мне таким неудобопонятным ![]() Надо попробовать его применить раз уж он так кстати нашелся ( правда на Java он у меня пока не переведён ). Графический интерфейсе нам сказали пока делать в отдельном классе . Может оно вместе было бы и лучше .. но сказали сделать в отдельном . Я не знаю как люди делают красивые кнопки для интерфейса ..где можно поменять фон у кнопки или тени на неё навести ? В понедельник у нас последнее занятия и наступят каникулы. Буду пробовать закончить к Новому году ...хотя думаю это в принципе не реально :( |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Нашла такой путь создания нестандартных кнопок :
с интерфейсом CustomLook всё понятно а вот класс OldButton не понятно откуда взялся . Можно заменить его на JButton ? Импортировала я лишнее потому что не знаю что писать внутри метода .Mouse Listener наверно в первом а второй метод из чего строить ? Это сообщение отредактировал(а) Qawra - 19.12.2008, 21:01 |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Qawra, сейчас у тебя в голове каша, т.к. слишком много новой информации и широкая задача. Нужно поступить следующим образом.
1. Во-первых, в игре самое главное - это игра, а не наличие или отсутствие круглых кнопок. Поэтому сначала нужно забить на свинги, и разобраться с основами. 2. Нужно быть последовательной: 1.1) Научиться рисовать точки, линии на форме 1.2) Нарисовать сетку 1.3) Научиться обрабатывать события мыши на форме и рисовать точки в узлах сетки по клику мыши на форме Потом перейти к игровой логике: 2.1) Ввести понятие "Игрок А", "Игрок Б", ход, переход хода 2.2) Ввести понятие "Точка" и понятие "Владелец точки" 2.3) Рисовать точки разных владельцев на карте разными цветами Потом разобраться с игровым состоянием. 3.1) Изучить материалы по теории графов. Разобраться с вершинами и ребрами. Выяснить, что такое путь в графе. 3.2) Представить состояние игрового поля в виде графа. Добавление каждой новой точки вызывает создание новой вершины в графе (хотя фактически, это сетка, но мне кажется, с графами будет удобнее). Если рядом с с добавленой точкой есть другая(ие), принадлежашие своему Игроку, то также создавать в графе ребро между ними. 3.3) Связать понятие Состояние Игрового Поля с пп. 1.1-2.3. Клик по узлу сетки на форме должен вызывать добавление нового узла в граф. 3.4) Реализовать автоматическую отрисовку границ территорий. Судя по всему, это можно сделать, выполнив обход всех своих вершин в графе для каждого игрока, нарисовав линии только между теми точками, при обходе которых хотя бы один путь в графе представляет собой цикл. Далее, если тебе еще нужно делать противника-компьютера, то нужно думать над его алгоритмом. Это целая отдельная тема. По пп. 1.1-1.3 тебе лучше помогут в разделе нашего форума по Java. По пп. 2.1-3.4 можно создавать отдельные топики в этом разделе. У нас есть правило - один топик - один вопрос. По мере возможности поможем. И помни, что данное задание предназначено как раз для того, чтобы научить тебя разделять поставленную задачи на более мелкие, и пошагово их выполнять. Когда-то давно в 7-ом или 8-ом классе мне нужно было написать крестики-нолики. И я с этим справился. И ты справишься. Главное - придерживаться плана и не бросаться влево-вправо. Добавлено через 52 секунды ЗЫ. Судя по описанию, таким же образом работает алгоритм поиска пути A* (А-звездочка, a-star). Это сообщение отредактировал(а) arilou - 20.12.2008, 01:53 |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Один пункт с которым я не соглашусь(и с вытекающими из него). Знание ТГ помогло бы, но изучение ее ради поставленной цели мне кажется только запутает дело. Плюс нехватка времени (судя по тому как дело двигалось до сих пор)... --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
На самом деле, там все просто, на уровне средней школы. Достаточно разобраться, что такое вершины, ребра, путь, цикл. |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Я не спорю. Но для массива я могу во всяком случае предложить готовое решение уже сейчас.
Думаю до п.1.3 можно этот вопрос отложить и посмотреть как пойдет. Qawra, развернуто пункт 1.1 плана, предложенного arilou: Создать класс-расширение JFrame, на котором можно было бы рисовать (из программы, не руками конечно). Я делал класс-расширение JPanel, у которого в методе paintComponent() и вписывал код. Панель потом добавлял к классу-расширению JFrame. Вам в поисках правильного пути лучше свериться с конспектами или создать тему в форуме по Java. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |