вот описание игры:
При входе в игру предлагается авторизоваться используя имя и пароль:
• Если игрок с таким именем и паролем есть, то игрока авторизует;
• Если игрока нет, то он создается с параметрами урон 10, жизни 100;
• Если игрок есть, но пароль не совпал – выдать ошибку.
После авторизации игрок попадает на главную страницу с таким меню:
• Дуэли – переход на страницу с дуэлями
• Выход – закрытие сессии и переход на страницу входа
Страница дуэлей
При первом входе выводим мой рейтинг и кнопку “Начать дуэль”.
*******************
*** Я ЗДЕСЬ ***
*******************
После нажатия на кнопку, игрок помечается, как готовый к дуэли и ему в противники подбирается другой игрок с таким же статусом “готовый к дуэли”.
После того как оба игрока найдены, каждый видит своего врага и таймер 30 сек до начала битвы.
По истечении таймера начинается битва. Здесь игрок видит параметры своего противника – имя, жизни (прогресс бар), урон и кнопку Атаковать, а также свои параметры в отдельном блоке.
Внизу страницы лог боя в виде:
Васька ударил вас на 10 урона
Вы ударили Петюня на 5 урона
Вы убили Васька
По окончании дуэли победитель получает +1 рейтинга, проигравший получает -1 рейтинга. Независимо от победы или проигрыша каждый игрок получает +1 к параметру урон и +1 к параметру жизни.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Пишу на java EE(сервлеты) и MySQL
фронт на html
собственно вопрос: у меня есть мапа с персонажами игроков - которые сейчас залогинены,
как мне взять 2 игроков и связать их друг с другом для дуэли..?
Pineapple
45 уровень
делаю онлайн игрушку, нужна ваша помощь
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас ПасинковSoftware Developer в ZipyMaster
11 ноября 2021, 10:55
выбрать два рандомных, не?
0
Pineapple
11 ноября 2021, 15:01
та 2 рандомных само собой
как их именно связать чтоб они друг с другом
-например сделать какой то класс (битва) и поместить туда игроков, - и как это передавать сразу двум людям (на фронт)..
я что то так путаюсь.. мне даже вопрос сложно сформулировать..
0
Стас ПасинковSoftware Developer в ZipyMaster
11 ноября 2021, 20:11
ничего, в первый раз всегда сложно :)
нуу, это уже архитектурный вопрос. тут во многом зависит от того, какая у вас сейчас архитектура.
но вообще - да. я так вижу, что каждый игрок при своем "ходе" будет отправлять запрос на бек, типа, я такой-то, ударил таким-то оружием.
сервер же при получении запроса будет искать в списке битв нужный объект (а значит и класс нужен, да), где в переменной со списком игроков будет находиться такой-то игрок.
как только он нашел объект битвы - он достает из него объект игрока с текущими характеристиками (здоровье, модификатор защиты, бонусы на защиту, итд), считает дамаг от удара (да, это лучше считать на беке, чтобы игроки не читерили, а то какой-то мамкин кулхацкер заснифит что отправляется, и будет присылать запросы, будто нанес 100500 дамага. конечно, еще нужна валидация, что у этого игрока действительно есть сейчас это оружие, которым он как-бы ударил, тоже чтобы избежать читерства всякого). после чего бек отправляет в ответ на тот запрос от игрока инфу сколько он сбил хп врагу, и всякое такое.
а в это время игрок, которого бьют - периодически спамит сервер запросами типа: я такой-то, ну что там, меня уже ударили? и сервер тоже находит объект его битвы и смотрит было ли новое событие. тут получается логично сохранять историю каждого удара. тогда сервак сможет находить "новое" событие если оно появилось (и отправлять ответ игроку, которого бьют, мол, так и так, тебя ударили на столько-то хп, а фронт этого игрока уже ему это отрисовывает красиво). ну а если его еще не ударили - то отправлять ответ, типа, нет, ждите.
0
Стас ПасинковSoftware Developer в ZipyMaster
11 ноября 2021, 20:26
в принципе, каждый из игроков может передавать в запросе не только себя (свой идентификатор), но и айдишник битвы. чтобы бек лишний раз не проходился по всему списку в поисках нужной битвы. а нашел бы ее по айдишнику (привет, хеш-мап) и потом просто удостоверился бы, что в этом объекте битвы есть этот игрок.
как игрок будет знать айдишник своей битвы? значит надо сделать чтобы бек, когда нашел для игрока пару - присылал бы ему айдишник битвы этой пары.
кстати, не хардкодьте именно пару, двух игроков, потому что потом, когда основной функционал допилите - вам обязательно захочется сделать возможность какой-то мега-битвы с кучей игроков, со взводами, итд. поэтому такие архитектурные моменты лучше продумать сразу, на будущее :) а то потом придется все переписывать))) я так морской бой свой раз 5 переписывал, именно потому, что упирался в какие-то архитектурные моменты, которые не позволяли мне расширить существующий функционал игры))
0
Стас ПасинковSoftware Developer в ZipyMaster
11 ноября 2021, 20:37
а вообще, предлагаю сильно не зависать на сервлетах... не, ну mvp можно и на сервлетах сделать...
а потом подучить спринг, например, и пилить на беке рест-сервис для процессинга битв, а фронт сделать на джаваскрипте (чтобы быстренько было, без постоянных перезагрузок страницы), а беком просто отдавать его с главной странички, например.
0
Pineapple
12 ноября 2021, 10:05
спасибо за ответ
щас подумаю.. поделаю
>а вообще, предлагаю сильно не зависать на сервлетах..
ну я просто получил задание тестовое на вакансии - сделать игру без использования фреимворков и джава скрипта
срок я уже провалил и сейчас для себя ее хочу доделать и дальше сделать что то на spring boot
ну и там уже думаю снова начать чекать вакансии)
0
Стас ПасинковSoftware Developer в ZipyMaster
12 ноября 2021, 11:59
и сколько времени давали на тестовое такое?
обычно тестовое дают такое, чтобы по времени оно заняло пару часов (один свободный вечер), но при этом времени дают неделю (потому что иногда человеку бывает трудно найти один свободный вечер, когда либо все уже распланировано заранее, либо много ответственности по дому)
поэтому, если дают тестовое на неделю, но при этом там надо реально всю неделю ебошить по 8 часов чтобы его нормально сделать - то лучше в такую компанию не ходить, я считаю :)
к тому же, есть у меня подозрение, что с таким тестовым - там у вас будет жуткое легаси) 6я джава и голые сервлеты)
либо это какой-то геймдев нижнего уровня, где каждую неделю надо выкатывать по новой браузерке, с минимальными отличиями по функционалу, а только с немного другой графикой)
0
Pineapple
12 ноября 2021, 12:48
10 дней давали
>>либо это какой-то геймдев нижнего уровня, где каждую неделю надо выкатывать по новой браузерке, с минимальными отличиями по функционалу, а только с немного другой графикой)
походу оно и есть
чуваки делают такие игрушки
и задание было на пхп/джаве
(ну разобраться в сервлетах, поработать с бд я один фиг считаю полезным вот и делаю=) )
+1