Моя попытка
Модератор: Jolly Roger
Моя попытка
Приветствую всех!
Это мой первый пост на этом форуме, и сим сообщаю, что попытаюсь испечь свой рогалик.
Да, вкратце - история. Играл (и продолжаю играть) во много рогаликов, хотя, простите, предпочитаю тайловую графику. Больше всего нравится NetHack (и SlashEm), но так пока и не прошёл (изучение спойлеров или исходников кажется не слишком честным путём). А что прошёл... кхм... Sword of Fargoal? Кажется, всё...
Мой проект будет писаться на Java (опыт небольшой, но C много писал только под ДОС). Графика - тайловая 32*32. Остальные подробности пока утаю - во-первых, чтобы кое-что было сюрпризом, а во-вторых, вполне возможно, что проект так и не дойдёт до релиза (насколько я понял - такая печальная участь у 90% всех рогаликов).
А теперь - можно я задам несколько вопросов?
1. Тайлы. Что лучше - попробовать нарисовать самому, пусть рисунки будут наивные, или взять нужные из Nethack или Dungeon Crawl)?
2. Остров. Мне нужно сгенерировать остров (на котором будут входы в подземелья) - но не нашёл, какой лучше алгоритм использовать.
Попробовал такой: всем элементам map[][] присваивается сл4учайное значение от 0 до 255, крайние клетки всегда = 0. Потом несколько раз провожу "усреднение значений" карты:
map[y][x] = (map[y][x]+map[y-1][x]+map[y+1][x]+map[y][x-1]+map[y][x+1]) / 5;
И - финал - для всех точек карты, для которых map[y][x] < некоего порогового значения, делаю "воду", иначе - это суша.
Получается не очень.
Остальное будет позже.
P.S. Пока в программе красный квадрат бегает по экрану по нажатию клавиш курсора.
Это мой первый пост на этом форуме, и сим сообщаю, что попытаюсь испечь свой рогалик.
Да, вкратце - история. Играл (и продолжаю играть) во много рогаликов, хотя, простите, предпочитаю тайловую графику. Больше всего нравится NetHack (и SlashEm), но так пока и не прошёл (изучение спойлеров или исходников кажется не слишком честным путём). А что прошёл... кхм... Sword of Fargoal? Кажется, всё...
Мой проект будет писаться на Java (опыт небольшой, но C много писал только под ДОС). Графика - тайловая 32*32. Остальные подробности пока утаю - во-первых, чтобы кое-что было сюрпризом, а во-вторых, вполне возможно, что проект так и не дойдёт до релиза (насколько я понял - такая печальная участь у 90% всех рогаликов).
А теперь - можно я задам несколько вопросов?
1. Тайлы. Что лучше - попробовать нарисовать самому, пусть рисунки будут наивные, или взять нужные из Nethack или Dungeon Crawl)?
2. Остров. Мне нужно сгенерировать остров (на котором будут входы в подземелья) - но не нашёл, какой лучше алгоритм использовать.
Попробовал такой: всем элементам map[][] присваивается сл4учайное значение от 0 до 255, крайние клетки всегда = 0. Потом несколько раз провожу "усреднение значений" карты:
map[y][x] = (map[y][x]+map[y-1][x]+map[y+1][x]+map[y][x-1]+map[y][x+1]) / 5;
И - финал - для всех точек карты, для которых map[y][x] < некоего порогового значения, делаю "воду", иначе - это суша.
Получается не очень.
Остальное будет позже.
P.S. Пока в программе красный квадрат бегает по экрану по нажатию клавиш курсора.
- Jolly Roger
- Сообщения: 2973
- Зарегистрирован: 27 ноя 2009, 09:10
- Откуда: Minsk, Belarus
Re: Моя попытка
Как человек не выпекший ещё свой рогалик, но уже столкнувшийся с заданными вопросами, могу сказать:
1. Не заморачивайся с рисованием тайтлов, вообще, сделай поддерку тайтлов, если уж так хочется, а вместо красивых картинок используй буквы. Придёт время, будет вам и белка, будет и свисток, а в начале: НЕ трать на это время вообще. Куда важнее, чтобы игра могла поддерживать картинки разных размеров и менять их без внесения именений в код.
2. Отложи случайный генератор на будущее и загружай его из файла, нарисованный лично тобой. Генератор такая штука, его лучше подгонять под концепцию игры, а не игру под генератор. На том этапе, что ты сейчас важнее общая работа с графикой и всякая техника, вроде обхождения препятствий.
Как-то вот так, думаю если, что то форумчане меня поправят.
1. Не заморачивайся с рисованием тайтлов, вообще, сделай поддерку тайтлов, если уж так хочется, а вместо красивых картинок используй буквы. Придёт время, будет вам и белка, будет и свисток, а в начале: НЕ трать на это время вообще. Куда важнее, чтобы игра могла поддерживать картинки разных размеров и менять их без внесения именений в код.
2. Отложи случайный генератор на будущее и загружай его из файла, нарисованный лично тобой. Генератор такая штука, его лучше подгонять под концепцию игры, а не игру под генератор. На том этапе, что ты сейчас важнее общая работа с графикой и всякая техника, вроде обхождения препятствий.
Как-то вот так, думаю если, что то форумчане меня поправят.
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Моя попытка
Если не умеешь рисовать, а тайлы уж очень хочется, есть два пути: либо ты ищешь художника, что будет не очень легко без готового хорошего рогалика, либо ты тыришь графику откуда-то ещё. Кравлом и Нетхаком можешь не ограничиваться, существует ещё дохрена игр (особенно на старых приставках), откуда можно взять вполнее нормальные тайлы.1. Тайлы. Что лучше - попробовать нарисовать самому, пусть рисунки будут наивные, или взять нужные из Nethack или Dungeon Crawl)?
Айв кнгенгах Йог-Сотот
Re: Моя попытка
Главное - делать то, от чего удовольствие получаешь .)
Хочешь рисовать тайлы - рисуй.
Хочешь генерить остров - генери.
Если не уверен, что хочешь, то следуй советам Jolly Roger .)
Ну и вдохновение штука очень непостоянная, ее надо использовать грамотно:
для поддержки нужен видимый, осязаемый результат трудов, чем быстрее, тем лучше.
Хочешь рисовать тайлы - рисуй.
Хочешь генерить остров - генери.
Если не уверен, что хочешь, то следуй советам Jolly Roger .)
Ну и вдохновение штука очень непостоянная, ее надо использовать грамотно:
для поддержки нужен видимый, осязаемый результат трудов, чем быстрее, тем лучше.
Re: Моя попытка
Большое всем спасибо за ответы!
День второй.
Да, в общем, графика - дело десятое.
Что пока получилось - можно посмотреть на скриншоте. Теперь вопрос - куда двигаться дальше.
Можно, я изложу здесь несколько своих соображений? И если я что-то скажу не так, поправьте меня, пожалуйста.
Итак, у меня будет класс Game - ядро игры.
В нём будут объявлены массивы для карты, для видов местности (элементы карты), существа (существо с номером 0 - сам игрок), предметы.
В правильном ли направлении я двигаюсь?
День второй.
Да, в общем, графика - дело десятое.
Что пока получилось - можно посмотреть на скриншоте. Теперь вопрос - куда двигаться дальше.
Можно, я изложу здесь несколько своих соображений? И если я что-то скажу не так, поправьте меня, пожалуйста.
Итак, у меня будет класс Game - ядро игры.
В нём будут объявлены массивы для карты, для видов местности (элементы карты), существа (существо с номером 0 - сам игрок), предметы.
Код: Выделить всё
class Game {
static final MAP_WIDTH = 64, MAP_HEIGHT = 64, TILE_SIZE = 32;
int[][] map = new int[MAP_HEIGHT][MAP_WIDTH];
Terrain[] terrain = { new Terrain("water.png"), new Terrain("grass.png"), new Terrain("tree.png") };
/* т.е. значения в map: 0 - это вода, 1 - трава, 2 - дерево */
int[][] flags = new int[MAP_HEIGHT][MAP_WIDTH];
/* тут будут разные флаги для определённой клетки: видимость, освещённость и т.п. */
ArrayList<Creature> creatures; /* существа */
ArrayList<Thing> things; /* предметы */
Re: Моя попытка
У этих тайлов свое достоинство - они глаза _совсем_ не напрягают.
С классом Game в целом вроде норм. Единственное, я бы отделил UI от игровой логики. Чтобы класс Game не заботился сам ни о размерах тайла, ни о png файлах, и т.п. Разделение логики (не держать все в голове), ну и жесткой нет привязки к тайлам вообще. можно будет сделать хоть ASCII хоть full-3d .)
Но это не обязательно.
С классом Game в целом вроде норм. Единственное, я бы отделил UI от игровой логики. Чтобы класс Game не заботился сам ни о размерах тайла, ни о png файлах, и т.п. Разделение логики (не держать все в голове), ну и жесткой нет привязки к тайлам вообще. можно будет сделать хоть ASCII хоть full-3d .)
Но это не обязательно.
Re: Моя попытка
Так лучше?
UPD: Попробую теперь добавить кое-каких монстров...- Sanja
- Администратор
- Сообщения: 791
- Зарегистрирован: 24 ноя 2006, 12:25
- Откуда: Новосибирск
- Контактная информация:
Re: Моя попытка
А мне понравился первый вариант
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Моя попытка
Странные у тебя глаза. Едкие кислотные цвета тебе нормально, а кравловские тайлы глаза разъедают?У этих тайлов свое достоинство - они глаза _совсем_ не напрягают.
НетТак лучше?
Чем тебе АСКИИ не нравится то? Куда лучше плохосделанных тайлов.
Недавно подбирал буковки для Барионикса, получилось вполне айс
- Вложения
-
- SymbolTest.png (8.33 КБ) 9060 просмотров
Айв кнгенгах Йог-Сотот
Re: Моя попытка
А, я понял. Больше всего не понравились яркие цвета на фоне. Да, надо приглушить. Но вопрос графики пока отложу на потом, надо всё-таки "оживить" мир немного...
- Jolly Roger
- Сообщения: 2973
- Зарегистрирован: 27 ноя 2009, 09:10
- Откуда: Minsk, Belarus
Re: Моя попытка
2 Maelstrom, а ничего так, красивенько.
Надеюсь будут доступны оба варианта?
Надеюсь будут доступны оба варианта?
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Моя попытка
Я тоже надеюсь, что тайлы удасться дорисоватьНадеюсь будут доступны оба варианта?
Айв кнгенгах Йог-Сотот
Re: Моя попытка
Простите, а на Яве кто-нибудь тут рогалики программировал?
Можно ли вешать весь "цикл жизни" в методе keyPressed?
(В этом случае, как мне кажется, о мыши вообще можно забыть.)
Наверное, логичнее сделать "жизнедеятельность" в отдельном потоке run(), в котором проверять нажатые клавиши и кнопки мыши, а потом делать перемещения монстров и т.д....
Можно ли вешать весь "цикл жизни" в методе keyPressed?
(В этом случае, как мне кажется, о мыши вообще можно забыть.)
Наверное, логичнее сделать "жизнедеятельность" в отдельном потоке run(), в котором проверять нажатые клавиши и кнопки мыши, а потом делать перемещения монстров и т.д....
Re: Моя попытка
привет.
while(<что-нибудь>)
{
events.check(); // здесь слушаем клаву и мышку
monsters.nextStep(); // здесь всех двигаем
field.show(); // все рисуем
}
как-то так.
Сразу вопрос: как ты выводишь графику? awt или что-то другое?
Соседняя тема моя, собственно, про BlameR.Newman писал(а):Простите, а на Яве кто-нибудь тут рогалики программировал?
да, так логичнее. Про мышку забывать не за чем в принципе, ее эвенты тоже можно обрабатывать, как и клавишные, в основном потоке. То есть метод run():Newman писал(а):Наверное, логичнее сделать "жизнедеятельность" в отдельном потоке run(), в котором проверять нажатые клавиши и кнопки мыши, а потом делать перемещения монстров и т.д....
while(<что-нибудь>)
{
events.check(); // здесь слушаем клаву и мышку
monsters.nextStep(); // здесь всех двигаем
field.show(); // все рисуем
}
как-то так.
Сразу вопрос: как ты выводишь графику? awt или что-то другое?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 49 гостей