![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Простенькая такая игра для двоих на листочке бумаги в клеточку : игроки по очереди ставят точки в углах клеток , соединяют их линиями и пытаются замкнуть эти линии.Как только линия замкнётся территория считается захваченной фараоном .
Игра продолжается пока есть свободное место . Побеждает тот кто чья территория больше . Я думаю что надо закрепить 4 клавиши за одним игроком и 4 за другим что бы они перемещали курсор в момент хода . Но я не умею писать игры вообще ! Учитель сказал что мы должны будем написать это за новогоднии праздники (а значит праздников этих у меня не будет - я буду читать книжку Java2 на 1100 страниц и писать игру ). Книжку эту он нам сказал не читать полностью а только те темы которые в процессе работы могут понадобиться .В какой же последовательности мне её читать и что может понадобиться для этой конкретной игры ? !! |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Вообще у двоечников она называется "точки", и алгорим там ни разу не простой, обработка клавиш это наилегчайшее действие в ней. Если это задал преподаватель, значит есть какие то упрощения, стоит о них сказать.
|
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
У двоечников ? Это специально для них игра ?
Я думала я почти отличница ! Преподаватель пoка ничего не сказал про упрощения .Мы должны ещё теорию закончит . Впереди ( как я понимаю по оглавлению ) ещё 60 страниц для изучения : Polymorphism by Inheritance, Text files , vectors , Interfaces ,Serialisation ,Exteption Handling, Abstract classes ,Recursion ,Java DOC ,AWT and Swing . Какие могут быть упрощения в этой игре ? Может лучше мне их самой преподавателю предложить ... |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 4 Всего: 21 |
Все названия на английском. Ты в какой стране учишься, отличница?
-------------------- Мне нужны помощники. |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Qawra,
просто в нее часто двоечники на последних партах во время уроков играют ![]() Упрощения - например поле маленькое. Или используются готовые наработки. Либо алгоритм будет рассматриваться во время обучения. |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Препод изверг у вас
![]() Из перечисленного рекурсия может понадобиться, Swing наверное тоже. Плюс любой способ вывода графики, ввод если с клавиатуры можно на всех игроков общие клавиши сделать - ходы все равно по очереди делаются. И для начала надо четко правила описать - куда можно ставить точки, когда их можно соединять итд. Потом придумать как определить замкнутый контур, как найти все точки внутри контура... Но начинать нужно с правил. ЗЫ Фараон вроде карточная игра --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
BalmaR |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 11.11.2008 Репутация: нет Всего: нет |
=) конечно можно
|
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Видимо это тактика преподавания у него такая - всех в омут и плывите если выплывите .. С этой игрой у меня очень нехорошие предчувствия ...не может человек просто взять и написать игру если до этого он ничего подобного не писал . Правила игры были очень простые .Листочек в клеточку где игроки ставят точки ( каждый своим цветом чернил ). Ставить точки можно в любом незанятом углу клетки . Точки одного цвета соединяются по диагонали или по ребру клетки ( но новые чёрточки не могут пересекать уже сделанные чёрточки ) .Если они замыкаются в любую даже самую маленькую фигуру ( треугольник)- эта фигура заштриховывается цветом игрока и считается территорией захваченной фараоном . Второй игрок при удачном стечении обстоятельств может обойти своими точками эту территорию замкнуть свою линию . В этом случае он её завоёвывает ( заштриховывает своим цветом ) . Как создаются листочки в клеточку если писать всё надо в BlueJ ? |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
BlueJ это в форум по яве, там быстрее ответят. Или читать документацию
![]() Вобще - пиши классы Точка, Поле, Игрок Для класса Точка: Идентификатор игрока, который поставил точку(или ноль, если точка не поставлена) Идентификатор игрока, которым захвачена точка(-//-) Массив с указателями на точки, с которыми она соединена линией. Соседних точек максимум восемь. Массив с указателями на точки, с которыми соединять нельзя. Таких точек может быть четыре. Методы: Занять() Захватить() СоединитьС() НельзяСоеденитьС() Для класса поле: Две переменные - высота и ширина игрового поля (в точках) Массив Точек[ширина][высота] Методы: ПоставитьТочку() СоединитьТочки() Для класса Игрок: Идентификатор Цвет Методы: ВзятьИД() ВзятьЦвет() Вот примерно так. Это сообщение отредактировал(а) Rpahut - 22.11.2008, 20:12 --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
а почему в классе точка существует
"Массив с указателями на точки, с которыми соединять нельзя. Таких точек может быть четыре." ? Где они находятся ? |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Как копнете глубже поймете, что там за ужасы хранятся
![]() Если игра только на двоих людей (без ИИ), то все сводится к функции захвата территории. Она вызывается каждый раз, когда игрок ставит точку, нужно пробежать все соседние такие же точки (незахваченные, свои) и при замыкании контура (тут еще определить, замыкаем ли он, и находится ли внутри него точка противника, тут я делал рекурсией, нужно учитывать глубину поиска на больших картах и чтобы стек не переполнился, и все равно получалось очень медленно) пометить контур (точнее точки его образующие) как захваченный и помещать все контуры в отдельный массив (для рисования линий при отображении). Вообще - поисковик ничего подобного не выдает? возможно кто то уже делал похожее |
|||
|
||||
russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
AntonN, а если с ИИ? Брать пролог и курс искуственного интеллекта? ;)
|
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Хотелось бы посмотреть на что-нибудь подобное ..хотя я думаю что на моём уровне я смогу коде .Надо будет сидеть с книжкой и разбираться .
Здесь есть об игре "точки " http://pointsgame.narod.ru/ но это немного другой вариант где "Смысл состоит в окружении как можно большего числа точек противника." В "Фараоне " не важно окружаешь ли ты точки противника или просто пустую территорию . Важно в итоге окружить большую площадь чем твой противник . Не знаю становиться ли поставленная задача от этого легче .. |
|||
|
||||
Rpahut |
|
||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Это четыре точки по диагонали от текущей. Если в клетке проведена диагональная линия, то две другие точки в той же клетке соединить друг с другом уже нельзя. Для них и записывается "нельзя соединить с". Можно в принципе без этого массива, тогда при попытке соединения двух точек нужно проверять, не проведена ли уже в клетке линия. Второй вариант наверное даже лучше... Хотя нет, всетаки пусть будет массив.
Главное чтобы препод не потребовал компьютерного противника ![]() Это сообщение отредактировал(а) Rpahut - 24.11.2008, 18:32 --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||
|
|||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Ну уж о компьютерном противнике пусть он даже и не мечтает ! Он нам ещё даже GUI не показывал , да и алгоритмы мы с ним учили только lдля поиска и для сортировки ...
Раз не очень много мы пока знаем - будем упрощать свою задачу : Если не поручать компьютеру проверять замыкается или нет контур ( там какой-то сложный рекурсивный алгоритм задействован ) а отдать эту функцию самим игрокам .Если игрок считает что пора контур замкнуть пускай кликнет где линию нарисовать .Компьютор проверит и линию нарисует . Что можно ещё упростить без потери идеи ? Узкое место во всей этой затее - документация (которую надо будет на английском языке напечатать ). Оценивается не столько сложность работы сколько ИСПОЛЬЗОВАНИЕ НУЖНЫХ ИНСТРУМЕНТОВ В НУЖНЫЙ МОМЕНТ . В общем реализация должна быть красивой до аскетизма . |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
На данный момент стоит уделить внимание именно структуре классов и тому, как они будут взаимодействовать. Когда дойдете до ГУИ и графики, можно будет сделать окошко, меню и отрисовку игрового поля. Ну и ввод естественно. Уже можно будет поиграть, но поиск контура все равно писать придется
![]() А документацию Javadoc поможет написать. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Сегодня нам показали что такое абстрактый класс и полиморфизм .
Учитель наш с гордостью заметил что теперь мы умеем почти всё что нам надо уметь для написания игры .. А ведь это не чувствуется ! |
|||
|
||||
Rpahut |
|
||||||||||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Графический интерфейс учили? Или он с консоли играть хочет
![]() Короче, вот подробнее структура классов: Самый простой класс, сам ничего не делает и другие классы не использует.
По сути основной класс. Тут будет немного расчетов - точка определяет, можно ли ее поставить или соединить с другой точкой. Потом, рисовать себя на экране она тоже будет сама. Иногда пользуется методами(вернее методом) класса Игрок.
Создает и расставляет на экране необходимое количество точек. Фильтрует обращения к методам Точки - другие классы напрямую с точками не работают, а используют методы класса Поле. Здесь нет метода ЗахватитьТочку, потому что Поле само будет обращаться к этому методу Точки, когда найдет замкнутый контур и все точки внутри него. Использует оба предыдущих класса.
Самый Главный Класс, создает поле, игроков, и рулит всем. Тут же будет создаваться основное окно, обрабатываться мышка и прочая лабуда. Много текста, но ничего сложного. С метода main() этого класса начинается выполнение всей программы(или даже немного раньше).
Вот. Всего четыре три с половиной класса. Ну, еще понадобится класс-диалог для настроек размера поля/количества игроков, но там надо будет олько расставить кнопки и отловить когда пользователь их нажимает. И работать игра будет и без него. ЗЫ Дальше можно набивать эти пустые классы кодом. Начать стоит с конструкторов. В конструкторе Игрока нужно только записать цвет в соответствующее поле класса. У точки нужно записать x и y, запихнуть null в поля поставилТочку и захватилТочку(или как там в яве, само обнуляется?), создать пустые массивы. Конструктор Поля просто вызывает метод УстановитьРазмер(). А в нем уже нужно создавать массив Точек соответственно размерам поля. Точкам кстати при создании нужно посылать их координаты на экране, но пока отрисовки нет можно туда просто нули закинуть. В конструкторе класса Игра создается Поле(можно размерами 0*0, запихиваем в соответствующую переменную класса) и вызывается метод НоваяИгра() с указанием желаемого размера поля и количества игроков. НоваяИгра() в свою очередь создает нужное количество Игроков, назначая каждому свой цвет, сбрасывает номерТекущегоИгрока в ноль и вызывает поле.УстановитьРазмер() чтобы пересоздать точки. Можно еще в конструкторы вставить строчку
, скомпилировать и запустить, посмотреть как создаются объекты ![]() Это сообщение отредактировал(а) Rpahut - 28.11.2008, 01:39 --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
||||||||||
|
|||||||||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Спасибо вам за обьяснение .Графический интерфейс мы пока не учили но предполагается что мы о нём узнаем к католическому рождеству .Через неделю у нас стартует зачётная неделя . Занятия будут продолжаться на фоне зачётов потому что по программе не успеваем .Если бы не занятия математикой я бы уже попробовала написать классы .Но подготовка к тесту по математике требует сейчас очень много времени . Какие классы , библиотеки , ... , Java нужно применять для этого проекта ? Может мне пока лучше поискать о них информацию в интернете ...
|
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
А как же, это все нужно переписать на яве. BlueJ у вас установлен?
Из стандартных классов в описании фигурирует только класс Color, обо всем остальном в интернете информации не будет. Это самодельные классы. Хотя, может в яве и на случай игры в точки есть стандартные классы? ![]() --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
BlueJ у меня установлен .Сейчас буду повторять тот Java синтакс который уже учили ." Не густо" однако у нас с синтаксом
![]() |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Все !!! экзамены и зачёты сданы
![]() Вчера при свечах повторяла к экзамену Java на бумажке (электричество по случаю мощной грозы просто отсутствовало). В принципе всё понятно : packages , abstract classes , inheritance , encapsylation , polymorphysm , interfaces ...Практически это пока всё . Хорошая вещь обьектно- ориентированное программирование ! За время моего короткого знакомства с Java мне встречался : java.util* ....JoptionPane ... String ..Math..Кажется это всё . Что мне надо почитать из tutorials в интернете ? Пробелов у меня сейчас значительно больше чем знаний . |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Пока можно обойтись одним синтаксисом. Вообще должен сказать что мои познания в яве меньше ваших, так что читать туториалы наверное придется мне.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Если принимать во внимание что обьектно-ориентированное программирование имеет " Bottom-Up " дизайн , мне надо определить самую элементарную часть проекта и начать с неё...
Или лучше всё таки начать с создания поля ? Чего-то мне пока не хватает...Наверно графического интерфайса ![]() Это нормально что его пока нет ? |
|||
|
||||
Rpahut |
|
|||
![]() 0xdeadbeef ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 9.4.2006 Репутация: 5 Всего: 7 |
Начинать можно с любого места. Просто если начать с класса Поле, он не скомпилируется пока не будут написаны классы Точка и Игрок. Вопрос удобства.
Графический интерфейс будет позже, когда будет что выводить на экран. --------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею? |
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
Учитель сказкал графический интерфасе надо писать параллельно с основными классами но храниться он будет отдельно .
Скачала с торрента 70 книг по Java . Там есть книга по программированию игр , книги по алгоритмам и две книги по SWING .. Вчера всё открывалось (формат файла - UIF ) а сегодня ни MagicISO ни UltraISO их не открывают .Что-то сбилось в настройках ...или антивирус ...но в принципе не должен он был... В общем проведя два часа в попытках это снова открыть я пока отложила это в сторону . Что-бы рисовать поле нужен будет Photoshop ? У меня в Word есть замечательный template который выводит листочек в клеточку ![]() |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Qawra, а в чем проблема нарисовать поле самой? два цикла и всё
![]()
|
|||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
У меня в голове пока не всё уложилось .Команда
мы делали когда квадрат рисовали . (два nested loop и команда напечатать * ) Что надо импортировать что-бы использовать DrawCell ? И что там можно модифицировать ? Размер , цвет и фон клетки могут быть разными ? Я нашла и скачала аналогичную игру написанную на каком-то другом языке ![]() Если графический интерфасе переделать на свой лад а код игры перевести на Java и модифицировать его на захват территории (когда замыкания контура происходит в не зависимости от нахождения внутри точек противника ), будет ли это более простой вариант или более сложный с точки зрения кода ? C первого взгляда он мне такой вариант кажется проще ..Но в принципе он ведь не избавляет от применения основного рекурсивного волнового алгоритма ? |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
||||
|
||||
Qawra |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 6.3.2007 Репутация: 3 Всего: 4 |
А можно установить карту древнего мира как фон и на него как-нибудь ненавязчиво для восприятия нанести клетки ? Задача эта выполнимая ?
|
|||
|
||||
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. |