Пятница, 08 Ноября 2024, 09:51

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Проблемы в ходе создания игры
NosorogДата: Понедельник, 30 Июля 2012, 15:59 | Сообщение # 21
участник
Сейчас нет на сайте
Code
$days = floor($diff / (3600*24));
$hours = floor(($diff - ($days * 3600 * 24)) / 3600);
$minutes = floor(($diff - ($hours * ($days * 3600 * 24))) / 60);
$seconds = $diff % 60;

А использование таймера принципиально? Почему бы, просто, не вывести "Вы закончите работу в 22:05 30 февраля"


Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
vladbossДата: Вторник, 31 Июля 2012, 03:37 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
jiumx60rus,
я же не говорил что я мастер про и знаю абсолютно все основы..

Добавлено (30.07.2012, 21:41)
---------------------------------------------
Nosorog,
нет не принципиально:)

Добавлено (31.07.2012, 03:37)
---------------------------------------------
не знаю даже, писать мне о еще одной моей проблеме или нет,
просто есть люди, которые незнание воспринимают во штыки....но все же)

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


-помог ставь +

АБП production ©


Сообщение отредактировал vladboss - Вторник, 31 Июля 2012, 14:51
NosorogДата: Вторник, 31 Июля 2012, 06:26 | Сообщение # 23
участник
Сейчас нет на сайте
Quote (vladboss)
а иногда ничего не выдает

Quote (vladboss)
$rnd = rand(1, mysql_result(mysql_query("SELECT MAX(id) FROM users"),0)); 

Наверное, из базы была удалена какая-то запись, а рандом выбирает именно её.

Добавлено (31.07.2012, 06:26)
---------------------------------------------
Решение здесь


Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
HerrPotapovДата: Вторник, 31 Июля 2012, 16:35 | Сообщение # 24
заслуженный участник
Сейчас нет на сайте
vladboss, проблема в том, что ты сначала случайным образом выбираешь ид (носорог правильно сказал, что запись с этим ид могла быть удалена, но не это здесь проблема), а потом задаешь условие
Code
lvl= '".$lvl_GET."' AND id='".$rnd."'

Если у игрока с выбранным ид уровень не соответствует введенному игроком, то этот запрос ничего вернет - условие И выполнено не будет. Чем больше будет игроков с разными уровнями, тем реже будет получаться хоть какой-то результат.

Решение (мое, не факт что лучшее):
Code

$res = mysql_query("SELECT * FROM users WHERE lvl= '".$lvl_GET."' AND login <> '".$login1."'");      
$my = mysql_fetch_array($res);
$j = count($my);
$arr_index= rnd(0, $j);
$result = $my[$arr_index];


Discord: alpotapov#1741

Интервью с разработчиком WarCastle - Читаем и вникаем!
NosorogДата: Вторник, 31 Июля 2012, 19:27 | Сообщение # 25
участник
Сейчас нет на сайте
Code
$row_count = mysql_result(mysql_query("SELECT MAX(id) FROM users;"), 0);
$result2 = '(SELECT * FROM users WHERE lvl=$lvl_get AND login <> '".$login1."' LIMIT '.rand(0, $row_count).', 1)';
$myrow2 = mysql_query($result2);

Как-то так...


Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.

Сообщение отредактировал Nosorog - Вторник, 31 Июля 2012, 19:27
vladbossДата: Вторник, 31 Июля 2012, 20:17 | Сообщение # 26
постоянный участник
Сейчас нет на сайте
Nosorog, не раббит, из всех работает только этот код..

1 lvl нормально исправно выдает, видимо потому что в базе 80% героев 1 lvl`а, но 2, 3 lvl выдает 1 из 10 раз..


-помог ставь +

АБП production ©
gmmmmДата: Вторник, 31 Июля 2012, 20:44 | Сообщение # 27
почетный гость
Сейчас нет на сайте
Ну попробую я...то есть ты вводишь id врага, далее сервер должен из всех юзеров вернуть одного этого-же уровня, что и игрок?
А то вопрос не очень понял...
Code
$q = mysql_query("SELECT * FROM `users` WHERE lvl = '".$lvl_get ."' ORDER BY RAND() LIMIT 1"); //логика: выбираем одного юзера из всех такого же
// уровня, как и игрок (выбор рандомен)
$arr = mysql_fetch_assoc($q);

Писал на скорую руку, может тему плохо прочитал...


пусто!)

Сообщение отредактировал gmmmm - Вторник, 31 Июля 2012, 20:44
HerrPotapovДата: Вторник, 31 Июля 2012, 21:44 | Сообщение # 28
заслуженный участник
Сейчас нет на сайте
gmmmm, во, этот вариант намного лучше предложенного мной.
Nosorog, а этот вариант, извини конечно но через задницу. И он не будет работать как надо, потому что выдаст результат только если абсолютно случайный игрок будет иметь нужный уровень


Discord: alpotapov#1741

Интервью с разработчиком WarCastle - Читаем и вникаем!
gmmmmДата: Среда, 01 Августа 2012, 07:09 | Сообщение # 29
почетный гость
Сейчас нет на сайте
Теперь полностью рабочий пример. Тестил на своем хостинге, создав таблицу users с полями id, lvl, добавил множество элементов...



Немного подумав, пришел к выводу, что я и авторы предыдущих постов разработали не правильную логику.
Нужно сначала выбрать все записи с lvl = 1 например (1,5,8,9 например это будет), далее собрать эти элементы в массив и перемешав функцией shuffle мы получаем рандомный результат.

Code
<?php
$q = mysql_query("SELECT * FROM `users` WHERE lvl = '1'");

while ($arr = mysql_fetch_assoc($q))
    {
$key .= $arr[id] . ",";
    }
$key = substr($key, 0, strlen($key) - 1);
$key = explode(",",$key);    
shuffle($key);

echo $key[0] . "<br />";
?>


Замени lvl = '1' на свою переменную.

Далее можно вот так:
Code
$q2 = mysql_query("SELECT * FROM `users` WHERE id='$key[0]'");
$arr_result = mysql_fetch_assoc($q2);


P.S. Сто раз обновил страничку, ни разу не выпал пустой результат wink


пусто!)

Сообщение отредактировал gmmmm - Среда, 01 Августа 2012, 08:43
NosorogДата: Среда, 01 Августа 2012, 16:30 | Сообщение # 30
участник
Сейчас нет на сайте
Quote (HerrPotapov)
Nosorog, а этот вариант, извини конечно но через задницу

Интересно, через что прошел твой пример? smile
Quote (gmmmm)
ORDER BY RAND() LIMIT 1

Этот вариант у меня сразу отпал, т.к. имеет серьезные проблемы с производительностью.
Quote (gmmmm)
shuffle($key)

А вот это, ИМХО, правильное решение.


Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
HerrPotapovДата: Среда, 01 Августа 2012, 16:59 | Сообщение # 31
заслуженный участник
Сейчас нет на сайте
gmmmm, что за жесть... Два запроса к базе, substr и explode против одного запроса к базе и rnd
Вы, ребята, как знаете, но самый адекватный вариант - мой:

Code

$res = mysql_query("SELECT * FROM `users` WHERE `lvl` =  '".$lvl_GET."'");       
while($row = mysql_fetch_assoc($res)){
$my[] = $row;
}
$j = count($my);  
$arr_index= rnd(0, $j);  
$result = $my[$arr_index];  


Можно rnd на shuffle заменить, я не думаю что это сыграет большую роль.

Бай зе вэй, в моем изначальном варианте была ошибка - я написал просто $my = mysql_fetch_assoc($res)...


Discord: alpotapov#1741

Интервью с разработчиком WarCastle - Читаем и вникаем!
gmmmmДата: Среда, 01 Августа 2012, 17:14 | Сообщение # 32
почетный гость
Сейчас нет на сайте
Quote (HerrPotapov)
что за жесть... Два запроса к базе, substr и explode против одного запроса к базе и rnd
Вы, ребята, как знаете, но самый адекватный вариант - мой:

Согласен, мой вариант не айс)

HerrPotapov, по-тестил твой вариант - итог пустой экран..


пусто!)
NosorogДата: Среда, 01 Августа 2012, 17:20 | Сообщение # 33
участник
Сейчас нет на сайте
Quote (HerrPotapov)
gmmmm, что за жесть... Два запроса к базе, substr и explode против одного запроса к базе и rnd
Вы, ребята, как знаете, но самый адекватный вариант - мой:

Лучше будет 5 запросов к базе, если они выполняются быстрее, чем один. Вот этот тормозной запрос будет занимать меньше времени чем твоя конструкция: ORDER BY RAND() LIMIT


Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
vladbossДата: Среда, 01 Августа 2012, 20:01 | Сообщение # 34
постоянный участник
Сейчас нет на сайте
спасибо всем огромное за то что не кинули в игнор и помогли:)
gmmmm,
все работает, спасибо)
но ты забыл приписать то, чтобы сам себя не вытащил..
HerrPotapov,
спасибо)
блин но пустой экран выводит(((


-помог ставь +

АБП production ©
gmmmmДата: Среда, 01 Августа 2012, 20:03 | Сообщение # 35
почетный гость
Сейчас нет на сайте
Quote (vladboss)
все работает, спасибо)
но ты забыл приписать то, чтобы сам себя не вытащил..

Всегда рад помочь по интересному вопросу.


пусто!)
vladbossДата: Воскресенье, 05 Августа 2012, 12:17 | Сообщение # 36
постоянный участник
Сейчас нет на сайте
gmmmm,
хех)
так то еще парочка вопросов есть, но не сейчас, на днях отпишусь)
если есть желание еще интересное разобрать:D

Добавлено (05.08.2012, 12:17)
---------------------------------------------
gmmmm,
такая ситуация:
на арене(бой) хочу ограничить количество сражений по времени
т.е. сразился 2 раза и следующий раз только через 4 минуты, и так все время)
у меня есть задумка..я испробывал ее-работает частично, помоги испрвить ошибки или что то новое подскажи)

я сделал так:
в БД таблица 'war_time' со значением "2"(количество боев)
на арене после того как прошел бой, в базу в таблице 'war_time' вычитаем -1
и так пока не дойдет до нуля т.е. два раза всего, каждый раз при входе на арену, замутил проверку, если значение в таблице равно 0, то через time() отсчитываем 4 минуты , НО у меня очень замудренно как то, и трудно разобраться из за чего не работает..
предложи пожалуйста решение проблемы)
спасибо)


-помог ставь +

АБП production ©
gmmmmДата: Воскресенье, 05 Августа 2012, 12:45 | Сообщение # 37
почетный гость
Сейчас нет на сайте
Таблица war_time boi - кол-во боев и поле time - 0,
Code
if ($boi == 0)
{
if ($time == 0)
заносим в базу time() + 240(4min)
echo "лимит!";
else
тянем из бд время
if ($time > time())
echo "рано еще";
else
обновляем базу time = 0 boi + 2
}
else
$boi - 1
и тут сам бой..


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


пусто!)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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