忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2025/11/13 23:36 |
AuraPHP 1.0.0 Aura.Router
Aura.Routerはルーティングを行います。

CakePHPのRouter、Symfonyのrouting.yml、ZendFrameworkのZend\Mvc\Routerのようなルーティング処理を行います。
もっともAura.Routerがやるのはパースだけなので、そこからルートを振り分ける処理は別途書かないといけません。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Router
		$router = new Aura\Router\Map(
			 new Aura\Router\DefinitionFactory()
			,new Aura\Router\RouteFactory()
		);
	
	// ルーティングの登録
		// /
		$router->add('home', '/');
		// /2013/01/01
		$router->add('date', '/{:year:(\d+)}/{:month:(\d+)}/{:day:(\d+)}');
		// /2013/01/01/1
		$router->add('dateid', '/{:year:(\d+)}/{:month:(\d+)}/{:day:(\d+)}/{:id:(\d+)}');
		// /controller/action/1
		$router->add('article', '/{:controller}/{:action}/{:id:(\d+)}');
		// 他全て
		$router->add('default', '/*');
	
	// パース
		$route = $router->match($_SERVER['PATH_INFO'], $_SERVER);
		
		// 'index.php/2013/1/2/3' でアクセスした場合
		$route->name; // dateid
		$route->values; // array('year'=>'2013', 'month'=>'1', 'day'=>'2', 'id'=>'3' )
		$route->regex; // "/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<id>\d+)"
		$route->path; // "/{:year}/{:month}/{:day}/{:id}"
		
		// 'index.php/a/b/1' でアクセスした場合
		$route->name; // article
		$route->values; // array('controller'=>'a', 'action'=>'b', 'id'=>'1')
		$route->regex; // "/(?P[^/]+)/(?P[^/]+)/(?P\d+)"
		$route->path; // "/{:controller}/{:action}/{:id}"
		
		// 'index.php/hoge/fuga'  でアクセスした場合
		$route->name; // default
		$route->values; // array('*'=>array('hoge', 'fuga'))
		$route->regex; // "/(?P<__wildcard__>.*)"
		$route->path; // "/{:__wildcard__}"
公式の例ではmod_rewrite前提で、http://example.jp/a/b/cのようなURLを想定していますが、mod_rewriteを利用しないときはhttp://example.jp/index.php/a/b/cみたいなURLになります。
そしてparse_url()の引数に$_SERVER['REQUEST_URI']を指定していますが、mod_rewriteが無い場合はREQUEST_URIは正しくパースしてくれません。
そのため今回は$_SERVER['PATH_INFO']を突っ込んでます。
なんかここらへん自動判別とかできないんだろうか。

Aura\Router\Mapに対してルーティングを適当にセットし、その後match()メソッドに'/2013/1/2/3'のようなパスを投げることで、ルーティングに従ってパスを分解したAura\Router\Routeインスタンスが帰ってきます。
あとはnameとvaluesを使って適当なコントローラなりアクションなりを呼び出すようにするとよいでしょう。

最後の'/*'はデフォルトルートです。
既存のルートいずれにも当て嵌まらなかった場合にここに来ます。
デフォルトルートは別に書かなくてもかまいませんが、その場合$route = falseになります。

また'/foo/bar/*'と書くと'/foo/bar/baz'や'/foo/bar/baz/qux'など'/foo/bar/'以下全てのURLをルーティング可能です。

これらを組み合わせて、各URLに対するアクション等を振り分けていきましょう。
Aura.Routerを利用することで、URLからのルーティング処理を簡単に行うことができるようになりました。


AuraPHPの記事
PR


2013/05/20 22:49 | Comments(0) | PHP
買ったものリスト 2013/05/19

史上最強の弟子 ケンイチ 50 松江名 俊
史上最強の弟子 ケンイチ 51
☆☆☆☆

ついに50巻。
昔は50巻というと相当な長寿作品しかなかったというイメージなのですが最近はそうでもないような。
世代交代が遅くなったのか?単にページ数が増えただけ?
ケンイチは長いわりにはあまりマンネリを感じさせないのが不思議ですね。
でもおっぱいは正直いらん。
美雲とか明らかに邪魔だろあれ。

てか宇喜田、DオブD前には秘密にしといてくれとか言ってた気がするんだがずいぶんオープンになったな。


ソードアートオンライン10 アリシゼーション・ランニング 川原 礫
ソードアートオンライン11 アリシゼーション・ターニング
ソードアートオンライン12 アリシゼーション・ライジング
☆☆☆

ちょっと整合騎士共、流れ弾で気絶ってどういうことだよ。
あと名前言われただけで不安定になるってどういうことだよ。
しかも大会優勝者なんて有名人、うっかり人前に出そうものなら一瞬で暴走しそうなものなのですが。
もっと普通に記憶は整合性保ったまま人界から召喚されたという形式にでもすればよかったろうに。
そこらへんどうしてそんな設定にしたのかがよくわからなかった。


2013/05/19 21:18 | Comments(0) | 買ったもの
今週の実績 2013/05/19
2013/05/17の実績

Gyromancer

15の勲章を持つ者 10
勲章を15種類手に入れた。

3つの勲章を持つ者 10
勲章を3種類手に入れた。

7つの勲章を持つ者 10
勲章を7種類手に入れた。

2013/05/07の実績

バトルフィールド 3

ほかの2つは? 20
核を発見する

ギンガフォース

破壊の順番 10
チャプター9のルートを真ん中→左→右の順で攻略(ストーリーモードのみ)

2013/05/06の実績

ギンガフォース

鑑賞 10
ライバルのリプレイを再生

オンラインランキングエントリー 30
オンラインランキングにスコアをアップロードした!

ノーマルクリア 30
ストーリーモード ノーマルをクリア

2013/05/05の実績

バトルフィールド 3

ショックトルーパー 15
揺れを耐え抜く

そうはさせるか 25
「Operation Swordbreaker」で通りにいる敵兵からチャッフィンを守る

フラッシュフォワード 10
「Semper Fidelis」をクリア

ギンガフォース

NICE RECOVERY! 10
ゲームオーバー間際にエクステンドアイテムを取得して復活した!

稼ぎ頭 50
累計100万クレジット到達(ストーリーモードのみ)

チャプター8 ミッション達成 30
後半の敵の撃墜数を最高ランクでクリア(ストーリーモードのみ)


2013/05/19 19:10 | Comments(0) | 実績
AuraPHP 1.0.0 Aura.Signal
Aura.Signalはイベントハンドラです。
特定のイベントに対してアクションを紐付けます。

<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// 適当なクラス
	class Test{
		protected $signal;
		public function __construct(Aura\Signal\Manager $signal){
			$this->signal = $signal;
		}
		public function hoge(){
			// ハンドラ呼び出し
			$this->signal->send($this, 'signal1', 'foo');
		}
		public function fuga(){
			// ハンドラ呼び出し
			$this->signal->send($this, 'signal2', 'bar');
		}
	}

	// Aura.Signal
	$signal = new Aura\Signal\Manager(
		 new Aura\Signal\HandlerFactory
		,new Aura\Signal\ResultFactory
		,new Aura\Signal\ResultCollection
	);

	// ハンドラを登録 (クラス名, シグナル名, コールバック関数, 優先度)
		$signal->handler('Test', 'signal1', function($arg){ print($arg); }, 100 );
		$signal->handler('Test', 'signal2', function($arg){ print($arg); }, 100 );
		$signal->handler('Test', 'signal2', function($arg){ print('ハンドラ複数設定'); }, 200 );

	// 実行
		$test = new Test($signal);
		$test->hoge(); // 'foo'が表示
		$test->fuga(); // 'bar''ハンドラ複数設定'の順に表示
なんかこれ、普通にメソッド呼び出してるだけじゃね?

JavaScriptであれば
document.getElementById('hoge').addEventListener('click', handler, false);
のように、内部を一切触らず外部からハンドラを設定することができるわけですが、PHPでは『Test::hoge()が呼ばれたらハンドラを実行する』的な動作を外部から指定することができません。
いちいち内部からハンドラ呼び出しを書かないといけないということで相当微妙。

便利なところとしては、同じシグナル名のハンドラを複数登録しておくと、一回のハンドラ呼び出しで全部実行されます。
また、シグナルが存在しないと何もしません。
普通のメソッド呼び出しだと対象メソッドを書き換えないといけなくなりますが、Aura.Signalはどこからでも好きにコールバックを仕込むことができ、挙動の変更が簡単になります。
まあ、やりすぎるとソース追うのが面倒になりすぎるから程々にしておいてほしいものですが。

AuraPHPの記事


2013/05/17 23:59 | Comments(0) | PHP
AuraPHP 1.0.0-beta1 Aura.Session
Aura.Sessionは、セッションのラッパで、セッションをオブジェクト風に扱えます。
使い方もかなり簡単です。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Aura.Session
		$session = new Aura\Session\Manager(
			new Aura\Session\SegmentFactory(),
			new Aura\Session\CsrfTokenFactory()
		);
	
	// 設定
		$session->setCacheExpire($session->getCacheExpire()); // session_cache_expire()
		$session->setCacheLimiter($session->getCacheLimiter()); // session_cache_limiter()
		$session->setName($session->getName()); // session_name()
		$session->setSavePath($session->getSavePath()); // session_save_path()
	
	// セッション開始
		$session->start(); // session_start()
		$session->regenerateId(); // session_regenerate_id()
	
	// 状態確認
		$session->isStarted(); // 開始していればtrue
		$session->getId(); // session_id()
		$session->getStatus(); // session_status()
		$session->isActive(); // session_status()===PHP_SESSION_ACTIVEならtrue
	
	// セッション書き込みオブジェクト
		$segment = $session->getSegment('Aura.Session.Test');
	
	// 読み書き
		$segment->hoge = 'fuga';
		$hoge = $segment->hoge;
	
	// 読んだら消える
		$segment->setFlash('key', 'value');
		$segment->hasFlash('key'); // 値が存在すればtrue
		$key = $segment->getFlash('key'); // ここで消える
	
	// 終了
		$session->commit(); // session_write_close()
		$session->clear(); // session_unset()
		$session->destroy(); // session_destroy()
コンストラクタは選択の余地がないので、気にせずそのままコピペするだけでいいです。
セッションの開始終了など、セッション全体に関連する事柄はAura\Session\Managerに対して設定します。

データの書き込みは、getSegment()でセグメントを取得して、それに対して書き込んでいきます。
今回は引数に'Aura.Session.Test'を指定したので、実際に書き込まれる値は$_SESSION['Aura.Session.Test']['hoge'] = 'fuga';のようになります。
引数にパッケージ名など一位の値を指定することで、別の部署が開発してた機能とセッションキーが重複して動かなくなった、などの事故を未然に防ぐことができます。

また便利な機能として、一度だけ読み込めるフラッシュ機能があります。
setFlash()で保存した値は、getFlash()した時点で消えます。
フォームのリロード防止や、リダイレクト先での警告表示などに気軽に使えそうです。


AuraPHPの記事



2013/05/15 23:40 | Comments(1) | PHP
PHP5.4.7 セッションハンドラ
ずっと前session_set_save_handler()を使ってセッション制御を行いました。
当時はそれぞれの処理にいちいち関数を設定するという素敵な構造でしたが、PHP5.4からはインターフェイスを使ったまともな設計ができるようになっています。
SessionHandlerInterfaceインターフェイスを使って書き直してみましょう。
というかSessionHandlerクラスが実装されたので、前のやつをそのまま使うとCannot redeclareのFatal errorになってしまいます。

テーブル作成。
CREATE TABLE `user_session` (
 `id` varchar(32) NOT NULL,
 `data` text,
 `regist_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
本体。
<?php
class MySessionHandler implements SessionHandlerInterface{
    //セッションテーブルの定義
    private $sessionDsn   = 'mysql:dbname=session;host=localhost';
    private $sessionUser  = 'testuser';
    private $sessionPass  = 'testpass';

    //PDO
    private $session;
    //SQL
    private $sqlRead   = 'SELECT data FROM user_session WHERE id = :id';
    private $sqlWrite  = 'INSERT INTO user_session (id, data) VALUES (:id, :data) ON DUPLICATE KEY UPDATE data=:data';
    private $sqlGc     = 'DELETE FROM user_session WHERE regist_date < NOW() - INTERVAL :second SECOND';
    private $sqlDestroy= 'DELETE FROM user_session WHERE id = :id';

    /**
     * @Override
     * セッションを開始した
     * @param String セッション保存パス
     * @param String セッション名
     * @return boolean
     */
    function open($save_path, $session_name){
        //DB接続
        $this->session = new PDO($this->sessionDsn, $this->sessionUser, $this->sessionPass);
        return true;
    }

    /**
     * @Override
     * セッションを閉じる
     * @return boolean true
     */
    function close(){
        $this->session = null;
        return true;
    }

    /**
     * @Override
     * セッション読み込み
     * @param String セッションID
     * @return String セッションの内容
     */
    function read($id){
        $smt = $this->session->prepare($this->sqlRead);
        $smt->bindParam(':id', $id, PDO::PARAM_STR);
        if(!$smt->execute()){return '';}
        return $smt->fetchColumn(0);
    }

    /**
     * @Override
     * セッション書き込み
     * @param String セッションID
     * @param String 保存内容 
     * @return boolean
     */
    function write($id, $data ){
        $smt = $this->session->prepare($this->sqlWrite);
        $smt->bindParam(':id', $id, PDO::PARAM_STR);
        $smt->bindParam(':data', $data, PDO::PARAM_STR);
        return $smt->execute();
    }

    /**
     * @Override
     * セッション削除
     * @param String セッションID
     * @return boolean
     */
    function destroy($id){
        $smt = $this->session->prepare($this->sqlDestroy);
        $smt->bindParam(':id', $id, PDO::PARAM_STR);
        return $smt->execute();
    }

    /**
     * @Override
     * ガベージコレクション
     * @param int session.gc_maxlifetime
     * @return boolean
     */
    function gc($maxlifetime){
        $smt = $this->session->prepare($this->sqlGc);
        $smt->bindParam(':second', $maxlifetime, PDO::PARAM_INT);
        return $smt->execute();
    }
}

    // セッションハンドラの登録
    session_set_save_handler(new MySessionHandler(), true);
    // セッションスタート
    session_start();
    session_regenerate_id(true);
    // 以降普段と同じようにセッションを使用可能
    $_SESSION['hoge'] = 'fuga';
このようになりました。
ついでにmysql_connectなどの非推奨なものも外しています。
ずいぶんすっきりしました。

なおidの32桁というのはセッションID生成関数のデフォルト、session.hash_function=0の場合の最大値です。
違う生成方法を用いている場合は桁数を合わせましょう。

write()の第二引数に入ってくるデータはセッションをシリアライズしたものですが、通常のserialize()ではなくsession_encode()という関数が使われています。
見た目は似ていますが互換性はないので注意しましょう。

あとどうでもいいけど、SessionHandlerInterface::gc()の引数はstringになっていますが実際はintでした。




2013/05/10 23:59 | Comments(0) | PHP
AuraPHP 1.0.0 Aura.Sql その2
Aura.Sqlで前回使わなかったメソッドなどを適当に使ってみます。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Aura.Sql
	$auraSql = new Aura\Sql\ConnectionFactory();
	$connection = $auraSql->newInstance('mysql', 'host=localhost;dbname=test;charset=utf8;', 'testuser', 'testpass');
	
	// 接続する
	$connection->connect(); // 失敗したらPDOException
	
	// PDOインスタンスを直接得る
	$pdo = $connection->getPdo();
	
	// DSN
	$dsn = $connection->getDsnString(); // 'mysql:host=localhost;dbname=test;charset=utf8;'
	
	// クォート ただしprepareを使用すべき
	$str = $connection->quote("1' OR 1 ");
	$str = $connection->quoteInto("foo = ? AND bar = ? ", array("1' OR 1 ", "1' OR 1 "));
	
	// テーブル一覧を取得
	$tables = $connection->fetchTableList();
	
	// カラム一覧を取得
	$columns = $connection->fetchTableCols('hoge');
	
	// SELECT
	$select = $connection->newSelect(); // SELECT
	$select->distinct(true);            // distinct
	$select->cols(['*']);               // *
	$select->from('hoge');              // FROM hoge
	$select->where('id = :id');         // WHERE id = :id
	$select->where('id = :id2');        // AND id = :id2
	$select->orWhere('id = :id3');      // OR id = :id3
	$select->groupBy(array('id'));      // GROUP BY id
	$select->having('id = :id4');       // HAVING id = :id4
	$select->orderBy(array('id DESC')); // ORDER BY id DESC
	//$select->limit(1);                // LIMIT 1
	//$select->offset(0);               // OFFSET 1
	$select->setPaging(5)->page(3);     // LIMIT 5 OFFSET 10
	
	$bind = array('id'=>1, 'id2'=>1, 'id3'=>1, 'id4'=>1);
	$data = $connection->fetchAll($select, $bind);

SELECT文が全くの意味不明ですが、あくまでSQLの例ということで。
SQL用には、他にjoin()もあり、大抵のSQLは書けるようになっています。

便利なのがsetPaging()とpage()で、ページング用のLIMIT句を簡単に作ってくれます。
setPaging()で1ページあたりの件数、page()で表示するページを指定です。


しかし何故わざわざquote、quoteIntoなんてメソッドを実装しているのかは謎。
理由がないかぎり使わないようにしましょう。


AuraPHPの記事


2013/05/08 23:59 | Comments(0) | PHP
AuraPHP 1.0.0 Aura.Sql
Aura.Sqlを使ってSQLを発行してみます。
中身は単にPDOのラッパで、さほど難しく考えずに使用可能です。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Aura.Sql
	$auraSql = new Aura\Sql\ConnectionFactory();
	$connection = $auraSql->newInstance('mysql', 'host=localhost;dbname=test;charset=utf8;', 'testuser', 'testpass');
	
	// プロファイラを有効にする
	$connection->getProfiler()->setActive(true);
	
	// トランザクション開始
	$connection->beginTransaction();
	
	try{
		// SELECT / SQL
			$select = 'SELECT * FROM hoge WHERE id = :id';
			$where = array('id'=>1);
			$connection->fetchAll($select, $where);
		
		// SELECT / クエリオブジェクト
			$select = $connection->newSelect();
			$select->cols(['*'])->from('hoge')->where('id = :id');
			$where = array('id'=>1);
			$connection->fetchAll($select, $where);
		
		// INSERT / 配列
			$table = 'hoge';
			$bind = array('data'=>'でーた');
			$connection->insert($table, $bind);
		
		// INSERT / クエリオブジェクト
			$insert = $connection->newInsert();
			$insert->into('hoge')->cols(array('data'));
			$bind = array('data'=>'でーた');
			$connection->query($insert, $bind);
		
		// LAST_INSERT_ID
			$lastInsertId = $connection->lastInsertId();
		
		// UPDATE / 配列
			$table  = 'hoge';
			$where  = 'id = :id';
			$bind   = array('id'=>1);
			$update = array('data'=>'でーた1');
			$connection->update($table, $update, $where, $bind);
		
		// UPDATE / クエリオブジェクト
			$update = $connection->newUpdate();
			$update->table('hoge')->where('id = :id')->cols(array('data'));
			$bind = array('id'=>2, 'data'=>'でーた2');
			$connection->query($update, $bind);
		
		// DELETE / 配列
			$table  = 'hoge';
			$where  = 'id = :id';
			$bind   = array('id'=>1);
			$ret = $connection->delete($table, $where, $bind);
		
		// DELETE / クエリオブジェクト
			$delete = $connection->newDelete();
			$delete->from('hoge')->where('id = :id');
			$bind = array('id'=>2);
			$connection->query($delete, $bind);
		
		// コミット
			$connection->commit();
	
	}catch(Exception $e){
		// ロールバック
		$connection->rollBack();
	}
	
	// プロファイラを止める
	$connection->getProfiler()->setActive(false);
	
	// プロファイラを取得
	$profile = $connection->getProfiler()->getProfiles();

マニュアルだとinstance.phpをインクルードしろとなっているのですが、困ったことにinclude.phpにはオートロードが効きません。
中身はConnectionFactoryをnewしてるだけなので普通にやったほうがいい気がします。
DSNの形式はPDOとほぼ同じですが、頭の'mysql'や'pgsql'だけ分けないといけないようです。

使い方としてはぺちぱーお馴染み配列形式の他、クエリオブジェクトによるメソッドチェインでの記述も可能になっています。
ただこのクエリオブジェクト、微妙に使いにくいです。
せっかくメソッドチェイン使ってるのだから、$connection->newInsert()->into('hoge')->col('data', 'でーた')->exec()みたいに使いたかったところ。

マニュアルでは$insert->set('date', 'NOW()')という例がありますが、これは見てのとおりSQLを直接入れたい場合に使います。
うっかり$insert->set('data', $_REQUEST['data'])とするとSQLインジェクションになるので注意しましょう。

Aura.Sqlを使った場合、SQLとしての利点は正直メソッドチェインくらいですが、プロファイラが簡単に使えてボトルネック分析などが非常に楽なのが便利です。
getProfiler()でプロファイラを取得し、発行したSQL、かかった時間などの詳細を確認することができます。


AuraPHPの記事



2013/05/06 21:44 | Comments(0) | PHP
買ったものリスト 2013/05/05
カラドリウスとギンガフォースを少しプレイ。
カラドリウスは見た目はかなりいいんだがゲーム部分は今のところよくわからない。
まあカラドリウスはまだほとんどプレイしてないので、今の時点で評価とかは出せません。
ギンガフォースは見た目は残念だけどゲーム部分がわかってきてだんだん楽しくなってます。
ギンガフォースはエスカトスの精神的続編だけあって、STGの道中もなかなか楽しいです。
ただドロップアイテムが少々多すぎて、慣れるまでは見づらいところがあります。


箱入りドロップス1 津留崎 優
箱入りドロップス2
☆☆☆☆☆

かわぅいいいいいいい
高校の年まで家から出たことのない完全な箱入り娘が高校デビュー。
さすがに同室じゃないけど隣室で暮らしはじめて俺色に染め上げることに。
今どきそんな箱入り娘なんざ居るわけないんだけどいいんだよ漫画なんてファンタジーなんだから。
設定が古くさいとかそんなことはどうでもいいんだよ。
雫がひたすら可愛いです。
最初は本当に何も知らず、店に入ることすら怖がっていた彼女が少しづつ成長していく様子はいつまでも見守っていたいものです。
主人公の交友範囲がやたら狭いのが気にかかりますが、まあ4コマだから仕方ないのかなあ。

絵はそこまで上手とは言えず、初期の画とかよく見てみると実は何気に崩れてたりするのですが、よく見てみないと気付かないぐらい可愛い雰囲気を醸し出してしまう可愛い空間はただものではない。
あとどうでもいいが、高校をダーツで選んだ上で都合のいい知り合いの下宿って無理があるな。


ハローサマー、グッドバイ マイクル・コーニイ
☆☆

不快な登場人物しかいねえ。
人畜無害な昨今ラノベの登場人物はもちろん異常ですが、だからといってただの一人も感情移入できないほど不愉快な人物ばかり出さなくてもよかろうに。
主人公からして中二病をこじらせた独善的な人物ですし、周囲も馬鹿とか若くして老害とかメンヘラとかそんなのばっかです。
そんな中で無理にでも一番気に入ったキャラを挙げるとすれば……リボン?
なんか紙の向こう側に居るような台詞ばかりの中、一人だけリアルな言葉が聞けたような気がしないでもない。

そんなわけで途中くじけそうになりました。
終盤の急展開に衝撃を受けろとか言われてたのでがんばって最後まで読み進めたわけだが……たいしたラストじゃなくね。
そもそも根拠が主人公の妄想以外にないですし。
世界設定的に毎年たくさんの凍死者が出てるに間違いないわけですが、彼らが復活したという話をとんと聞かない時点で主人公の将来もお察しというところです。

ということで個人的には、これが何故世間で絶賛されているのか全く理解できない作品でした。


Caladrius (カラドリウス) モス

そんなわけでせっかく買ったのにまだほとんどプレイしていません。


バトルフィールド 3 プレミアム・エディション エレクトロニック・アーツ

なんか全然そんな気はなかったんだけど、ついうっかり購入してしまった。
とりあえずタイトル画面でぼわぼわぼわぼわ低周波みたいな音がして頭が痛くなるんだけどどうにかならんのこれ。
ストーリーはほんの少しだけやったんだけど、BFBCみたいなおふざけ要素は微塵もなさそうです。
少し残念。


2013/05/05 19:15 | Comments(0) | 買ったもの
今週の実績 2013/05/05

2013/05/04の実績

ギンガフォース

セブンティアの夜明け 50
ストーリーモードでチャプター10をクリア

イージークリア 10
ストーリーモード イージーをクリア

ストーリーモード全チャプタープレイ 10
ストーリーモードで全てのチャプターをプレイした

決死の抑制 30
ストーリーモードでチャプター9をクリア

チャプター9 ミッション達成 30
ボスのパーツ破壊数を最高ランクでクリア(ストーリーモードのみ)

ジャッジメントフォース ドラゴン 30
ストーリーモードでチャプターYをクリア

共同戦線 30
ストーリーモードでチャプター8をクリア

真実の先 30
ストーリーモードでチャプター7をクリア

チャプター7 ミッション達成 30
2基のエレベータを破壊してクリア(ストーリーモードのみ)

フアン確保 30
ストーリーモードでチャプター6をクリア

チャプター6 ミッション達成 30
シャトルの護衛を成功させてクリア(ストーリーモードのみ)

ゲンゾウ確保 30
ストーリーモードでチャプター5をクリア

セラム確保 30
ストーリーモードでチャプター4をクリア

ガーナ確保 30
ストーリーモードでチャプター3をクリア

チャプター3 ミッション達成 30
ミサイルを2発とも撃墜してクリア(ストーリーモードのみ)

ジャッジメントフォース タイガー 30
ストーリーモードでチャプターXをクリア

ティニー確保 30
ストーリーモードでチャプター2をクリア

チャプター2 ミッション達成 30
サーチライトでボスを完全に暴いてクリア(ストーリーモードのみ)

2013/04/30の実績

ギンガフォース

ジャック確保 30
ストーリーモードでチャプター1をクリア

チャプター1 ミッション達成 30
ボスのパーツ破壊数を最高ランクでクリア(ストーリーモードのみ)

Caladrius

勝利した騎士 10
アレックスでゲームクリア達成!

堕ちた光 25
5面ボスを撃破!

予備役補充 20
1UPアイテムを獲得成功!

支配されし空 20
4面ボスを撃破!

深淵なる闇 15
3面ボスを撃破!

降り注ぐ雷 10
2面ボスを撃破!

騎士のはじらい 5
アレックスの羞恥ブレイクを全て目撃。

震える大地 5
1面ボスを撃破!

進むべき道 5
初めてゲームメニューに入った。

2013/04/29の実績

Gears of War: Judgment

制止不能 50
レベル 50 に三度到達し、経験値をリセットして新たな任務に備えた


2013/05/05 19:01 | Comments(0) | 実績

<<前のページ | HOME | 次のページ>>
忍者ブログ[PR]