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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> написать игру "Фараон" с нуля 
:(
    Опции темы
Rpahut
Дата 24.11.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

Репутация: 5
Всего: 7



На данный момент стоит уделить внимание именно структуре классов и тому, как они будут взаимодействовать. Когда дойдете до ГУИ и графики, можно будет сделать окошко, меню и отрисовку игрового поля. Ну и ввод естественно. Уже можно будет поиграть, но поиск контура все равно писать придется smile Рекурсия - очень даже нужный инструмент.

А документацию Javadoc поможет написать.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 27.11.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Сегодня нам показали что такое абстрактый класс  и полиморфизм .
Учитель наш с гордостью заметил что теперь мы умеем почти всё что нам надо уметь  для написания  игры ..
А ведь это не чувствуется  ! 
PM MAIL   Вверх
Rpahut
Дата 28.11.2008, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

Репутация: 5
Всего: 7



Графический интерфейс учили? Или он с консоли играть хочет smile ?

Короче, вот подробнее структура классов:

Самый простой класс, сам ничего не делает и другие классы не использует.
Код

класс Игрок {
 Color цвет // тут хранится цвет игрока (класс java.awt.Color)

 паблик Игрок(Color ц) // конструктор, при создании указываем цвет
 паблик Color ВзятьЦвет() // чтоб другие классы могли получить цвет
}


По сути основной класс. Тут будет немного расчетов - точка определяет, можно ли ее поставить или соединить с другой точкой.
Потом, рисовать себя на экране она тоже будет сама. Иногда пользуется методами(вернее методом) класса Игрок.
Код

класс Точка {
  целое x, y // положение на экране
  
  Игрок поставилТочку // кто поставил точку
  Игрок захватилТочку // кто захватил
  
  Точка[] соединитьС
  Точка[] нельзяСоединитьС

  паблик Точка(целое x, целое y) // конструктор класса

  паблик булево ПоставитьТочку(Игрок) // метод для установки точки
  бублик булево ЗахватитьТочку(Игрок) // метод для захвата точки

  паблик булево СоединитьС(Точка, Игрок) // для соединения
  паблик НельзяСоединитьС(Точка)
}


Создает и расставляет на экране необходимое количество точек. Фильтрует обращения к методам Точки - другие классы напрямую с точками не работают, а используют методы класса Поле. Здесь нет метода ЗахватитьТочку, потому что Поле само будет обращаться к этому методу Точки, когда найдет замкнутый контур и все точки внутри него.
Использует оба предыдущих класса.
Код

класс Поле {
 целое ширина, высота // размеры поля
 Точка[][] точки

 паблик Поле(целое ш, целое в) // конструктор, при создании поля указываем ему размер

 паблик УстановитьРазмер(целое ш, целое в) // через этот метод меняем размер поля

 паблик ПоставитьТочку(целое x, целое y, Игрок и) // тут все ясно
 паблик СоединитьТочки(x1, y1, x2, y2, Игрок и) // к слову, здесь и будет поиск замкнутого контура
}


Самый Главный Класс, создает поле, игроков, и рулит всем. Тут же будет создаваться основное окно, обрабатываться мышка и прочая лабуда. Много текста, но ничего сложного. С метода main() этого класса начинается выполнение всей программы(или даже немного раньше).
Код

класс Игра {
 Поле поле // поле
 Игрок[] игроки // аналогично
 целое номерТекущегоИгрока // номер игрока, чей сейчас ход

 паблик статик main(String[] args) // отсюда начинается выполнение программы

 паблик Игра() // конструктор

 паблик НоваяИгра(целое высота, целое ширина, целое количествоИгроков) // вызываем, когда нужно начать новую игру
}


Вот. Всего четыре три с половиной класса. Ну, еще понадобится класс-диалог для настроек размера поля/количества игроков, но там надо будет олько расставить кнопки и отловить когда пользователь их нажимает. И работать игра будет и без него.

ЗЫ
Дальше можно набивать эти пустые классы кодом. Начать стоит с конструкторов. 
В конструкторе Игрока нужно только записать цвет в соответствующее поле класса.
У точки нужно записать x и y, запихнуть null в поля поставилТочку и захватилТочку(или как там в яве, само обнуляется?), создать пустые массивы.
Конструктор Поля просто вызывает метод УстановитьРазмер(). А в нем уже нужно создавать массив Точек соответственно размерам поля. Точкам кстати при создании нужно посылать их координаты на экране, но пока отрисовки нет можно туда просто нули закинуть.
В конструкторе класса Игра создается Поле(можно размерами 0*0, запихиваем в соответствующую переменную класса) и вызывается метод НоваяИгра() с указанием желаемого размера поля и количества игроков. НоваяИгра() в свою очередь создает нужное количество Игроков, назначая каждому свой цвет, сбрасывает номерТекущегоИгрока в ноль и вызывает поле.УстановитьРазмер() чтобы пересоздать точки.

Можно еще в конструкторы вставить строчку
Код

System.out.println("Создан объект Игрок(например)");

, скомпилировать и запустить, посмотреть как создаются объекты  smile 

Это сообщение отредактировал(а) Rpahut - 28.11.2008, 01:39
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 28.11.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо вам за  обьяснение .Графический интерфейс мы пока не учили но предполагается что мы о нём узнаем к католическому рождеству .Через неделю у нас стартует зачётная неделя  . Занятия будут продолжаться на фоне зачётов потому что по программе не успеваем  .Если бы не занятия математикой я бы уже попробовала написать классы .Но подготовка к тесту по математике  требует сейчас очень много  времени . Какие  классы , библиотеки , ... , Java нужно применять для этого проекта ? Может мне пока лучше поискать о них информацию в интернете ...
PM MAIL   Вверх
Rpahut
Дата 28.11.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

Репутация: 5
Всего: 7



А как же, это все нужно переписать на яве. BlueJ у вас установлен?
Из стандартных классов в описании фигурирует только класс Color, обо всем остальном в интернете информации не будет. Это самодельные классы.
Хотя, может в яве и на случай игры в точки есть стандартные классы? smile 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 29.11.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



BlueJ у меня  установлен .Сейчас буду повторять тот Java синтакс который уже учили ." Не густо" однако у нас с синтаксом smile
PM MAIL   Вверх
Qawra
Дата 12.12.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все !!!  экзамены  и зачёты сданы smile  Надо начинать писать программу . Учитель сказал прийти в январе с готовыми классами .На следующей неделе он нам обьяснит GUI и вперёд к вершинам программирования игр . 
Вчера  при свечах   повторяла  к экзамену  Java на бумажке (электричество по случаю мощной грозы  просто  отсутствовало).
В принципе всё понятно : packages , abstract classes , inheritance , encapsylation , polymorphysm , interfaces ...Практически это пока всё   .  Хорошая вещь обьектно- ориентированное программирование ! 

 За время моего короткого знакомства с Java  мне встречался  :  java.util*     ....JoptionPane ... String  ..Math..Кажется  это всё .

Что мне надо почитать  из tutorials  в интернете ?
 Пробелов у меня  сейчас значительно больше чем знаний . 


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


0xdeadbeef
*


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

Репутация: 5
Всего: 7



Пока можно обойтись одним синтаксисом. Вообще должен сказать что мои познания в яве меньше ваших, так что читать туториалы наверное придется мне.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 13.12.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если принимать во внимание  что обьектно-ориентированное  программирование имеет " Bottom-Up  " дизайн , мне надо определить самую элементарную часть проекта  и начать с неё...
Или лучше всё  таки начать с  создания  поля ?
Чего-то мне пока не хватает...Наверно графического интерфайса  smile
Это нормально что его пока нет ? 
PM MAIL   Вверх
Rpahut
Дата 15.12.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

Репутация: 5
Всего: 7



Начинать можно с любого места. Просто если начать с класса Поле, он не скомпилируется пока не будут написаны классы Точка и Игрок. Вопрос удобства.
Графический интерфейс будет позже, когда будет что выводить на экран.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 16.12.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Учитель   сказкал графический интерфасе  надо писать параллельно с основными классами но храниться он  будет отдельно . 
Скачала  с торрента 70 книг  по Java . Там есть книга по программированию игр ,  книги по алгоритмам и две книги по SWING .. Вчера всё открывалось (формат файла - UIF  )  а сегодня  ни MagicISO  ни UltraISO  их не открывают .Что-то сбилось в настройках ...или антивирус ...но в принципе  не должен он  был... В общем проведя два часа  в попытках это снова открыть я  пока отложила это в сторону . 
Что-бы рисовать поле нужен будет Photoshop ?  
У меня в  Word  есть замечательный template  который выводит  листочек в клеточку  smile   

PM MAIL   Вверх
arilou
Дата 16.12.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Qawra, а в чем проблема нарисовать поле самой? два цикла и всё  smile 

Код

for(int i=0; i<FIELD_WIDTH; i+=CELL_SIZE)
   for(int a=0; a<FIELD_HEIGHT; a+=CELL_SIZE)
      DrawCell(i, a);



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


Бывалый
*


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

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



У меня в голове пока не всё уложилось .Команда 
Цитата

 DrawCell(i, a);
 мне  пока не встречалась . Но что-то подобное 
мы  делали  когда  квадрат   рисовали . 
(два  nested  loop  и  команда  напечатать   *   ) 
Что надо импортировать что-бы  использовать DrawCell ?  И что там  можно  модифицировать ?  Размер , цвет   и фон  клетки могут быть разными ?

Я нашла и скачала  аналогичную  игру  написанную  на  каком-то другом   языке  smile  Сижу  ....  играю  ...проникаюсь ... Правда это тот   вариант  где  захватываются точки противника а не территория . Но зато  захваченные  точки  подсчитываются  и отображаются  автоматически.  О  такой детали  я раньше  и  не думала ,  а ведь это интересно . 
Если графический  интерфасе  переделать на свой лад  а 
 код игры перевести  на Java и  модифицировать  его  на захват территории (когда  замыкания контура происходит   в не зависимости от нахождения внутри точек  противника ), будет ли  это более простой  вариант  или  более сложный с точки зрения кода ?  C  первого  взгляда  он  мне такой вариант  кажется проще  ..Но в принципе  он ведь не избавляет  от применения  основного  рекурсивного  волнового  алгоритма ? 

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


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(Qawra @  17.12.2008,  17:13 Найти цитируемый пост)
мне  пока не встречалась . Но что-то подобное 
мы  делали  когда  квадрат   рисовали . 


Это был псевдокод. Команду DrawCell нужно сделать самой - банально нарисовать клетку в указанных координатах. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Qawra
Дата 17.12.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А  можно  установить карту древнего  мира  как фон  и на него как-нибудь ненавязчиво  для восприятия  нанести клетки  ?  Задача  эта  выполнимая ? 
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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