Xwab
Форумыnavigate_nextПрограммирование на PHP

Топ: Помощь с алгоритмом
Сообщения
nitron

Jadson, можно еще рандомно делать шаг к любой из координат, если текущее местонахождение это позволяет
[php:1:c28a87c7ed]<?php
$x_max = 24;
$y_max = 26;
$x = 1;
$y = 1;
while($x<$x_max OR $y<$y_max)
{
if($x<$x_max and $y<$y_max)
{
$r = rand(0, 1);
if($r)
{
$x++;
}
else
{
$y++;
}
}
elseif($x<$x_max and $y==$y_max)
{
$x++;
}
elseif($y<$y_max and $x==$x_max)
{
$y++;
}
}
?>[/php:1:c28a87c7ed]

24 Мар 2012, 2:05
Jadson

nitron, ну почти так же я и думал, просто думал может ещё варианты будут, может завтра с утра что то в голову придет по лучше

24 Мар 2012, 2:37
svoloch

Ну что ж, очередной вопрос по MMORPG. Хочу написать массовые бои(т.н. арены, лиги и т.д.). Суть в том, что там будут проходить сражения не только между игроками, но и с ботами. То есть, на одной арене, назовем это так, будут находиться не только живые игроки, но и боты. Так же боты будут поддерживать баланс. Если не будет на арене живых игроков, там будут боты. Сгенерировать ботов не проблема. Вопрос в чем. Возможно ли как-то реализовать участие ботов на арене, не занося каждого бота в таблицу? Как бы я изначально предполагал такую реализацию.

Есть арены. У каждой свой id. Есть таблица боя, в нее записываются все участники, присутствующие на арене с данным id. При гибели персонажа он автоматически удаляется с таблицы боя. В таблице боя ставим метку, игрок это или бот. Далее считаем, сколько ботов находится на данной арене. Если их меньше определенного количества(например 5), то генерируем недостающих ботов и заносим их в таблицу. Когда бота убивают, так же как и игрока, удаляем его из таблицы. И так постоянно. Но! Это будут ежесекундные запросы в базу.

И сразу же еще вопрос. Допустим, у персонажа есть какие-то умения, способности. У каждой способности есть время, в течении которого она работает(добавляет урон, критическую атаку и т.д.). Все способности записаны в таблице. Правильно ли я понимаю, что для того, чтобы использовать способность на ее время действия, надо в таблице делать пометку со временем активации данной способности? Так же у каждой способности есть время восстановления. Это "время использования"+"некоторое количество времени на восстановление". Как проще реализовать это? Делать 2 временные метки в таблице, или просто изначально подсчитывать время использования(текущее время - время активации), а потом отсчитывать еще "некоторое количество времени на восстановление"? Пример. Допустим, персонаж владеет уменеем "Ярость Богов". Время действия умения - 15 секунд. Время восстановления - 1 минута. Расчет будет происходить так. Сначала считаем, сколько времени прошло с момента активации умения. Если менее 15 секунд, то добавляем у наносимому урону n'ое количество урона. Если больше, то считаем, прошла ли минута с момента активации умения. Если да, то даем возможность активировать умение повторно, если нет, то продолжаем отсчет/восстановление. Верна ли данная реализация? В чем ее минусы? Какова будет нагрузка от такого подхода?

24 Апр 2012, 13:12
HuKTO

svoloch, если у тебя бои пошаговые, то лучше сделать чтобы каждое умение действовало несколько ходов
добавлено спустя 2 минуты:
svoloch пишет:
"Сломал уже весь моск. Буду рад любой посильной помощи. Суть сабжа в чем. Пишу ПВП. Не соображу, как написать бой. В таблице users имеются поля hp, armor, krit, power у каждого игрока. Как просчитать удар одного и второго игрока? В power записана максимальная сила удара. Каждый игрок бьет на какую-то долю от максимальной силы.

В общем примерно так. Кто поможет, буду благодарен. Кину копеечку на печенюшку."


скачай и гру амулет дракона, там бои прописаны идеально, осталось тебе только все в бд засунуть

17 Июл 2012, 17:56
Максим

К примеру есть таблица comments в ней поля id, title, text, date, ip, browser. Подскажите как грамотно составить запрос в базу, типа антифлуда, чтоб учитывалось время и не повторялось последнее сообщение от пользователя

01 Мар 2013, 23:07
iBiZoNiX

Максим, Не добавляй комментарий если со времени последнего оставленого не прошло 2 мин.
Ну это если у тебя не планируется особая активность в комментариях.

01 Мар 2013, 23:44
Максим

iBiZoNiX, просто по времени могу, надо еще как-то сделать запрос, чтоб небыло двух одинаковых сообщений подряд от одного пользователя. А подождет две минуты и снова отправит такое же

02 Мар 2013, 0:01
SV

Максим, выбирай последнее сообщение от пользователя по ip, если оно есть - проверяй разницу по времени и не одинаковое ли сообщение... если условия проходят - добавляй..

02 Мар 2013, 0:06
Default_mo

Максим,
[php:1:145f16e6b2]
$text = mysql_result(mysql_query("SELECT `text` FROM `comments` WHERE `ip` = '".$ip."' ORDER BY `id` DESC LIMIT 1"),0);
if($text == $user_text)
{
die('Не повторяйтесь');
}
[/php:1:145f16e6b2]

02 Мар 2013, 9:16
Виктор

Максим,
[php:1:7f6aa0cc34]
if(mysql_fetch_array(mysql_query("SELECT `id` FROM `comments` WHERE `ip`='".$user_ip."' AND (`data`>".(time()-5)." OR `text`='".mysql_real_escape_string($text)."') ORDER BY `id` DESC LIMIT 1")))
{
echo "Не флуди!";
}
else
// продолжаем[/php:1:7f6aa0cc34]
добавлено спустя 1 минуту:
Это при условии что у тебя в data лежит time()

02 Мар 2013, 9:40
Ответить на тему