Пятница, 22 Ноября 2024, 13:07

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Урок по созданию браузерной игры № 12
AssasinДата: Понедельник, 07 Декабря 2009, 23:56 | Сообщение # 1
web-coder
Сейчас нет на сайте
Извиняюсь за столь долгий период "безрыбья" smile Урок будет краткий, я только опишу что будет в модуле боя.
Приступим. Я решил сильно не заморачиваться и сделать по такому типу: слева - выш игрок, справа противник, посередине кнопки атака в голову, в живот, в ноги. Анимации не будет, если захотите, то сделаете сами. Я пытаюсь описать только основу, а доделывать вы будете уже сами. При нажатии на любое из полей будет проводиться приблизительно такая формула: (атака игрока + рандомное число от 1 до 5) - (защита противника + рандомное число от 1 до 5). Логика монстра, который присутствует в игре будет минимальной, после вашего удара, расчитываеться удар по вышеуказаной формуле, по вам. Формулу по желании можете изменить. Вроде ничего не забыл, если что,
то в следующем уроке напишу happy Следующий урок даже не знаю когда будет, сейчас проходят сессии, поэтому нескоро, а возможно и скоро happy

При копировании материала ссылка на источник обязательна!

TommyДата: Среда, 09 Декабря 2009, 19:50 | Сообщение # 2
был не раз
Сейчас нет на сайте
Эммм.. Где-то урока с 4-ого слежу за развитием данного мануала и в принципе ждал именно 12ого.
То есть хочу сказать, что ожидал от этого урока большего: например как конкретно прописать вид боя, - формулы это одно, интересует сам код страницы (так сказать "для полных нубов"), как это было в предыдуих уроках. Также интересует как расчитывается и прописывается кодом такая вещь как отнимание хп и запоминание остатка для использования этого значения в следующем раунде (бой же не из одного удара состоит..) .. Ну впрочем много чего ещё...

Автор, прошу прощения, если это звучит как упрёк - не было целью покритиковать и т.д. Вы - реально молодец! И я очень благодарен за данные "курсы юнного бойца". Но время ожидания следующего урока (пусть оно будет неделей или тремя месяцами - без разницы), не так сильно удручает, как неполный и нераспространённый материал.. sad

AssasinДата: Среда, 09 Декабря 2009, 21:40 | Сообщение # 3
web-coder
Сейчас нет на сайте
Quote (Tommy)
Автор, прошу прощения, если это звучит как упрёк - не было целью покритиковать и т.д.

Ничего страшного happy
Сам бой и его код будет выложен в следующем уроке. Вот примерное его описание:
При нажатии на кнопку удару(1ну из 3) расчитываеться формула приведенная выше и отправляються данные в скрипт, который считывает ХП из БД и отнимает то что вышло из формулы и так пока у кого то из дерущихся не окажеться 0 ХП либо меньше. После это защитываеться победа или поражение. В нашем случае запишеться для того что б узнать убил ли игрок монстра что б пройти квест.
Если вас интересуют еще какие то аспекты боя, то с радостью отвечу happy
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). happy


Сообщение отредактировал 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, сори если повторяюсь, можешь выложить все исходники твоего проекта какие у тебя есть. буду очень благодарен biggrin
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, Они у меня есть)) Просто они вперемешку с другими исходниками, вот такой я "не культурный" в области программирования biggrin Но попытаюсь выложить.
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
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

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