Пятница, 29 Марта 2024, 09:59

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум игроделов » Программирование » Общие обсуждения программистов » Генерация мира. Нужны ответы
Генерация мира. Нужны ответы
TimKruzДата: Воскресенье, 26 Августа 2012, 02:02 | Сообщение # 21
старожил
Сейчас нет на сайте
Quote (Saitei)
Внезапно игра стала генерировать равнины, пологие холмы и большинство единичных летающих блоков пропали.

Он сам даже не ожидал такого неожиданного результата. biggrin Просто ткнул не в ту кнопку, в какую хотел, и внезапно всё заработало. biggrin
Quote (Saitei)
TimKruz, но как рендерить-то,отталкиваясь от массива?

facepalm facepalm facepalm facepalm facepalm
Code
for x:=0 to длина_карты do
   for y:=0 to высота_карты do
     draw_element(map[x,y],x*ширина_блока,y*высота_блока);

Вот, в простейшем случае так. map[x,y] выдаёт номер типа блока, а draw_element рисует на экране картинку заданного ID в заданной позиции.
Например, картинка №1 - земля, точка (5,6) - земля; тогда map[5,6] выдаёт 1, а draw_element(map[5,6],5*32,6*32); рисует блок земли со смещением 160 пикселей по горизонтали и 192 пикселя по вертикали (от левого верхнего угла окна), из расчёта, что блок квадратный, 32 на 32 пикселя.




Сообщение отредактировал TimKruz - Воскресенье, 26 Августа 2012, 02:04
x-and1988Дата: Воскресенье, 26 Августа 2012, 03:04 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
habrahabr.ru/post/111538/
Вот ссылочка на очень интересный алгоритм создания ландшафта в 3д.

Saitei - C++ я не знаю, но могу предоставить свой код по генерации на джаве, и попытаться объяснить, хотя с последним у меня обычно проблема biggrin
Непосредственно саму генерацию я беззастенчиво спёр у Fade`а, но сильно усложнил. Например сначала заполняем мир твердыми блоками(землей), потом в них создаем пещеры - рандомно - вертикальные и горизонтальные, потом всё это заливаем случайным количеством воды.
+ при заполнении блоков используем файлик с шансом и глубиной появления определенных типов грунта


Изучаю Java
My new project
My old project
SaiteiДата: Среда, 29 Августа 2012, 17:12 | Сообщение # 23
старожил
Сейчас нет на сайте
x-and1988, очень любопытно. Кстати я помню твою игру. Ты серьезно мог бы помочь? =)
Был бы очень признателен! Я буду дома ближе к вечеру. Контактные данные оставь в ЛС пожалуйста

Добавлено (29.08.2012, 17:12)
---------------------------------------------
java джавой, но С++ роднее... Кто-то такую весч на С++ поможет реализовать?

TimKruzДата: Среда, 29 Августа 2012, 18:56 | Сообщение # 24
старожил
Сейчас нет на сайте
Quote (Saitei)
java джавой, но С++ роднее... Кто-то такую весч на С++ поможет реализовать?

Если C++ для тебя родной, то почему ты не можешь переписать алгоритм с Java на C++?.. huh
Алгоритмы тебе и так подсказали, и ты сам где-то что-то нашёл, так почему не можешь реализовать всё "в металле"?
Если возникают ошибки, когда пытаешься сделать что-то - пиши конкретно, кто-нибудь да объяснит смысл ошибки, поправит... А то так получается вот что: "я ничего не понял, сделайте всё за меня, только мне нужно именно на C++". wacko


SaiteiДата: Среда, 29 Августа 2012, 21:19 | Сообщение # 25
старожил
Сейчас нет на сайте
Quote (TimKruz)
Если C++ для тебя родной, то почему ты не можешь переписать алгоритм с Java на C++?..
Алгоритмы тебе и так подсказали, и ты сам где-то что-то нашёл, так почему не можешь реализовать всё "в металле"?
Если возникают ошибки, когда пытаешься сделать что-то - пиши конкретно, кто-нибудь да объяснит смысл ошибки, поправит... А то так получается вот что: "я ничего не понял, сделайте всё за меня, только мне нужно именно на C++".

скажем так... Алгоритмы знаю, но движок-то достойный подобрать не могу... А если и подберу - мне нужен временный наставник
FOXДата: Среда, 29 Августа 2012, 21:29 | Сообщение # 26
постоянный участник
Сейчас нет на сайте
Quote (Saitei)
скажем так... Алгоритмы знаю, но движок-то достойный подобрать не могу...

тем кто хорошо знает С++ обычно советуют OGRE
TimKruzДата: Среда, 29 Августа 2012, 21:41 | Сообщение # 27
старожил
Сейчас нет на сайте
Quote (Saitei)
движок-то достойный подобрать не могу

Можешь писать с использованием чисто WinAPI и OpenGL. biggrin Там, при желании, разобраться несложно. Быстро разберёшься в структуре windows-приложения и основных функциях OpenGL - и можешь писать игру...
Хотя, если 2D и без сложных операций (типа вращения, изменения размеров в процентах) над изображением - можно только WinAPI использовать, хотя я не уверен в скорости прорисовки средствами WinAPI...
Quote (Saitei)
Использовал лишь движки GEGE и HGE.

Использовал - и что? Не подходят?
Quote (Saitei)
достойный

Такой-то движок недостоин быть использованным величайшим программистом в истории, героем программирования СССР, товарищем Saitei. biggrin
Возьми какой-нибудь движок, который по описанию и отзывам пользователей подходит под твои цели и требования, изучи его документацию и используй, чего там долго подбирать... На C++ вообще куча движков этих, выбирать легко...




Сообщение отредактировал TimKruz - Среда, 29 Августа 2012, 21:42
zmearДата: Среда, 29 Августа 2012, 21:45 | Сообщение # 28
почетный гость
Сейчас нет на сайте
Saitei, либо завязывай или иди учись программировать на паскале. Мне чет не верится что ты знаешь си++, а если и знаешь то как я фотошоп, название инструментов(ты функций) знаю, а пользоваться (ты расставлять функции в программу) не умею.


FadeBakerДата: Четверг, 30 Августа 2012, 15:29 | Сообщение # 29
JavaSE Game Developer
Сейчас нет на сайте
Усовершенствовал свой код генерации.
Посмотреть.
Генерирует самый разнообразный ландшафт: равнины, овраги, горы и т.д.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
SaiteiДата: Воскресенье, 09 Сентября 2012, 17:07 | Сообщение # 30
старожил
Сейчас нет на сайте
А зачем писать самому функцию рандома?
Fade, объяснишь как работает класс F?
TimKruzДата: Воскресенье, 09 Сентября 2012, 17:43 | Сообщение # 31
старожил
Сейчас нет на сайте
Quote (Saitei)
А зачем писать самому функцию рандома?

1. Можно оптимизировать для конкретных целей, потому что стандартная может оказаться просто неподходящей для игры.
2. Можно сделать ключ, по которому функция всегда будет выдавать одинаковую последовательность чисел - как, например, в Minecraft можно задать строку в качестве ключа генерации мира.
Но для начала можешь использовать стандартную функцию, а потом уже, когда можно будет анализировать результаты генерации, будешь решать - подходит тебе стандартный алгоритм или требуется что-то другое.


SaiteiДата: Воскресенье, 09 Сентября 2012, 23:29 | Сообщение # 32
старожил
Сейчас нет на сайте
TimKruz, а где можно найти алгоритмы рандома? Я искал однажды - эффекта 0... Только в коде Fade видел, но хочется увидеть всю картину
ArchidoДата: Понедельник, 10 Сентября 2012, 02:16 | Сообщение # 33
Сэнсэй
Сейчас нет на сайте
Quote (Saitei)
а где можно найти алгоритмы рандома? Я искал однажды - эффекта 0... Только в коде Fade видел, но хочется увидеть всю картину

Так тебе что нужно то?
Если охота понять как это все работает, то это чистая математика. Тебе дорога на Вики, там в общих чертах есть информация и есть упоминания о наиболее распространенных алгоритмах (по соответствующим сылкам можно о них подробнее почитать, и далее гугл).

А если не охота во все это въезжать, то проще загуглить какую-нить random библиотеку, вроде этой. И нет проблем.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
SaiteiДата: Понедельник, 10 Сентября 2012, 17:48 | Сообщение # 34
старожил
Сейчас нет на сайте
Кто-нибудь поведает мне прелести ООП, а именно - супер-классы и дочерние классы? Это просто ну вообще капец... Функция класса работает через другую функцию другого класса? WHAT THE FUCK?! И какую роль играет конструктор класса?
karuyДата: Понедельник, 10 Сентября 2012, 18:05 | Сообщение # 35
заслуженный участник
Сейчас нет на сайте
Quote (Saitei)
Кто-нибудь поведает мне прелести ООП, а именно - супер-классы и дочерние классы?

Для этого есть учебник.
Quote (Saitei)
Функция класса работает через другую функцию другого класса? WHAT THE FUCK?!

Попробую угадать, ты имеешь ввиду что такое?
Code

TMyClass = class(TObject)
private
a: Integer;
public
constructor Create(value: Integer);
function Test: Integer;
end;

{TMyClass}
constructor TMyClass.Create(value: Integer);
begin
a := value;
end;

function TMyClass.Test: Integer;
begin
Result := a;
end;

//
MyClass: TMyClass;
MyClass := TMyClass.Create(1);
ShowMessage(IntToStr(MyClass.Test));

Тогда - книжка и еще раз книжка.
Quote (Saitei)
И какую роль играет конструктор класса?

Создает экземпляр класса.


Сообщение отредактировал karuy - Понедельник, 10 Сентября 2012, 18:05
tvmerdДата: Вторник, 11 Сентября 2012, 09:27 | Сообщение # 36
участник
Сейчас нет на сайте
Saitei, я твой ЯП не знаю, но генерация ландшафта - чистая математика, а вот какую базу ты выберешь, решать тебе. Можно через простейшие выражения, можно с помощью СВ и всемогущего матстата. Я знаю как делать на бумаге (год проходил модели в универе). Если тее понадобится чуток теории - могу рассказать, как сделать самообучаемость, плавающее влияние случайного фактора, корреляцию, шум и т.д.

Но как это написать на Сиськах я не знаю. sad
TelleiДата: Вторник, 11 Сентября 2012, 10:35 | Сообщение # 37
частый гость
Сейчас нет на сайте
Quote (Saitei)
как работает вообще эта генерация?

теоретечкси делаешь сетку размером кратной двум желательно, потом пишешь хрень из-за которой на первый ряд создаются блоки, потом делаешь проверку и чтобы над нижним рядом создавались делаешь, и так типа например по оси х создается 1 куб высотой 2у потом 2куб восотой 3у


Monster Beats Solo HD White owner, BB programmer. Я только притворяюсь глупым, на самом деле я хакер и язычник. если вы мне благодарны - ставьте минус пруф что я хакер
tvmerdДата: Вторник, 11 Сентября 2012, 11:00 | Сообщение # 38
участник
Сейчас нет на сайте
Ну вот можно по столбцам отрисовку делать, а можно по слоям. В любом случае для генерации одной единицы объема понадобятся координаты только двух измерений, после чего происходит переход на следующую плоскость/столбец
ArchidoДата: Вторник, 11 Сентября 2012, 12:17 | Сообщение # 39
Сэнсэй
Сейчас нет на сайте
Quote (Saitei)
Кто-нибудь поведает мне прелести ООП, а именно - супер-классы и дочерние классы? Это просто ну вообще капец...

О, это ты еще в исходники boost'a не заглядывал biggrin

Автор, читай книжки, учи матчасть и поднимай свой скилл, а не задавай глупые вопросы на форуме, ответы на которые уже сто раз были описаны.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
FadeBakerДата: Вторник, 11 Сентября 2012, 13:24 | Сообщение # 40
JavaSE Game Developer
Сейчас нет на сайте
Quote (Saitei)
Fade, объяснишь как работает класс F?

Вспомогательный класс, в котором содержатся все нужные, часто-используемые функции.
Quote (Saitei)
А зачем писать самому функцию рандома?

Например, гораздо удобнее для генерации числа в заданном диапазоне написать функцию.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
Форум игроделов » Программирование » Общие обсуждения программистов » Генерация мира. Нужны ответы
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг