Урок по созданию браузерной игры № 12
| |
Assasin | Дата: Понедельник, 07 Декабря 2009, 23:56 | Сообщение # 1 |
web-coder
Сейчас нет на сайте
| Извиняюсь за столь долгий период "безрыбья" Урок будет краткий, я только опишу что будет в модуле боя. Приступим. Я решил сильно не заморачиваться и сделать по такому типу: слева - выш игрок, справа противник, посередине кнопки атака в голову, в живот, в ноги. Анимации не будет, если захотите, то сделаете сами. Я пытаюсь описать только основу, а доделывать вы будете уже сами. При нажатии на любое из полей будет проводиться приблизительно такая формула: (атака игрока + рандомное число от 1 до 5) - (защита противника + рандомное число от 1 до 5). Логика монстра, который присутствует в игре будет минимальной, после вашего удара, расчитываеться удар по вышеуказаной формуле, по вам. Формулу по желании можете изменить. Вроде ничего не забыл, если что, то в следующем уроке напишу Следующий урок даже не знаю когда будет, сейчас проходят сессии, поэтому нескоро, а возможно и скоро При копировании материала ссылка на источник обязательна!
|
|
| |
Tommy | Дата: Среда, 09 Декабря 2009, 19:50 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Эммм.. Где-то урока с 4-ого слежу за развитием данного мануала и в принципе ждал именно 12ого. То есть хочу сказать, что ожидал от этого урока большего: например как конкретно прописать вид боя, - формулы это одно, интересует сам код страницы (так сказать "для полных нубов"), как это было в предыдуих уроках. Также интересует как расчитывается и прописывается кодом такая вещь как отнимание хп и запоминание остатка для использования этого значения в следующем раунде (бой же не из одного удара состоит..) .. Ну впрочем много чего ещё... Автор, прошу прощения, если это звучит как упрёк - не было целью покритиковать и т.д. Вы - реально молодец! И я очень благодарен за данные "курсы юнного бойца". Но время ожидания следующего урока (пусть оно будет неделей или тремя месяцами - без разницы), не так сильно удручает, как неполный и нераспространённый материал..
|
|
| |
Assasin | Дата: Среда, 09 Декабря 2009, 21:40 | Сообщение # 3 |
web-coder
Сейчас нет на сайте
| Quote (Tommy) Автор, прошу прощения, если это звучит как упрёк - не было целью покритиковать и т.д. Ничего страшного Сам бой и его код будет выложен в следующем уроке. Вот примерное его описание: При нажатии на кнопку удару(1ну из 3) расчитываеться формула приведенная выше и отправляються данные в скрипт, который считывает ХП из БД и отнимает то что вышло из формулы и так пока у кого то из дерущихся не окажеться 0 ХП либо меньше. После это защитываеться победа или поражение. В нашем случае запишеться для того что б узнать убил ли игрок монстра что б пройти квест. Если вас интересуют еще какие то аспекты боя, то с радостью отвечу
|
|
| |
Tommy | Дата: Среда, 09 Декабря 2009, 22:32 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Буду по мере "вспоминания" задавать. Пока интересует расчёт ХП из Базы: Бой PvP. Расчёт количества (в общем) ХП у персонажа расчитывается по формуле all_hp = bas_hp+15*level+item_hp , где: bas_hp - базовое количество хп (равняется 20), значение хранится в базе. level - уровень персонажа item_hp - дополнительное количество ХП от вещей надетых на игрока. (Пример: "Кольчуга +30хп) Данная формула расчитывается автоматически и отсылает полученное значение (значение хп персонажа в зависимости от уровня и надетых вещей) all_hp в БД. Также данное значение отображается в профиле персонажа, как максимальное количество хп данного персонажа. Но это же расчитывает максимально возможное количество, а не количество на текущий момент. То есть в БД нужно завести отдельную ячейку для хранения ТЕКУЩЕГО значения хп персонажа (now_hp), чтобы иеть возможность выводить в профиле значение "количество хп: now_hp\all_hp". Если на момент начала боя ХП полностью востановлено, то now_hp равняется all_hp. Если нет (да в общем если и да), то при начале боя мы оперируем значением now_hp. То есть при ударе противника от now_hp отнимается damage2_r1 (ущерб нанесённый противником при первом ударе (в первом раунде)), потом отнимается damage2_r2, потом отнимается damage2_r3 и так далее, пока у Вас now_hp не приравняется к нулю. Если приравнялось, то Вы проиграли, противник победил. То есть общая формула уменьшения хп во время боя равняется: if (now_hp - damage2_r1 - damage2_r2 - damage2_r3 - damage2_rN - damage2_r(N+1) = 0) "Бой проигран!" 1. Вот тут немного у меня логика страдает. После окончания боя now_hp у проигравшего должно быть НОЛЬ. То есть мм... запутался))) Какую формулу нужно написать для расчёт now_hp ?? То есть она должна иметь вид примерно "0+(регенерация)". (тут я примерно сказал, так как вообще не имею представления как оно в данном случае может выглядеть), но если так, то: а) как реализовать регенерацию (например 5 хп в минуту)? б) как при начале боя, запрещать процесс регенирации, и брать статичное число УЖЕ отрегенерированного хп, чтобы его использовать в формуле "0+(регенирация)" ?? То есть до начала боя персонаж успел отрегенерировать 20 хп из 30. Если бы он постоял ещё 2 минуты, то у него бы стало 30 из 30. Но тут на него напали: процесс регенерации (5 хп в минуту) останавливается а за значение now_hp берётся то значение которое Успело накапать регенерацией (то есть 20). Ну а после проигрыша, количество отрегенерированного хп нужно прировнять к нулю. Возможно сумбурно, но если Вы разберётесь в вышенаписанном и ответите на основные вопросы, буду очень благодарен: - Чему должно равнятся now_hp (формула)?? ("0+(регенирация)" - просто грубый пример) - Как происходит физически (код, бд) процесс регенирации. - Прекращение регенирации во время боя. - Приравнивание значения now_hp к нулю после поражения.
Сообщение отредактировал Tommy - Среда, 09 Декабря 2009, 22:37 |
|
| |
Assasin | Дата: Среда, 09 Декабря 2009, 22:47 | Сообщение # 5 |
web-coder
Сейчас нет на сайте
| Quote (Tommy) - Чему должно равнятся now_hp (формула)?? ("0+(регенирация)" - просто грубый пример) В самом начале игры будет равняться all_hp. А во время боя будет происходить его изменение в БД, по вами указаной формуле, тоесть после каждого удара будет обновляться в БД. Quote (Tommy) - Как происходит физически (код, бд) процесс регенирации. Заводим таймер на 1 минуту и при истекании добавляем 5 ХП игроку и переходим к началу фукции. Код уже напишу завтра. Quote (Tommy) - Прекращение регенирации во время боя. Задаем переменную в БД bat. Если bat = 0 (игрок не в бою), то регенимся, если 1, то нет. Quote (Tommy) - Приравнивание значения now_hp к нулю после поражения. А что ж здесь сложного? Считываем с БД это значение и приравниваем.
|
|
| |
Tommy | Дата: Среда, 09 Декабря 2009, 23:40 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Quote В самом начале игры будет равняться all_hp. А во время боя будет происходить его изменение в БД, по вами указаной формуле, тоесть после каждого удара будет обновляться в БД. Спасибо. Вот этот ответ убил сразу все остальные вопросы. С хп всё ясно, спасибо большое. (надеюсь, в следующем уроке увидеть подробнее на счёт bat).
Сообщение отредактировал Tommy - Среда, 09 Декабря 2009, 23:41 |
|
| |
infermik | Дата: Суббота, 09 Января 2010, 13:40 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Assasin! Пожалуйста можите показать в 13 части показать как делается боевая система как в игре Бомжи онлайн там ходит стрелка и игрок в нужный момент нажимает на атаку. Атака распределяется на обычная, сильная, критическая и промах плз покажите.
Выпрямляю путем кнута и пряника
|
|
| |
hellground | Дата: Понедельник, 22 Марта 2010, 01:42 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Ассасин а можешь ещё сделать урок по созданию торгующего нпса? можно и без кол-ва предметов у него(чтобы он продавал их до бесконечности и они не кончались(так проще)) и систему боя конечно... Добавлено (22.03.2010, 01:42) --------------------------------------------- и можно связать таблицу online = 0 с ссесией игрока?(тоесть при разрыве(я просто не могу найти место разрыва) добавлять в онлайн 0 (тоесть сесия разорвана человек в оффлайне)))
|
|
| |
B1zDelKin | Дата: Понедельник, 22 Марта 2010, 12:14 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Для этого нужно куда следует вставить примерно следующего содержания скрипт: Code <?php session_start();
$user = $_SESSION['user']; //Берем сессию игрока
$sql = mysql_query("SELECT * FROM `sessions` WHERE `user` = '$user'");
if ($sql && mysql_num_rows($sql)) { /* Если сессия игрока уже записана, обновляем */ mysql_query("UPDATE `sessions` SET `lastdate` = NOW() WHERE `user`='$user'"); } else { /* Если нет, добавляем */ mysql_query("INSERT INTO `sessions` VALUES('$user', NOW())"); }
?> "Куда следует" означает, что надо хорошо подумать. Этот скрипт нужно инклюдить в самое начало скриптов символизирующих выполнение какого-либо действия пользователем, н-р снял вещь - команда пошла к серверу - скрипт сработал, показав что вы в онлайне, т.е. проявляете признаки активности. Но в идеале в любой игре есть таймер, н-р проверки статуса пользователя или восстановления здоровья, выполняющийся к примеру каждые 30 сек. Тогда скрипт нужно привязать именно к выполнению этого таймера. Тогда и активные, но ничего неделающие пользователи будут довольны. Чтобы удалять неактивных пользователей. Нужно по крону ( или другому шедулеру) запускать примерно следющего вида скрипт: Code <?php include 'путь к файлу конфига';
$interval = 5; //Интервал бездействия пользователя в минутах
/* Удаляем записи пользователей не проявивших активность в течении времени указанного в $interval */
mysql_query("DELETE FROM `sessions` WHERE `lastdate` < NOW() - INTERVAL '$interval' MINUTE"); ?> Он удалит тех, кто уже 5 минут не вызывал скрипт действия. Ну и конечно не надо объяснять что структура sessions -> user (varchar), lastdate (current timestamp) , надеюсь.
Сообщение отредактировал B1zDelKin - Понедельник, 22 Марта 2010, 19:59 |
|
| |
infermik | Дата: Среда, 28 Апреля 2010, 15:28 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| Ассасин когда урок то будет готов? так и есть 32%!
Выпрямляю путем кнута и пряника
|
|
| |
Lucasito | Дата: Среда, 28 Апреля 2010, 16:22 | Сообщение # 11 |
участник
Сейчас нет на сайте
| Quote (Assasin) Заводим таймер на 1 минуту и при истекании добавляем 5 ХП игроку и переходим к началу фукции. Код уже напишу завтра. что за таймер?
Скриншоты. Приглашаем бета-тестеров! Помог? Ставь "+" мне в репу :)
|
|
| |
Zizilk | Дата: Среда, 28 Апреля 2010, 18:42 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Я так понимаю во флеш(уроки по его играм идут в виде связки php+mysql+flash)
|
|
| |
Lucasito | Дата: Четверг, 29 Апреля 2010, 19:21 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Quote (Zizilk) Я так понимаю во флеш(уроки по его играм идут в виде связки php+mysql+flash) если это делается во флеше, т.е. на стороне клиента, то это не очень хорошо. На стороне сервера тоже нужно считать.
Скриншоты. Приглашаем бета-тестеров! Помог? Ставь "+" мне в репу :)
|
|
| |
publicrebel | Дата: Среда, 05 Мая 2010, 18:40 | Сообщение # 14 |
был не раз
Сейчас нет на сайте
| Assasin, сори если повторяюсь, можешь выложить все исходники твоего проекта какие у тебя есть. буду очень благодарен
|
|
| |
Assasin | Дата: Среда, 05 Мая 2010, 20:14 | Сообщение # 15 |
web-coder
Сейчас нет на сайте
| К сожалению исходные файлы флешек дать не могу. Архив содержит: - 22 php файла - 1 log файл - 11 swf файлов - 2 файла css - 1 папка - 22 png файла - 2 jpg файла СКАЧАТЬ: depositfiles.com narod.yandex.ru Пароль на архив: gcup.ru
|
|
| |
publicrebel | Дата: Среда, 05 Мая 2010, 20:47 | Сообщение # 16 |
был не раз
Сейчас нет на сайте
| Оу!)) Благодарствую!))) оперативно)) Quote (Assasin) К сожалению исходные файлы флешек дать не могу. У тебя их нет или просто не хочешь выкладывать?) Просто флеш исходники и есть эта самая проблема...Было бы чудно, если б все-таки бы ты их довыложил)
|
|
| |
Assasin | Дата: Среда, 05 Мая 2010, 20:58 | Сообщение # 17 |
web-coder
Сейчас нет на сайте
| publicrebel, Они у меня есть)) Просто они вперемешку с другими исходниками, вот такой я "не культурный" в области программирования Но попытаюсь выложить.
|
|
| |
Assasin | Дата: Среда, 05 Мая 2010, 21:02 | Сообщение # 18 |
web-coder
Сейчас нет на сайте
| Исходники флешек: depositfiles.com narod.yandex.ru Пароль на архив: gcup.ru
|
|
| |
publicrebel | Дата: Среда, 05 Мая 2010, 21:14 | Сообщение # 19 |
был не раз
Сейчас нет на сайте
| Assasin, ну ваще порадовал!)))
|
|
| |
Fairman | Дата: Суббота, 08 Мая 2010, 02:38 | Сообщение # 20 |
был не раз
Сейчас нет на сайте
| Ув. Форумчане и игроделы!)) Я полнейший нуб в игро-строении, но меня крайне интересует, как сделать так чтобы можно было сражатся с другими игроками!(пвп) Чтобы было наподобие мобов и именно Quote (Assasin) по такому типу: слева - выш игрок, справа противник, посередине кнопки атака в голову, в живот, в ноги. Анимации не будет, если захотите, то сделаете сами. Я пытаюсь описать только основу, а доделывать вы будете уже сами. При нажатии на любое из полей будет проводиться приблизительно такая формула: (атака игрока + рандомное число от 1 до 5) - (защита противника + рандомное число от 1 до 5). Я сегодня весь инет облазил в поисках движка Warrior (по слухам на котором карнаж построен), но его не нашел также как и скрипт боя(удар-туда, защита-сюда). Очень жду продолжения уроков)))
Сообщение отредактировал Fairman - Суббота, 08 Мая 2010, 02:39 |
|
| |
|