スプラトゥーン2 ガチプレイヤーの雑感

みなさんスプラトゥーン2楽しんでますか?僕はイイダ派です。

1週間ほどプレイした所で、色々と思ったところをつらつらと書いてみようと思う。
まぁなんというかイカについて語りたいってだけなんですけどね。

とりあえずプレイヤーとしての自分の紹介をしておくと、
バトルフィールド、オーバーウオッチ、PUBGあたりのFPSもやっています。
前作はウデマエS+からSを行ったり来たり。
ガチマッチをメインでプレーするガチ勢です。
今のイカの進捗はこんな感じです。↓
f:id:tomex-beta:20170731211231j:plain


◆ステージ
・ハードのスペックが上がったおかげなのか全体的に広めで塗る面積が広くなった。
・塗る面積が広くなったということはスペシャルも貯めやすくて、
 打開するきっかけが増えているのは良い。
・新マップはどれも段差がやたらと多くて似たような印象を受けて少し残念。
・・段差のせいでほぼ死んでいるルートがあるのも残念。
・・振り返ると前作のステージはピーキーな調整ではあったけど、
  どれもコンセプトがはっきりしてたんだなと。
・・ガンガゼ野外音楽堂。スタート地点まで完全に押し込まれてしまうと
  押し返すのが不可能なのではないか?と感じるほどきついデザインになっているので、
  修正はいるんじゃないかと。
・段差が増えているので移動の自由度を高めるためにしっかり壁を塗る事が前作以上に重要になった。
・前作からの改良マップ、ホッケふ頭、タチウオパーキングは仕掛けも増えて
 ぐっと面白いマップになった。
・これから出てくるであろうリメイクマップには期待したい。


◆ブキ・ギア
・攻撃アップ、防御アップの削除は余計な事を考えなくて済むのでよかった。
・・どっちのギアも戦術に影響しませんからね。
・明らかに強すぎた復活時間短縮とステルスジャンプの下方修正は良し。
・イカジャンプの着地狩りを逆手にとった受け身術はちょっと面白い。
・・こういうギアパワーをつけるのがギアの役目。
・集めるのが大変だけど、自由にキアパワーを付けられるギアのかけらは良い。
・・前作は完全に運次第だったのは辛かったですよ・・・


・他のブキが軒並み下方修正されてしまっているので、
 相対的にシューターが強くなっている。
・・スプラシューターはやはり強い。サブとスペシャルの組み合わせも優秀。
・マニューバーは面白い動きをする人がだんだん増えて使っていて楽しそう。
・・ただジャンプ撃ちしようとしてスライドが暴発しやすいので扱いづらいブキなのは違いなさそう。
・ローラーの縦振りはどうかな・・・。あまり良い追加とは思っていない。
・・長い距離を一直線に塗るのはチャージャーの役目のはず。
・・塗り能力は低いけれど、いったん塗られると強いというのがローラーのコンセプトでは無かったか。
・チャージャーはとにかく不遇。
・ステージに段差が多いためバケツの価値は上がっている。使用率高い。8人のうち1~2人はバケツ(ヒッセン)
・・バケツじゃなくてヒッセンなのはサブがクイックボムだから。
・・メイン当てて足を止めた後にサブのクイックボムでほぼ仕留められるので強力。

・ブキ全体に技術的な奥行きがあり使い込むモチベーションになっている。
・・そのブキだけがやたらと上手い専門職みたいな人が出てきそう。
・逆に言うと操作が難しく(特にローラー、マニューバー)、まったく馴染めないという人も出てきそう。

・マップのデザインのためにブキの強弱が出ているので、
 これからどうやってバランスを取っていくのかはかなり悩ましい問題ではなかろうか。


スペシャ
・どのスペシャルも理不尽さは少ないけれど気を付けないとやられる、
 というバランスでほんとによくできている。
・ただハイパープレッサーはもうちょっと強くして上げてください。
・前作で嫌がられていたバリア、ダイオウイカの削除は当然かと。
・・瞬間的に無敵になるのはやっぱり納得イカなかった。
・インクアーマーを付けてる時には目が光るんだけど、
 付けていることをもっとわかりやすくしていただけると嬉しい。
・サブウェポンを投げまくるボムピッチャー。
 普段使うサブとスペシャルの時に投げるものが変わるのは気になる・・気にならない?


◆サーモン・ラン
・対戦ばかりだと疲れるので協力プレイがあるのは大変よろしい。
・・フレンドと一緒に対戦以外の遊びが出来るのは大きい。
・・リーグマッチが出来るくらいのフレンドが居たら良いんですけどね。

・オオモノシャケのバリエーションが豊富で、倒し方もそれぞれ変化があって相手していて楽しい。
・WAVE3になるとオオモノが出まくって画面がわちゃわちゃするのも、それはそれで楽しい。
・WAVE3はクリア出来るか出来ないかギリギリのラインでバランス調整の巧みさに感心している。
・金イクラを持ち帰った時のポッという効果音が気持ちいい。
・フライパンもって攻めてくるシャケはなんだか可愛い。

・受け取るポイントだとか、ランクだとかの説明が少なくて不親切さは感じる。
・三点方式で報酬を受け取る場所にショートカットが設定されていないのが面倒。
・・これは雰囲気作りといえばそうなんだけど。

・時間制限あるのは何で?考えてみたけど理由が分からない。


◆その他、細かい所
・足元を塗る→すぐにイカ移動→足元を塗る→・・・
 この繰り返しで相手に塗られている場所でも素早く移動できるという技があるが
 イカ2では前作に比べて移動スピードが遅くなる。
・・よって相手のインクに足を取られるとやられる確率がかなり高くなっている。
・・塗りはやっぱり超重要。
・インクに潜った時の体力回復スピードが遅くなっている。
・・前作と同じ感覚ですぐに動きだしてしまうとすぐにやられてしまう。
・・仕留め損なった相手を追い打ちしやすいクイックボムが強い。
・プレイヤーが作りだした抜け道をシステム側で塞いだ印象がある。
・・これがゲームの面白さにつながっているのかはまだ分からない。

・画面上のアイコンで持ってるブキ、スペシャルが溜まっている事が分かるようになったのが良い
・・スペシャルのタイミング合わせるのもやりやすい。
・・髪の部分が光っているイカはスペシャルが溜まっている、なんていうノウハウなんていらないんや。

・マップ表示のXボタン。
・・最初はWiiUの時の癖でマップ確認の時に下を向いてしまうことが何度もあったけど。
・・すぐに慣れた。慣れの問題。
・・ボタン押しているときだけマップを表示させる、という修正案を見かけてなるほどと思った。


・結果画面でデス数が表示されなくなって、余計なヘイトを貯めずに済む。
・負けた時のBGMが「負けました~ざんね~ん」じゃ無くて「がんばったけどしょうがないね」に変更されてる
 のでイラつきも軽減。良い配慮かと。

・前作には無かった詳しい戦績がスマホアプリから確認できるようになってるけど、
 PCでも見れるようにならないですかねー

ゼルダのときにも感じたけど画面遷移とボタンの役割が整頓されてないような。
・・ヒーローモードや試打の時にやりたいことが元の画面に戻れなくて迷った覚えがある。

◆ゲーム全体として
・前作ですでにゲームシステムが完成しているので、2は丁寧に穴を潰して来たなという印象がある。
・イカは面白さとして強力な軸を持っているだけに余計な事しないのが正解。

・2から始めるという方がとっても増えていて前作からのファンとしては嬉しい限りです。
・自分の観測範囲では初めてやる方も楽しんでプレーしていうようです。
・・ガチマッチに挑む人もいれば、ナワバリバトルでのんびりランク上げしている方もいます。
・それにしてもTPSというジャンルがこれだけ受け入れられて貰ってるというのはある種の事件ですね!
・初めてやる方もガチプレイヤーも自分のペースで楽しみましょう。ぬりたくーる!テンタクル!

最近買ってよかったもの

最近買ってよかったものをまとめてみる。
新しいものを買ってストレスを一個ずつ解消する、所作をちょっとづつ良くする、
それを積み重ねて毎日の快適さにつなげる。
よく使うもの程ちゃんとお金をかけようという方針で買い物をしています。



京都八田屋のオーダーメイドまくら

高反発でも低反発でもないオーダーメイド枕が作れる眠りの専門店~京都八田屋~
価格:2万円くらい

1日の大半をPCの前にいるので、どうしても首、肩にコリが来てしまいます。
整体とかストレッチとかはしていますけどなんとなく効果薄。
解消方法を調べてみてたどり着いたのが、枕があっていないのでは?という事でした。

お店に行くと体のサイズを測って自分の体にぴったりあった枕を作ってくれます。
店員さんに教えてもらった理想の枕というのは、
・両肩を枕にピッタリつけられること。
・寝転んだ時に目線がまっすぐ天井を向くこと。
・首と枕の間に隙間が無いこと。
・首にしわがよらないこと。
これだけの条件を揃えるのはオーダーメイドじゃないと難しいという訳ですね。
10年保証もついています。

枕にこの値段!?とびっくりされるかも知れないけれど効果は抜群です。
起きた時に変に首がはってる事もなくなりましたし、夜中に目を覚ましてしまう事もなくなりました。

日立の布団乾燥機

新型ふとん乾燥機 アッとドライ:日立コンシューマ・マーケティング株式会社リビングサプライ社
価格:1万4千円くらい

前述の枕を買ったお店の店員さんに
「寝ているときは思ったよりも汗をかいてるから、ちゃんと干さないとだめですよ」
というアドバイスを頂いたものの、自宅の構造上なかなか布団を干すのが難しい。
というわけで買ったのが布団乾燥機です。
f:id:tomex-beta:20170128222614j:plain:w300
これを教えると驚かれるのですが、最近の布団乾燥機はホースを布団に突っ込むだけどOK。
マットを広げるというめんどくささから解放されております。技術の進歩すごい。
冬のくそ寒い日なんかにちょっと布団を温めたい時にぱっと使えます。便利。

靴下専門店 tabioの靴下

靴下専門店 Tabio(タビオ)オンラインストア
価格:800円くらい

街中を歩くと結構目につく靴下専門店。
そういえば靴下って一日中身に付けてるもんだなと思い試しに買ってみました。
たかが靴下。されど靴下。作りががっちりしていてなかなか痛まず。蒸れる感じもあまりない。
いままで使ってた3足1000円の靴下とは違うんや・・・
デザインもなかなか良くておすすめです。

Majestouch BLACK Tenkeyless

DIATEC|ダイヤテック株式会社 製品情報
価格:1万2千円くらい

いわゆるメカニカルキーボードです。
サッカー選手のスパイクと同じで
プログラマーにとってのキーボードも大事な商売道具と言って良いと思うのですね。
メカニカルキーボードは、キーを押したときの打鍵感、キーの反発の速さ、
キーボード自体の重さによる安定感など優れた点は多く、
文字を打つスピードは段違いであがりますし、単純にタッチが気持ちいいのです。
作業の質もあがるはずです(未確認)。

プログラムを書く人、文章を書く人、
キーボードをたくさん触る人はお金を出して良いものを買った方が良いと思う。

結ばない靴紐

CATERPY公式ホームページ 「キャタピランとは」
価格:1000円くらい

仕組みとしては伸び縮みするゴム製で、ぎゅっと引っ張ると丸の部分が伸びて紐を通す仕組みです。
趣味でやってるフットサル用に買いました。
フットサル、サッカーやってる人には分かると思いますが、
靴紐をかなりきつく締める必要があるので、部分ごとに調整できるこの靴紐はとても便利。
そして一番いい所は靴紐が解ける心配がなくなること。
プレー中の心配事が消えるのは思ったよりも素敵です。

フローリングでも使えるコロコロ

コロコロ フロアクリン
価格:セットで1000円くらい

なんでこの商品に出会わなかったんだ・・という位に衝撃的。
フロリーングだけじゃなくて畳にも使えるので、
これ一本あればどこでもコロコロして掃除が出来てしまう。
これは神アイテム。めっちゃ便利だった。

パストリーゼ77

ドーバー パストリーゼ77 スプレーヘッド付 500ml
価格:500mlで1000円くらい

だいぶ前にアメトーク掃除大好き芸人で今田耕司が紹介していた商品。
高純度のアルコールで主な使いみちは殺菌。
食べ物に直接使ったり、食器に吹きかけたりしてカビ予防が出来る。
サトウキビ由来のアルコールのため、口に入っても大丈夫。安全。
これは掃除にも使えて、窓やテーブルに吹きかけて雑巾で拭く。
アルコールなので水と違ってあっという間に乾く。乾拭きする必要がなくなる。
年末の大掃除の時に大活躍でした。



こんな所でどうでしょう。
最近買って良かったものの紹介でした。

流れに乗って自分も本棚を晒してみよう


唐突な本棚晒し祭り - Danas je lep dan.

面白そうなエントリーがあったので自分もやってみようかと思います。


自分の本棚。

それは自分の大事なコレクションとも言えるわけで、
それなら是非見て欲しい!と思う反面、
普段何を考えてるのが丸見えになるんじゃ無いかという恥ずかしさも。

話のネタになれば良いんじゃないですかね。

f:id:tomex-beta:20141122204743j:plain
自分の部屋にはこんな本棚があります。
壁一面が本棚にするのがは本好きなら憧れるものです。
天井までとは行かなかったものの思い切って大きい本棚を買いました。
左下がデッドスペースになってしまってるのがちょっと残念。

ぱっとみれば分かると思いますが、この本棚はほとんどマンガです。
別にこれでいいです(笑)


f:id:tomex-beta:20141122204804j:plain
左側の棚から。
心のバイブル。「ハチミツとクローバー
最新シリーズの「ジョジョリオン
ジョジョシリーズ最高傑作だと思ってる「スティール・ボール・ラン
ピアノ弾きならこれを読もう「ピアノの森
「グルグル2」「よつばと」「うまるちゃん」
ここらへんは肩肘張らずに読めるシリーズ。

f:id:tomex-beta:20141122204821j:plain
応援したくなる漫画家、福満さんの作品。「僕の小規模な生活」「うちの妻ってどうでしょう?
「とめはね!」「おおきく振りかぶって」 クラブ活動のマンガ多いですね・・


f:id:tomex-beta:20141122204852j:plain
げんしけん二代目」「アオイホノオ」のマンガで青春。
「富士山さんは思春期」かわいい。
「リアル」「進撃の巨人


f:id:tomex-beta:20141122204919j:plain
突然のカピバラさん!!歩きます。
メジャーどころの「デスノート」「銀の匙
隠れた名作、クイズで青春「ナナマルサンバツ


f:id:tomex-beta:20141122223000j:plain
新書ゾーン


f:id:tomex-beta:20141122204956j:plain
やはりスポーツものが多いですね。


f:id:tomex-beta:20141122205009j:plain
押切先生・・・


f:id:tomex-beta:20141122205022j:plain
サッカー関連の本。
名言をまとめた「蹴球真髄」シリーズは読むとテンション上がります。


f:id:tomex-beta:20141122205028j:plain
サッカー関連その2.
わりと型から入るタイプなので体操のやり方の本とかも。


f:id:tomex-beta:20141122205034j:plain
サッカー関連その3。
孤独のグルメは良いですね~


f:id:tomex-beta:20141122205113j:plain
サイズ大きめの本たち。


f:id:tomex-beta:20141122205104j:plain
これはピアノの楽譜です。クラシックとゲーム音楽がメイン。


f:id:tomex-beta:20141122205559j:plain
小説専用の棚。
読み散らかしてる感じが伝わりますね・・・


f:id:tomex-beta:20141122205619j:plain
小説その2。
冊数が増えていくとどうしたものかなと。


f:id:tomex-beta:20141122205739j:plain
小説その3.
なのであげちゃってもいいかなとも思います。

右に見えているのは対局時計です。
将棋とか碁で互いにボタンを押し合ってるアレです。


f:id:tomex-beta:20141122205734j:plain
小説その4。
読み返す事があまり無いのです。


f:id:tomex-beta:20141122205706j:plain
机の真横にカラーボックスを置いて、技術書を並べています。
必要な時に取りやすく、というのと勉強するの忘れるない様に目につくところに置いてます。

上に載ってるのはパイオニアのCDJ。たまに遊びます。



f:id:tomex-beta:20141122205451j:plain
f:id:tomex-beta:20141122205459j:plain
おまけ。
CDは結構かさばるので別のケースに入れ替えてます。




本棚さらし記事の副作用。

ブログにアップするために写真をとろうとすると、
本の並べ方を揃えたり、床に置きっぱなしにしている本を収めたりするので部屋が綺麗になります。
おすすめです(笑)

openmp サンプル

//並列化
static void func_pararel_test()
{
	//時間測定
	auto start = chrono::system_clock::now();
	auto end = chrono::system_clock::now();
	chrono::duration<double> elapsed_1, elapsed_2;

#pragma omp parallel		//コアの数だけ実行される
	{
		printf("parallel\n");
	}

	const int size = 10000;
	array<char,size * 10> data;
	int i;
	for (int loop_num = 0; loop_num < 10; loop_num++)
	{
		start = chrono::system_clock::now();
		{
			#pragma omp parallel for
			for (i = 0; i < size; i++) 
			{
				for (int j = 0; j < 10; j++)
				{
					data[i*j] = sin(i*j);
				}
			}
		}
		
		
		end = chrono::system_clock::now();
		elapsed_1 = end - start;

		start = chrono::system_clock::now();
		{
			for (i = 0; i < size; i++) 
			{
				for (int j = 0; j < 10; j++)
				{
					data[i*j] = sin(i*j);
				}
			}
		}
		end = chrono::system_clock::now();
		elapsed_2 = end - start;

		cout << elapsed_1.count() << ":" << elapsed_2.count() << endl;
	}
}

C++11 よく使いそうな機能

#include "stdafx.h"

#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <chrono>
#include <boost/algorithm/string.hpp>
#include <boost/tokenizer.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/thread.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>

using namespace std;

class Someone
{
public :
        Someone()
        {
            cout << "コンストラクタ" << endl;
        }
        ~Someone()
        {
            cout << "デストラクタ" <<  endl;
        }

        void Update()
        {
            cout << "アップデート" << endl;
        }

};

static void func1()
{
    string message = "This is a pen";

    // 文字列messageを空白文字で区切ってvに格納
    vector<string> v;
    boost::algorithm::split(v, message, boost::algorithm::is_space());

    // vの要素を"-"で結合して表示
    cout << boost::algorithm::join(v, "-") << endl;

}

static void func2()
{
    string str1 = "this   is a   pen";

    // デフォルトでは、区切り文字(空白とかコンマとか)で分割する。
    typedef boost::tokenizer<> tokenizer1;
    tokenizer1 tok1(str1);

    for (tokenizer1::iterator it = tok1.begin(); it != tok1.end(); ++it)
        cout << "TOKEN: " << *it << endl;


    string str2 = "20020903";

    // 4文字、2文字、2文字に分割してみる。
    const int offsets[] = { 4, 2, 2 };
    boost::offset_separator ofs(offsets, offsets + 3);

    typedef boost::tokenizer<boost::offset_separator> tokenizer2;
    tokenizer2 tok2(str2, ofs);

    for (tokenizer2::iterator it = tok2.begin(); it != tok2.end(); ++it)
        cout << "TOKEN: " << *it << endl;


}

static void file_controle()
{
    namespace fs = boost::filesystem;

    // ディレクトリ作成
    fs::path dir("my_dir");
    fs::create_directory(dir);

    // ファイルを開いて書き込みー
    // ディレクトリ名とファイル名の結合は / 演算子で
    fs::ofstream f(dir / "test.txt");
    f << "Hello!" << endl;
    f.close();

    // カレントディレクトリのファイル一覧してみよう
    fs::directory_iterator end;
    for (fs::directory_iterator it(fs::current_path()); it != end; ++it)
    {
        if (fs::is_directory(*it))
            cout << "D ";
        else
            cout << "F ";
        // leaf() パス情報を切って、ファイルの名前部分のみ取り出し
        cout << it->path() << endl;
    }

}

class urger
{
    typedef boost::mutex::scoped_lock lock;
    volatile bool                     end_flag;
    boost::mutex                      ef_guard;
    boost::condition_variable_any     exitRequest;

public:
    urger() : end_flag(false) {}

    // スレッドのメインルーチン
    void u_main()
    {
        // 基本的に無限ループしておく
        for (;;)
        {
            lock lk(ef_guard);
            if (end_flag) break;

            // 現在の5秒後の時間を計算
            boost::xtime xt;
            boost::xtime_get(&xt, boost::TIME_UTC_);
            xt.sec += 5;

            // 終了通知を待ちます。ただし5秒たったら待ち解除
            if (exitRequest.timed_wait(lk, xt)) break;
            else cout << "\n何か書くのじゃー!: " << flush;
        }
    }

    void exit()
    {
        // 終了を通知します。
        lock lk(ef_guard);
        end_flag = true;
        exitRequest.notify_one();
    }
};

static void thread_test()
{
    // 催促スレッド起動
    urger u;
    boost::thread thr(&urger::u_main, &u);

    // 入力待ち
    cout << "何か書いてね: ";
    string str;
    getline(cin, str);


    // 入力が終わったら、終了して欲しいことをスレッドに通知
    u.exit();

    // 催促スレッドの終了待ち
    thr.join();

}

static void xml_read()
{
    //deleteのいらないポインタ
    shared_ptr<Someone> ptr(new Someone);
    shared_ptr<Someone> ptr2 = make_shared<Someone>();  //こっちのほうが早い

    const string xml_file_name = "./conf.xml";

    //xmlファイルが存在するかチェック
    const boost::filesystem::path xml_path = xml_file_name;
    boost::system::error_code error;
    const bool result = boost::filesystem::exists(xml_path, error);
    if (!result || error) {
        std::cout << xml_file_name << " ファイルがない" << std::endl;
        return;
    }



    //xmlファイルの読み込み
    boost::property_tree::ptree xml_root;
    read_xml(xml_file_name, xml_root);  

    //要素を単体で取得
    boost::optional<std::string> str = xml_root.get_optional<std::string>("conf.gmm_history");
    int param = boost::lexical_cast<int>(str.get());

    //子構造になっている要素を取得
    BOOST_FOREACH(const boost::property_tree::ptree::value_type& child, xml_root.get_child("conf.values")) {
        const int value = boost::lexical_cast<int>(child.second.data());
        std::cout << value << std::endl;
    }

    //属性を取得
    if (boost::optional<int> id = xml_root.get_optional<int>("conf.data.<xmlattr>.id")) {
        std::cout << id.get() << std::endl;
    }
    if (boost::optional<string> name = xml_root.get_optional<string>("conf.data.<xmlattr>.name")) {
        std::cout << name.get() << std::endl;
    }
}

static void func_random()
{
    mt19937 rand;

    //ランダム生成
    for (int i = 0; i < 10; i++)
    {
        cout << rand() << '\n';
    }

    //指定した範囲の整数で出力
    uniform_int_distribution<int> dist(1, 6);
    for (int i = 0; i < 10; i++)
    {
        cout << dist(rand) << '\n';
    }

    //指定した範囲の実数で出力
    uniform_real_distribution<double> dist_real(-100.0, 100.0);
    for (int i = 0; i < 10; i++)
    {
        cout << dist_real(rand) << '\n';
    }
}

static void func_auto()
{
    //型名 自動推論
    auto x = 5;
    auto y = 3.5f;
    auto z = sin(3.14);

}

static void func_loop_range()
{
    int scores[5] = { 10, 20, 30, 40, 50 };

    //配列の最初から最後までを出力
    for (const auto score : scores)
    {
        cout << score << '\n';
    }

    //begin()、end()関数があるのら使える
    vector<int> v = { 1, 2, 3 };
    list<double> li = { 5.0, 6.0, 7.0, };
    string str = "testtest";

    for (auto n:v) 
    {
        cout << n << endl;
    }
    for (auto x : li)
    {
        cout << x << endl;
    }
    for (auto ch : str)
    {
        cout << ch << endl;
    }

    Someone obj1, obj2;

    vector<Someone> some_vec;
    some_vec.push_back(obj1);
    some_vec.push_back(obj2);

    //コピーを避けるために参照
    for (auto& o : some_vec)
        o.Update();

}

static void func_ramda()
{
    vector<int> v = { 0, 1, 2, 3, 4, 5 };

    //coun_if の引数で関数ポインタを渡す必要がある
    //ラムダ式を使えば、新たに関数を作成しなくて良い。(コードから探す必要がない)
    size_t x = count_if(v.begin(),
                        v.end(),
                        [](int n){ return n % 2 == 0; }     //ラムダ式
                       );

    //ラムダ式はこの形
    //[]()->T{}

    auto Square = [](int n){return n*n; };
    cout << Square(9) << endl;
}

static void func_class_enum()
{
    enum class Team {RED,WHITE};    //整数型に変換されない

//  int a = RED;//これができない
}

static void func_array()
{
    //配列の新しい記述方法
    //size() at() begin() end() fill()などのメンバ関数を持っている
    array<int, 100> ar;

    for (int i = 0; i < ar.size(); i++)
    {
        ar[i] = i;
    }

    array<int, 5> a = { 1, 2, 3, 4, 5 };
    array<int, 5> b;

    b.fill(100);    //要素をすべて100にする。
    a = b;          //要素コピー
    a[0] = 0;
    for (auto n : a)
    {
        cout << n << endl;
    }
}

//便利な関数
static void func_some_algo()
{
    const int   a = 5, b = 10,c = 2;

    const int small = min({ a, b, c }); //最小値
    const int large = max({ a, b, c }); //最大値


    array<int, 100> arr;
    for (unsigned int i = 0; i < arr.size(); i++)
    {
        arr.at(i) = i;
    }

    //全要素の条件チェック
    const bool chk = all_of(arr.begin(), arr.end(), [](int n){return n <= 500; });  //すべての要素が条件を満たしていたらtrue

    //時間測定
    const auto start = chrono::system_clock::now();
    for (int i = 0; i < 100000;i++)
    {
        int a = 0;
        a++;
    }
    const auto end = chrono::system_clock::now();
    const chrono::duration<double> elapsed = end - start;
    cout << "経過時間 :" << elapsed.count() << "秒" << endl;

    //時間の足し算
    const chrono::minutes min(5);
    const chrono::seconds sec(15);
    const auto result = min + sec;

}


void main()
{
/*  func1();
    func2();
    file_controle();
    thread_test();
*/
    xml_read();
    func_random();
    func_loop_range();
    func_ramda();
    func_array();
    func_some_algo();

    //imgフォルダにある画像ファイルを探す
    namespace fs = boost::filesystem;
    fs::directory_iterator end;
    boost::filesystem::path fs_path = fs::current_path();
    fs_path += "\\img";

    //ファイル名の配列
    vector<boost::filesystem::path> file_name_vector;

    for (fs::directory_iterator it(fs_path); it != end; ++it)
    {
        //ファイルの名前を取得
        if (!fs::is_directory(*it))
        {
            cout << it->path() << endl;
            file_name_vector.push_back(it->path());
        }
    }
}



Unityでクソゲーつくろう

・「Unity」ってなに?

「Unity」とはゲーム制作のための総合開発環境。

簡単に物理エンジンを使った3Dゲームが作れるとあって、

「もしかして俺にもゲーム作れるかも…」と、

夢見るゲーム開発者の間で話題沸騰中なのです。

 

Unity - Game engine, tools and mulitplatform

↑公式ページからダウンロードできます。

 

f:id:tomex-beta:20140106113429j:plain

見た目はこんな感じ。

ね?簡単そうでしょ?

 

 

 

 ・とりあえず作ってみた

公式ペーシのチュートリアルを参考に、ブロック崩し的な何かを作ってみました。

 

ブロックくずし  操作方法 : キーボードの左右キーでラケットを操作。

ボール同士がぶつかって静止したり、ありえない方向に飛んで行ったりするのが

なんとも言えない笑いがこみ上げます。

 

やったことと言えば、四角形を配置して、ボールやラケットを動かすために

ちょちょいとスクリプトを書いたくらいです。

あれほど面倒くさかった、当たり判定と反射の処理を勝手にやってくれる!

物理エンジン万歳!

 

 

・続いて3Dモデルを動かしてみた。

Unityのまた凄い所として、 Asset Storeというのがあります。

これは3Dモデルやらエフェクトやら、なんか色々あるらしいです。

AssetStoreにある物は商用としても利用できるみたい。

便利な世の中になったんやで・・・

 

Unity Web Player | car 操作方法 : キーボードの上下で前後の動き。左右でハンドル。

 

・・

・・・

・・・うん。すまない。壁を突き抜けるんだ。

今度からちゃんとします。

 

 

 

 

・他にも良いところ

作った作品はhtml上で実行できる所も素敵です。

これならすぐに見てもらえることができます。見てもらうの大事!

DropBoxに公開ファイルとして置けば、

サーバーとか用意しなくても、ブログからリンク貼れます。

 

 

 

 

【Unity】素人が7日間クソゲーを作り続けてわかったこと – uinyan. com

参考にさせて頂きました。有難うございます。

ニンテンドー2DSの狙い

びっくりしましたね。何かのジョークだと思いました(笑)

 

任天堂、「ニンテンドー2DS」欧米で発表 3D機能省く Wii Uは値下げ

http://www.itmedia.co.jp/news/articles/1308/29/news036.html

特長としては

・販売は欧米のみ

裸眼立体視の廃止

・折りたたみ機構の廃止

・値段は129.99ドル(3DSは169.99ドル、LLは199.99ドル)

 

 

発表されてからTwitterでは、賛否両論(否の方が多かったw)

様々な意見が飛び交っていました。

 

話題沸騰中のニンテンドー2DS(笑)なのですが、

任天堂大好きな自分から見ても、これは製品としてダサい。

「なんでこんなん作ったん?」という疑問。

 

そして色々と調べている内に、

欧米ならではの事情と任天堂の戦略が見えてきました。

 

 

・市場としての特殊性

欧米のゲーム機本体の売上には特徴があります。

それは新型が出ても旧型のハードが売れ続けること。

DS->3DS, PS2→PS3、XBOX→XOBX360

といったハードの世代交代がとても遅いんですね。

 

http://wikiwiki.jp/gamehard/?%A5%A2%A5%E1%A5%EA%A5%AB#s5347976

より

2005年の北米でのゲーム機売上データから抜き出してみると

    GBA   NDS  

年間  4260K 2430K  

ちょ・・・・GBA売れすぎやろ…

DSの発売日が2004年の11月だったのですが、

旧型のGBAが倍近く売れちゃってます。

 

・旧ハードがなぜ売れる。

値段が安いから。

欧米では日本とは比にならないくらいの経済格差があります。

ゲームをやりたいけれどそれほどお金を掛けられない、

という層が結構な数いまして、

それらの人たちが値段だけを見て、旧ハードを買っているそうです。

値段が高くてもハイスペックのハードを選ぶ傾向のある日本とは正反対です。

というか切実な問題です。 

 

2DSはスペックを落とした分、値段は下がっています。

とにかく安くゲームがやりたい!という人たちに向けた商品なのですね。

 

 

・初めてゲーム機を手に取る子どもへ

2DSは「ポケットモンスターX・Y」と同時に発売されます。

ターゲットは、まだゲーム機は持ってないけどポケモンに興味をある子供、

親が子供にゲーム機を買い与える時に、値段が安いことは一番のポイントに

なるんじゃないでしょうか。

「なにこのグラフィックwwwwしょぼいwwwww」

「3D廃止とかwwwwニンテンドー\(^o^)/オワタwwww」

とか小さい子は言わないでしょうしね。

 

 

最初はうーんと思いましたけど、

任天堂のはっきりした戦略が見えてきました。これ、売れるでしょ。

 

 

それにしても、「ニンテンドー2DS」という名前は、

どうにか出来なかったんですかねぇ(笑)