[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прибавлять значение + 1 к переменной каждый час
Danila
Я создаю мини-онлайн игру. Вот у меня есть форма:
<form action="" method="post" class="input"> 
<input
type="text" name="arm" value="">
<br> <input
type="submit" value="Внести золото!">
</form>


Обработчик:
<?
$a=$_POST['arm']; //заносим данные в переменную
$a2=$a/2; - делим на 2, чтобы узнать, сколько мы сможем натренировать армии
$gold_zatr=$a*2;// - умножаем на 2 сумму, которую потратим
$fp=fopen('gold.txt', 'r+'); // открываем файл, в котором хранится значение кол-ва нашего золота
$gold=fgets($fp, 999);//заносим кол-во золота в переменную
fclose($fp);//закрываем
$a=round($a);//округляем до целого


if(!isset($a))
{
exit("Введите значение!!!");
$error;
}
//тут понятно...

$vozm_arm=$gold/2;
//сколько армии можем натренировать

if($gold=0)
{
echo "У вас закончились деньги(";
$error;
$fp=fopen('gold.txt', 'w+');
$golding=0;
fwrite($fp, $golding);
fclose($fp);
exit;
}
//если бабло закончилось, мы присваиваем в файл, где хранятся кол-во золотых значение - 0

$fp=fopen('gold.txt', 'r+');
$gold=fgets($fp,999);
fclose($fp);
//присваиваем оставшиеся деньги к переменной
if($gold<0)
{
echo "У вас закончились деньги(";
$error;
$fp=fopen('gold.txt', 'w+');
$golding=0;
fwrite($fp, $golding);
fclose($fp);
exit;
}
//если уже баланс начал зашкаливать за отрицательное число
if($a>$vozm_arm)
{
$gold_zatr_res=$gold_zatr-$gold;
$error;
echo "Недостаточно денег! Нужно заплатить- <b>$gold_zatr</b> золотых! <br> У вас - $gold! <br> Вам не хватает - <b>$gold_zatr_res</b> золтых!<br>";
exit;
}
//чтобы выводил текс, если пользователь тренерует армию, больше чем может!

$fp=fopen('myarm.txt', 'r');
$arm=fgets($fp,999);
fclose($fp);
//считывает файл, где хранится числовое значение нашей армии... и заносит в переменную
if(!isset($error))//если не было никаких ошибок, и все правильно!
{
$gold_res=$gold-$gold_zatr;
$a23=$a2+$arm;

$a_res=$a+$a1;
$a_res=round($a_res);
$a2=round($a2);
$a23=round($a2);
//округляем до целого
echo "У вас осталось - $gold_res монет , вы натренировали армии - $a2 , сейчас у вас армии - $a23 солдат! ";
$fo=fopen('gold.txt' , 'w+');
fwrite ($fo,$gold_res);
fclose($fp);
$fp=fopen('myarm.txt', 'w+');

fwrite($fp, $a23);//записываем новое значение армии
fclose($fp);
exit;
}

if(!isset($error))
{
echo "<a href='/trening.php'> Вернуться </a>";
}//сыллка на главную...

?>


Как вы уже поняли он мне записывает переменную $a23 - которая содержит в себе всю армию включая натренерованную... мне же нужно, чтобы тренировалась армия не за раз, а через 1 минуту - +1 к значению $a23 и записываем данные в файл... и так каждую минуту, даже если пользователь вышел..... Можно так сделать?



Спустя 36 минут, 42 секунды (29.09.2012 - 13:14) AlmazDelDiablo написал(а):
Это несколько иначе делается. Вы храните в базе (или файле) время начала тренировки и при загрузке страницы высчитываете, сколько натренировалось и записываете в файл.

Спустя 32 минуты, 39 секунд (29.09.2012 - 13:47) danila написал(а):
Цитата (AlmazDelDiablo @ 29.09.2012 - 13:14)
Это несколько иначе делается. Вы храните в базе (или файле) время начала тренировки и при загрузке страницы высчитываете, сколько натренировалось и записываете в файл.

Простите, а можно как нибудь в скрипте с комментами?)))

Спустя 43 минуты, 14 секунд (29.09.2012 - 14:30) inpost написал(а):
Ответ дублирую:
Открыл файл, получил данные = 10.
Далее сделал +1 = 11. И обратно занёс данные.
1 раз в минуту = это КРОН!

Или бери цифру 0 как точку старта, и при выводе считай разницу в минутах между нынешнем временем и точкой старта.

Спустя 9 минут, 46 секунд (29.09.2012 - 14:40) inpost написал(а):
Ты высоко копнул.
Хранишь точку старта тренировки = 10 минут.
Количество тренировки = 10.
1 юнит в минуту.
Имеем сейчас = 3

Человек открывает посмотреть армию в 15 минут (то есть через 5 минут). Изменяем значение в БД:
Точка старта = 15.
Количество тренировок = 10-5=5
1 юнит в минуту
Имеем 3+5 = 8

Если же обращений много(!), то проделываешь абсолютно всё то, что я написал выше на кроне, то есть 1 раз в минуту.

Спустя 21 час, 12 минут, 17 секунд (30.09.2012 - 11:52) Гость_Даня написал(а):
А можно как нибудь скриптом?!( Вообще ничего не понял....
Цитата (inpost @ 29.09.2012 - 14:40)
Ты высоко копнул.
Хранишь точку старта тренировки = 10 минут.
Количество тренировки = 10.
1 юнит в минуту.
Имеем сейчас = 3

Человек открывает посмотреть армию в 15 минут (то есть через 5 минут). Изменяем значение в БД:
Точка старта = 15.
Количество тренировок = 10-5=5
1 юнит в минуту
Имеем 3+5 = 8


Спустя 2 минуты, 31 секунда (30.09.2012 - 11:54) Гость_Даня написал(а):
Ну мне бы допустим... Через каждую минуту открывался файл, и туда записывалось значение армии (+1 каждую минуту..) Мне всего 14 лет) Я мало что еще понимаю)) Так, только обработчики и т.д...( Может еще посоветуете, что подучить, чтобы мне создавать онлайн игры.. Не знаю, пару функций там... Или еще что...

Спустя 2 минуты, 5 секунд (30.09.2012 - 11:56) Гость_Даня написал(а):
И еще... Вот смотрите.... Допустим сейчас 16:00 (в переменной $time), я начал тренировать армию, времени на тренировку - 10 часов($a_time)! Тоесть тренировка должна оканчиваться в - $time+$a_time = 26 часов!!! Но такого же не бывает, чтобы 26 часов было((( Как тут быть?(

Спустя 1 минута, 2 секунды (30.09.2012 - 11:57) Guest написал(а):
Можно ли поставить максимальное значение переменной - 24, а остаток дальше уже к 0 прибавлялся!?

Спустя 1 час, 2 минуты, 9 секунд (30.09.2012 - 13:00) inpost написал(а):
Ну я же сказал, крон.... Открой гугл и почитай, что это такое.
И часы не надо поднимать до 26... тебе надо полную дату в формате DATETIME хранить, и вычитать как раз разницу между временем.

Спустя 5 минут, 40 секунд (30.09.2012 - 13:05) rooor написал(а):
    function time2($t)
{
$s = sprintf('%02u', $t % 60);
$m = sprintf('%02u', floor($t / 60) % 60);
$h = sprintf('%02u', floor($t / 3600));

return $h.":".$m.":".$s;
}
$startTime = mktime(16, 0, 0, date("m"), date("d"), date("Y")); // Начало тренировки каждый день в 16:00
$endTime = $startTime + 36000; // Окончание через 10 часов

echo "До окончания тренировки осталось ".time2($endTime - time());

Спустя 1 день, 3 часа, 32 минуты, 15 секунд (1.10.2012 - 16:38) Guest написал(а):
А можно, чтобы вместо начала тренировки, было значение времени которое сейчас???)

Спустя 13 минут, 59 секунд (1.10.2012 - 16:52) inpost написал(а):
Опять же, дайте готовое... научись заниматься вычитанием дат, продумай логически, как это должно выглядеть. Тогда всё будет работать так, как ты захочешь.

Спустя 3 часа, 22 минуты, 44 секунды (1.10.2012 - 20:14) Гость_Данила написал(а):
huh.gif Ну извините... sad.gif можете хоть какой нибудь там контент полезный скинуть на эту тему))) буду очень благодарен)

Спустя 13 минут, 14 секунд (1.10.2012 - 20:27) inpost написал(а):
Гугл:
Работа с датой.
php date
php вычитание дат

Спустя 17 часов, 14 минут, 11 секунд (2.10.2012 - 13:42) Данила! написал(а):
Спасибо!) И еще раз извините за то что несколько тем создавал sad.gif

Спустя 1 день, 35 минут, 33 секунды (3.10.2012 - 14:17) Гость_Даня написал(а):
<?
$time=date("i");//cколько сейчас времени
$fp=fopen('time.txt', 'r');
fwrite($fp,$time);
$times_files=fgets($fp, 999);
flock( $fp, 2 );
fclose($fp);

$time_res=$times_files+20;//во сколько натр
if($time_res>60)
{
$time_res=$time_res-60;
}
$fp=fopen('time2.txt', 'r');
fwrite($fp,$time_res);
$times_files_res=fgets($fp, 999);//сколько осталось времени
flock( $fp, 2 );
fclose($fp);

if($times_res!=$time || $times_res==$time)
{
$time_res_res=$time_files_res-$time;
echo "осталось времени до окончания тренирвки амии - $time_res_res минут."; echo $times_res;exit;
}
else
{
echo "Армия натренерована!";
}
?>

Как блокировать файл после того как записали значение времени??! После обновления страницы с этим кодом, данные в файле меняются на новые....

Спустя 7 минут, 56 секунд (3.10.2012 - 14:25) inpost написал(а):
Вот ничего не сделал из того, что я говорил...
Хочешь сделать проще, в итоге получается не рабочий код!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.