Добрый день.
Многие текстовые игры используют лог, где отображается нанесённый урон в виде строк, и в тоже время он сохраняет результат.
К примеру:
Вы нанесли урон 1
Вы нанесли урон 1
Вы нанесли урон 1
Враг нанес вам урон 2
Но лог имеет ограничения, в 10 строк, то есть каждая первая строка заменяется на новое значение, 10 стирается и туда помещается ранее 9 я строка. Как они это сделали?
В словах, спасибо.
Лог сообщений где-то хранится (в базе, например, или в сессии), а когда строится для вывода, выбираются только последние N сообщений.
Пример на php:
interface ICache {
public function has($key);
public function get($key);
public function set($key, $val);
}
class Cache implements ICache {
private $storage = [];
public function has($key) {return isset($this->storage[$key]);}
public function get($key) {return $this->storage[$key];}
public function set($key, $val) {$this->storage[$key] = $val;}
}
class SessionCache implements ICache {
public function has($key) {return isset($_SESSION[$key]);}
public function get($key) {return $_SESSION[$key];}
public function set($key, $val) {$_SESSION[$key] = $val;}
}
class BattleLog{
private $storage;
private $key;
private $length;
public function __construct(ICache $storage, $N, $id) {
$this->storage = $storage;
$this->length = $N;
$this->key = 'battle_log_'.$id;
if (!$this->storage->has($this->key)) {
$this->storage->set($this->key, []);
}
}
public function log($message) {
$log = $this->storage->get($this->key);
array_unshift($log, $message);
$log = array_slice($log, 0, $this->length);
$this->storage->set($this->key, $log);
}
public function render() {
$log = $this->storage->get($this->key);
foreach ($log as $message) {
echo "$message\n";
}
}
}
$log = new BattleLog(new Cache, 3, 27);
$log->log('Вы нанесли урон 1');
$log->log('Вы нанесли урон 1');
$log->log('Вы нанесли урон 2');
$log->log('Вы нанесли урон 3');
$log->log('Вы нанесли урон 5');
$log->log('Вы нанесли урон 8');
$log->log('Вы нанесли урон 13');
$log->render();
Осталось только реализовать более персистентное хранилище, чем Cache
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Стала задача отсортировать массив, приходящий из БДОдин элелемент из этого массива выглядит так:
Как в первом случае обновить в элементе offer_text секцию <![CDATA[ ]]> на содержимое переменной $text, а во втором добавить ее?
Вечер добрый, не получается сделать валидацию входящих данных в Yii2, в модели пишу правило, но вылетает исключение