Создание игры
Просуммируй мои предложения - я для единой карты проектировал.
Да. Можно ещё ввести дальнобойность артиллерии и ракет - единственный физический параметр, абстрактный по своей природе.
Да. Можно ещё ввести дальнобойность артиллерии и ракет - единственный физический параметр, абстрактный по своей природе.
Ок. Я уже согласен на общую карту :). Надеюсь, подлодок не будет?
P.S. Ты бы уже поднакидал примерный планчик. У меня, вишь, не получается...
Как захотите. Добавление нового юнита не принципиально, главное - баланс возможностей соблюсти, тогда интересно играть будет.
Не-е-е, я лучше у туалета пританцовывать буду: и так два проекта висит, а третий наклёвывается. Четыре - это перебор.
Трезвая мысль:)
Потому то я и предлагал задаться хоть какими то практическими вопросами разработки. Кто из тех, что здесь обсуждает, будет писать, и кто из последних представляет, как это писать?
Лично у меня такая мысль. Сначала попробовать реализовать морской бой, в его классическом виде. Заодно определив, что проще - написать сетевую часть, или ИИ. После этого можно будет уже прикручивать какие-то фичи, смотреть, как это будет отражаться на играбельности. Изменять геймплей, графику, что угодно. Потом будет проще переписать, чем браться сразу за заведомо невыполнимое.
Смысл придумать прекрасную концепцию, расписать все на бумаге, и потом положить под ножку стола, чтоб не шатался? Потому что, хоть тут и говорилось, о первостепенной важности описании игры, но никто так и не ответил на вопрос, который тут ставился много раз - доводились ли до чего то материального проекты, начатые на форуме?
Я, конечно, не могу оценить ващи знания и возможности, и потому считаю, что надо переходить от обсуждение абстрактных вещей к чему-то конкретному, например - написанию концепции игры.
P.S. Я не пессимист, просто стараюсь смотреть на вещи трезво. И буду очень рад, если меня убедят, что мои слова необоснованны:)
Вот! Вот, блин! И я, с самого своего вмешательства, толкал эту мысль. Каюсь, потом несколько увлекся. :)
никто так и не ответил на вопрос, который тут ставился много раз - доводились ли до чего то материального проекты, начатые на форуме?
Насколько я узнал на других форумах, игровые проекты - никогда. Если дело и доходило до исходников, то в ТАКОМ примитиве... Когда-то ребята на gamedev.ru пытались что-то реализовать. Но тема улетела, куда-то в сторону создания универсального графического интерфейса, при использовании которого, не имело значения какую библиотеку использовать: DirectX или OpenGL (и что-то еще)...
Да я согласен. Но мы не определили, ЧТО, все-таки начать писать. Никакого ПРЕДВАРИТЕЛЬНОГО подведения итогов не было.
Поддерживаю. Пишется классический морской бой для сети.
Вопросы: язык, уровень графики, target platform?
1. Пишем классику, 2поля 10х10, стандартный набор кораблей, принцип игры стрельнул: убил, ранел, мимо... победил.
2. Раз построен механизм игры, можно расширять, думать о дальности выстрелов, можности оружия, специализации кораблей и т.д.
ps: опять предлагаю мою первую версию этапов разработки... т.е. отталкиваясь от классики...
Как уже предлагал Visual C++6
Графику предлагаю использовать в приложении MFC (Dialog) 2D.
И я того же мнения.
Я к сожалению (как я уже не однократно говорил) не умею програмировать на С++, Visual C и других подобных языках :( :( :(
Но если я хоть для чего нибудь пригожусь, то буду рад помочь.
Кстати, может попробовать сделать ИИ? В классическом "Морском бое" его будет не трудно сделать. У меня есть некоторые соображения на эту тему, если надо, могу рассказать поподробнее.
jambi, swing - это что за звери?
Я к сожалению (как я уже не однократно говорил) не умею програмировать на С++, Visual C и других подобных языках :( :( :(
Но если я хоть для чего нибудь пригожусь, то буду рад помочь.
Кстати, может попробовать сделать ИИ? В классическом "Морском бое" его будет не трудно сделать. У меня есть некоторые соображения на эту тему, если надо, могу рассказать поподробнее.
Расскажи. И еще: для сети пишешь?
1. Чистая случайность (думаю в описании не нуждается);
2. Обстрел областей - поле делится на более большие квадраты, затем выбирается случайный такой квадрат, и в нем уже выбирается клетка. Преимущества данного типа - меньше чисел квадратов - больше процент выпадания каждого из них;
3. Диагональный или крестовидный обстрел - выбирается клетка на поле, затем от нее генерируется расстояние и направление в неочень больших пределах;
4. Спиралевидный обстрел или обстрел "лопуха" - вокруг выбраной клетки производится обстрел каждой соседней клетки по спирали, наращивая радиус;
Данные алгоритмы имеют произвольную продолжительность и выбираются случайно. Естественно при попадании компьютер начинает обстреливать соседние квадраты, пока не уничтожит корабль.
Таким образом можно сформировать разные уровни сложности.
Я не утверждаю, что данные алгоритмы хороши (я даже на это и не надеюсь), но может какое нибудь понравится? :)
P.S. Все что я умею - Pascal. К сожалению я имею только общее представление о сетях вообще, не говоря уже о их организации в языках програмирования:(
И потом, в перечисленных мной библиотеках есть высокоуровневые средства для работы с сетью. На апи придется все сетевое писать на WinSock2, а у меня о нем плохие воспоминания. (Хотя - может я тут один прикладник, а все остальные на асме шпарят?;))
P.S. swing - это родная граф. библиотека явы, от sun, а jambi - это плагин к qt под яву, грубо говоря.
Про выбор ИИ или Сеть - даже не знаю, что лучше. Но я вот что думаю - раз игра не по турам, а по партиям, то нужно ввести систему рейтингов - это особенно интересно в сетевой игре, согласитесь приятно иметь звание "Адмирал Флота":) Естественно нужно сделать динамическую систему, т.е. работает правило: "сложно не захватить, а удержать". Можно будет тогда устраивать турниры. Ой че-то я замечтался:rolleyes:
Salamansar - алгоритмы хороши. По крайней мере для не высшего уровня сложности сойдут Тогда на чем акцент - ИИ или сеть?
Думаю изначально лучше акцентировать на ИИ, даже не сложный алгоритм... чисто для тестирования...(на начальной стадии) а далее будет видно.
Я тоже чё-нить сделаю... Но предупреждаю, я сильно загружен по работе. Так что - чудес не будет ;)...
Кстати, писать буду на С\С++...
[/QUOTE]
К своему стыду ни разу не сталкивался и имею только общее представление:( Но так как эта вещица используется даже в Pascal, то думаю мне не составитт особого труда ее изучить, тем более, что спешить мы не собираемся (вроде бы) :)
int y=BEGIN_POINT;
int k = 300;
int size = 24;
CClientDC dc(this);
CPen pPen;
pPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
dc.SelectObject(&pPen);
dc.Rectangle(x, y, size*10+x, size*10+y);
dc.Rectangle(x+k, y, 240+x+k, 240+y);
int i;
for(i=0; i<10; i++)
{
dc.MoveTo(x, y);
dc.LineTo(x+size*10-1, y);
dc.MoveTo(x+k, y);
dc.LineTo(x+k+size*10-1, y);
y+=size;
}
y=BEGIN_POINT;
for(i=0; i<10; i++)
{
dc.MoveTo(x, y);
dc.LineTo(x, y+size*10-1);
dc.MoveTo(x+k, y);
dc.LineTo(x+k, y+size*10-1);
x+=size;
}
x=BEGIN_POINT;
char lbl = 'A';
x+=7;
y-=18;
for(i=0; i<10; i++)
{
dc.TextOut(x, y, lbl);
dc.TextOut(x+k, y, lbl);
lbl++;
x+=size;
}
x=BEGIN_POINT;
x-=20;
y+=20;
for(i=1; i<=10; i++)
{
dc.TextOut(x, y, itoa(i, &lbl, 10));
dc.TextOut(x+k, y, itoa(i, &lbl, 10));
y+=size;
}
При нажатии на ОК срабатывает код, пока примитивно но прошу высказать мнения...
вот еще раз
тас написано не глубоко, но быстро и понятно. А глубоко - Рихтера читай.
А может, просто картинку на поле кидать? Хотя, тут это не принципиально...
Так имхо будет лучше, т.к. при расчетах кликов мышки будет удобнее определять заданный квадрат.
Думаю не стоит, лишние заморочки. Если использовать массив квадратов, то мне кажется только в разработке модуля ИИ.
Для каждого игрока, имеем 2 двумерных массива 10х10. Тип, ну, можно использовать unsigned char.
Кодировка:
1. Для игрока: 0 - пустое место, 1 - место куда попал противник, 2 - палуба корабля, 3 - подбитая палуба.
2. Карта радара: 0 - неизвестное состояние, 1 - подбитая палуба противника.
(Вообще, можно использовать и кодировку по битовым полям.)
"Рендер" - будет прорисовывать каждое из полей, в зависимости от их расположения в массиве, и согласно коду. Имхо, надо иметь 4 маленькие картинки: пустое место, палуба корабля, подбитая палуба и для отметки места промаха. Или не картинки, а обыкновенную цветовую заливку по сетке, предложенной Visualex (все равно, перерисовки не будет).
В плане ИИ или сети: От противника, нам передаются координаты выстрела, а от нас ответ: попал или не попал. У него это помечается на карте радара. Тоже самое и "с другой стороны"... Наверное, тупо объяснил...
(Вообще, можно использовать и кодировку по битовым полям.)
Думаю, особого смысла нету. Память беречь, или производительность повышать? Зачем? :)
Массив должен быть 12х12 и дублировать поле со смещением (х+1,у+1).
Лишние четыре линии нужны для "бордюра", т.к. вокруг кораблей должна быть "прослойка" из единиц (к примеру) - обозначений того, что ставить сюда корабли нельзя. Лучше использовать такие обозначения:
0-пустое поле;
1-то же самое, но учитывается при постановке кораблей как ограничитель (сюда ставить нельзя);
2-не поврежденный корабль;
3-подбитая клетка;
4-подбитая палуба.
Помимо этого нужно предусмотреть 2 состояния подбитых кораблей: подбита 1 палуба или корабль убит. Здесь можно сделать подсказку игроку - раз ставить рядом корабли запрещено, то поля вокруг убитого корабля отмечаются как подбитые. Это все конечно необязательно должно быть так, но может что-то пригодится.:)
А что бы взаимодействие с сетью и ИИ не сильно различалось. Оптимальнее...
Массив должен быть 12х12 и дублировать поле со смещением (х+1,у+1).
Лишние четыре линии нужны для "бордюра", т.к. вокруг кораблей должна быть "прослойка" из единиц (к примеру) - обозначений того, что ставить сюда корабли нельзя. Лучше использовать такие обозначения:
0-пустое поле;
1-то же самое, но учитывается при постановке кораблей как ограничитель (сюда ставить нельзя);
2-не поврежденный корабль;
3-подбитая клетка;
4-подбитая палуба.
Не, 10х10. Больше не надо. У тебя ведь размер поля 10х10? Так зачем платить больше? :). За бордюр отвечает подсистема контроля размещения кораблей. А в массиве, можно указать еще один код для обозначения "зоны отчуждения :)", бордюра то бишь...
Помимо этого нужно предусмотреть 2 состояния подбитых кораблей: подбита 1 палуба или корабль убит.
А зачем? Как только корабль убит, будет появляться... этот...как ты предложил, короче. см.ниже :)
Здесь можно сделать подсказку игроку - раз ставить рядом корабли запрещено, то поля вокруг убитого корабля отмечаются как подбитые. Это все конечно необязательно должно быть так, но может что-то пригодится.:)
Это грамотно. Надо реализовать...
И то верно... это я так, оптимизирую :)
Да, да, знаю: "Преждевременная оптимизация - корень всех бед". Не смог удержаться... :)
Да, да, знаю: "Преждевременная оптимизация - корень всех бед". Не смог удержаться... :)
Со мной тоже бывает.
Кстати, оффтоп, но все же, вспомнилось, тут говорили про оставление лазайки для читерства. Вспомнил, как в одной из версий фифа играли на максимальном уровне сложности вратари, мы так и прикалывались - "судя по тому, какие клавиши вы нажали, пенельти будет в правый нижний...с вероятностью 100%"...:)
Так насчет языка, платформы - опять ушло в сторону:) На чем остановились то? И графики, встроенная, в оконные либы, как я предлагал, или opengl например?
Хочу OpenGL!!! Обожаю её, заразу... :)
[QUOTE=Lerkin]За бордюр отвечает подсистема контроля размещения кораблей.[/QUOTE]В таком случае надо кучу проверок придумать - нужно же будет метками все поля вокруг корабля заставлять, а при выключеном контроле переполнения строка, которая не поместилась на верх, будет внизу. Или в Visual C все по-другому устроено?
Ну, не в этом дело. Честно говоря, для продолжения и развития проекта, лучше использовать DirectX, в разрезе DirectDraw. Но!
При этом:
Переносимость кода - NULL (NIL).
Зависимость от версии DX - 100% (хотя можно использовать интерфейсы DX7)...
А так же и другие сложности.
таком случае надо кучу проверок придумать - нужно же будет метками все поля вокруг корабля заставлять, а при выключеном контроле переполнения строка, которая не поместилась на верх, будет внизу. Или в Visual C все по-другому устроено?
Среда здесь не причем. Грамотно алгоритм размещения прописать и все.
P.S. Контрол - что имеется в виду? Если визуальный компонент, так таких у нас не будет...
И на счет кораблей такая мысль давно возникла:
(естественно красивыми картинками прорисовать)
[==> -четырех палубный
[=> - 3x
<> || [> - 2x
# - 1x
Палубы у всех кораблей одинаковые, разница в кормовой части и в носовой.
[quote=Lerkin]
1. Для игрока: 0 - пустое место, 1 - место куда попал противник, 2 - палуба корабля, 3 - подбитая палуба.
2. Карта радара: 0 - неизвестное состояние, 1 - подбитая палуба противника.
[/quote]
По второму пункту вопрос: Промахи учитываются? Пока вроде корабли не "плавают", или это с учетом их перемещения?
Эта простенькая программка должна показать, есть ли интерес к написанию основной игры.
На счет графики - так как нет разделения на разработчиков, то для графики на первых порах можно взять простые квадраты, потом сделать библиотеку объектов. Сначала нужно сделать движок, а оформление потом. Главное как можно больше графики вынести в процедуры, чтобы не мешались в коде движка. Потом просто заменить эти процедуры на объекты из библиотеки и все дела.:)
P.S. Можно конечно сделать разделение обязанностей, но т.к. участников мало, а пишущих на нужном языке и того меньше, то эта идея вряд ли получит свое развитие.
При этом:
Переносимость кода - NULL (NIL).
Зависимость от версии DX - 100% (хотя можно использовать интерфейсы DX7)...
А так же и другие сложности.
Насколько я знаю, Opengl например поддерживается нормально (если не хорошо) в mfc и qt, а вот насчет поддержки DX - совсем не уверен.
Писать же все не в оконной библиотеке, а а fullscreen.. не знаю, насколько будет сложно и нужно ли?