LoginSignup
1
1

More than 5 years have passed since last update.

第4話 敵が現れた!

Last updated at Posted at 2016-02-05

敵は本能寺にあり!(謎)

持ち物が準備出来た太郎と次郎が街中を歩いているときに、攻撃的な人に遭遇してしまった状況をコード化しました。

マイブームなPhalconとMongoDBな環境で実装します。

Item同様にモデルとしてEnemyクラスを実装します。

Enemy.php
<?php

use Phalcon\Mvc\Collection;

class Enemy extends Collection
{
    public function getSource()
    {
        return "enemy";
    }
}

誰と遭遇するのわからないのが世の常。ランダムでMongoDBからEnemyを読み出してみます。
Enemyには、こんな感じの情報が入っているとして、

moga.php
$teki1 = new Enemy();
$teki1->name = '角刈り';
$teki1->rank = 1;
$teki1->weapon = '朽ち木';
$teki1->save();

$teki2 = new Enemy();
$teki2->name = 'リーゼント';
$teki2->rank = 1;
$teki2->weapon = '小石';
$teki2->save();

$teki3 = new Enemy();
$teki3->name = 'バンダナ';
$teki3->rank = 1;
$teki3->weapon = 'ハサミ';
$teki3->save();

$teki4 = new Enemy();
$teki4->name = 'グラサン';
$teki4->rank = 2;
$teki4->weapon = '竹ぼうき';
$teki4->save();

まだまだ、この兄弟は、駆け出しの悪童なので、ランクが1までのEnemyが遭遇対象とします。
まずは、このランク1までのEnemyの件数を数えます。

soga.php
// rank BETWEEN A AND B 的な条件
$query['conditions'] = array(
    'rank' => array(
        '$gte' => 1, // A
        '$lte' => 1  // B
    )
);
$kensu = Enemy::count($query);

この件数を使って乱数を生成し、ランダムレコードをスキップします。検索結果もとりあえず1件にします。

zoga.php
$query['skip'] = mt_rand(0, $kensu - 1);
$query['limit'] = 1;

Enemyが登場します。

boga.php
$enemy = Enemy::findFirst($query);
echo $enemy->name . "が、手に" . $enemy->weapon . "を持って現れた!!";

兄弟の運命や、いかに!!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1