ゲームプログラマ志望が福岡で叫ぶ 『絶望』 -18ページ目

ゲームプログラマ志望が福岡で叫ぶ 『絶望』

プログラマーになりたい!!!!! あ、風のうわさで聞いた最近若者で流行っているトゥイッターなるものを始めてみました (・ト・) @toshi_desu_yo

一度でいいからお昼に1000円のランチタイムをしてみたい。
そんなブラックトンジです。


さて、本日は。。。 目が疲れた・・・(´・ω・`)

パソコンのしすぎか、本の読み過ぎか、、、
どちらにせよ今日は目が超絶に疲れて仕事が思うように進まん・・・(´Д⊂ヽ (仕事が進まないのはいつもどおりだけどね)


目がつかれるのは、

至近距離でモニターや本を見ることで、光の屈折を調節してくれるレンズ的存在(水晶体)がしきりっなしに働くため、目の筋肉が疲労し、それが ”目が疲れる” という現象になる
そうです。

PCモニターのように発光物をずっっっっと見ているとレンズがさらに働くため、疲れが倍増するっぽいですぞ。
テレビやモニターはできるだけ輝度を下げて作業することをオヌヌメします(・´з`・)

さらに夜になると目が休もうとしているのに、無理やり酷使することになるので疲れやすくなるそうです。


しかし友人に自分より遅くまでゲームをし、自分より暗い部屋でパソコンをいじり、自分より不健康な生活をしている方が健康診断をした所、

視力が1.8というマサイ民族級でした。

常日頃から2キロ先の獲物でも狩っているのだろうか・・・

目の強弱は遺伝が強く関係しているのではないかと思います。
小さい頃から眼鏡の子もいるしね。


ということは、、、、
顔も悪い、体も悪い、頭も悪い、さらには目も悪い俺は劣等人種、ホモサピエンス下において食われる側の男ということですか。
なるほど。。生まれた瞬間から負け組であるということですな!!


はっはっは!

くそがあああああああああああああああああああああああああああああああああああ!!


なにか1つぐらい身体的に長所を持ちたいですよね(´Д`)

背が高い、指が長い、目が良い、耳が良い、嗅覚がいい、味覚がいい ←自分的にはこれが一番欲しい


味覚が良いって素晴らしいと思うんですよね。
料理人も憧れの存在の1つで、自炊をシュピドゥバと行う人は後光がさしてますね。
輝いてる!!超輝いてるよ!!!

僕、ちょっとした夢があるんです(´・ω・`)


それは、ある高級料理店で料理を食べた時




俺:『ん.....? 
 この”イタリア産トゥマァトゥーを使用したエスカルゴとアワビの夏野菜ピッツァ ~山と海の甲殻類の戯れ~” という料理、ほのかに独特な塩味がするな・・・
 伯方の塩が少量入ってるかな? 』

シェフ:『 な・なんと我が4000年に伝われし秘伝の隠し味を一口で見破られるとは....!
 その神に愛されし舌・・・ 是非とも我が厨房に欲しい!!

俺:『 すいませんシェフ。。。
 御気持ちはとても嬉しいのですが、僕の舌が必要な人が世界で幾千とおられるのです。。
 僕は1つの厨房にとどまることは出来ない。
 人々が僕を望んでいる限り・・・

 料理、とても美味しかったですよ ^^ 』

シェフ:『 ・・・残念だ。。。
 しかし、その舌に料理人として敬意を払わせてもらう。ありがとう。 』

俺:『ふっ・・ いえ。。』





俺、かっっっっっっっっっけええええええええええええええええええええええええええええええぇええええええええええええええええええええええええええええええええええええええええええええ!!!!!!!!!

かっこ良すぎるよブラックトンジすわぁ~ん!つД`)・゚・。・゚゚・*:.。..。.:*・゚

異性が一緒に食事をしていたら、


これ、惚れてまうやろ。
これ、惚れてまうやろ。
これ、惚れてまうやろ。

(>’A`)>ウワァァ!! 神に愛されしタンが欲しいよぉぉおおぉ!! 

【結論】
焼肉食べたい
朝通勤中に就活生と思わしき大学生らがスーツを着て説明会、面接会場に向かってるのを見ると、俺ももうちょっと頑張っとけばよかったなぁーと自責の念にかられますねー

そういえば私ブラックトンジもスーツを着て仕事に向かっております。

通常プログラマー等の社内で引きこもって作業を行う職業は私服で仕事をするのが一般的ではないでしょうか?


実は働いているところも『全然私服で来ていいよー』 とおっしゃってくれてるのです、、、、、、が...!!!!



俺は俺の独断で俺の為にスーツを着る( ゚д゚ )

昔からスーツを着こなすお兄さんおじさんをみては、仕事をする大人をというカンジがするのか何故か かっけーなぁー! と尊敬の眼差しを送っている自分がいまして、

僕の中では 仕事 = リクルゥーツスートゥー という魔の方程式が確立されているのでありまする。

だから仕事に気持ちを入れるつもりでもわざとスーツを着て行ってるのですわ-。
ちなみに灼熱極熱夏夏夏でもネクタイ締めて上着も着ていってました!!!

はい!!!

死ぬほど熱いです!!!!!!ι(´Д`υ)

仕事に役所の人間みたいに一年中スーツを着たくない人、フランクな環境で仕事をしたい方は海の家でやきそばを作るか、プログラマーをオススメします。


【結論】
お酒飲みたい。
HAHAHA!!!

我が愛しのマックボォッの充電器を忘れてもうた!!!
後バッテリー6%・・・


これが朝出てくる時、準備の確認を怠った物への体罰か・・・(´Д`)

1分で顔を洗い、1分で物を詰め、1分でパンツを履き、一分でスーツを着こむ!!


我がワンミニッツオペレーション!!がまさかの失敗を及ぼすとは・・・



今日はおとなしく数学の参考書を漁るか・・・・


ゲームプログラミングのための3Dグラフィックス数学/ボーンデジタル
¥7,350
Amazon.co.jp


これやってます。

ちょー むずいんですけどぉ~! 義務教育放棄した結果がこれだよ・・・

しかし、行列の変換のところは勉強になる。
後、数学だけではなく3Dプログラミングにおける必須な中級者向けのシェーダー関連も詳しく乗っておりプログラム技術も同時に上げることが出来る。
後は物理学、シャドウマップなどえらい3Dプログラム関連が充実してる。

一冊で結構力つくんじゃないですかな!


高いだけはあるなぁ~ってことか。

しかし、むずい。むずすぎる。  むずむずする。


美人でおぱいが大きくてメガネが超いやらしい家庭教師が欲しい(願望)


今日一日はおとなしくするわー



今日財布見たら150円も入ってたので、
安定と信頼のメロンパンナちゃんをいやらしく食べようかと思います!!!!
う~ん。。

我がiPod touch( 第四世代 )をIOS6にしてから
App Storeアプリを起動すると重すぎる・・・(´Д⊂ヽ
それはもぉ パナイ。ぱないっす。



                        
※この画像に悪意はありません



実際には 
AppStore 起動 → 検索 → 入力 → ロード... → 落ちる。
以後ループ


なんじゃそら( ゚д゚ )

もうちょっと! もうちょっとなのに!!
なぜこう後ギリギリの所で落ちるのか。

後もうちょっとだから...! と何回も起動するが、、だめ。
これはもしかしてAppleのAppStoreをクリックさせまくって広告料をふんだくるさ作戦か何かか?

ネットで検索するとiPod touchだけの症状のようですねぇ.... 
そして日本語検索した場合に落ちる可能性が高い... と。。。

なぜ?
確かに日本語だと少しデータ量は多いとは思うが、腐っても去年のiPod。
そんなちゃちなことで落ちるはずは無いと思う。

恐らく検索機能で何らかのバグが起こってるのでは無いのだろうか。


でも、
新しくなって検索時の画像も大きくなり、操作性も上がり、確かに負荷は高くなったと思う。

やっぱりデータ量の問題かぁ?
でもそしたら3GSとかはもっと悲惨な目にあってるだろう・・・

逆にiPod touchだけこの症状が出るならば
今後出てくるであろうアップデートで治ると思われ!


ダウングレードもめんどくさいのでパソコンの前で正座して待つしかないようだ!( ゚д゚ )


+   +
    ∧_∧  +
(0゚・∀・)   ワクワクテカテカ
(0゚∪ ∪ +
と__)__) +



後、IOS6にして特に利点は無さそうなので、様々なバグが修正されるまでIOS5の方が良かったと今になってしみじみ思う。


はい。
ちゃんとプログラムのことも書いていこうと思います。

本日はコンストラクタ。
c++ にかぎらずオブジェクト思考プログラミングではおなじみですね。 はい。

自分のクラス名と同じ名前の戻り値なしの関数を記述 → コンストラクタになります。


Class TestA
{
public:
// コンストラクタ
TestA() {}
}



クラスが作成された時に呼び出されるコンストラクタ。
正確にはクラスの実態が作られた時に呼び出されます。

つまり

TestA* pTestA;




この状態ではまだコンストラクタが呼ばれません。
入れ物を作っただけで実態はまだ作成してないからですね。

TestA* pTestA = new TestA;


実態を作ってやることで初めてコンストラクタが呼ばれます。

実態を作ってあげる事をインスタンス化といいます。

クラスの中にあるメンバ変数をインスタンス変数と呼ぶのは実態が作成された変数という意味があるからでしょうかね。



コンストラクタ
コピーコンストラクタ

があり、特殊な初期化方法で、

代入演算子



がある。
コンストラクタは上に記述してある通り、
実態を作成した時に呼び出される関数( 引数は幾らでも書いて良い )

コピーコンストラクタと代入演算子は引数が1つしかなく、
その引数も自分の参照を渡してあげる形になります。



【コンストラクタ】

コンストラクタは実態が作成された時に自動的に呼び出される関数。
つまり初期化に向いているわけですね。一々

void Initialize()

という初期化関数を別に作成しなくても良くなるということです。

もし、実態を作成したと同時に変数の初期化も行いたいならば、普通の関数のように

class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int* mpNumber;

public:
    // コンストラクタ
    TestA( int id, int* pNumber )
    {
mID = id;
  mpNumber = pNumber;  // アドレスの代入
    }
};

とすれば良いです。


呼び出すときは


// int型のポインタ
int* pNumber = new int;  
*pNumber = 10;

TestA test1( 1, pNumber );

または、

TestA* pTest1 = new TestA( 1, pNumber );

と  ( )  を付けて、先頭から順番に型にあった引数を記述してあげるとおk。

今のままだと、必ず引数を記述しなければクラスを作成できないので、引数の要らないコンストラクタも作っちゃいましょう。


class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int* mpNumber;

public:
    // コンストラクタ( 引数なし )
    TestA()
    {
        mID = 0;
        mpNumber = NULL;

    }

    // コンストラクタ( 引数あり )
    TestA( int id, int* pNumber )
    {
mID = id;
   mpNumber = pNumber;  // アドレスの代入
    }
};

これで引数有り無し両方対応になります。

int* pNumber = new int;
TestA test1;         // 引数なし
TestA test2( 1, pNumber );    // 引数あり


  ↓

test1.mID は 0
test1.mpNumber は NULL

test2.mID は 1
test2.mpNumber は pNumber のアドレスが入っている


他にも


class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int* mpNumber;

public:
    // コンストラクタ( 引数なし )
    TestA()
        : mID( 0 )
        , mpNumber( NULL )

    {}

    // コンストラクタ( 引数あり )
    TestA( int id, int* pNumber )
: mID( id )
, mpNumber( pNumber )
    {}
};

としても、最初に書いたクラスと全く同じ動きをします。メンバ変数に引数の値が入るわけですね。

こちらのほうが 初期化しとるで!奥さん!!って感じがするのではないでしょうか。

最初のクラスは少し無駄があります。
そちらは最後のほうで! ( 特に伸ばす意味は無い )




【コピーコンストラクタ】

class TestA
{
public:
    // コンストラクタ
    TestA() {}

    // コピーコンストラクタ 
   TestA( const TestA& cpy )   { /** 処理を自分で記述 **/ }
};


通常の使い方としては引数のクラスからただ変数をコピーするために使用します。

class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int mNumber;

public:
    // コンストラクタ
    TestA( int id, int number )
           : mID( id ), mNumber( number )
    {}

    // コピーコンストラクタ
    TestA( const TestA& cpy )
    {
// 代入して変数をコピー
    mID = cpy.mID;
    mNumber = cpy.mNumber;
    }
};

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TestA test1( 1, 10 );
TestA test2( 2, 100 );

test2( test1 );  // コピーコンストラクタが呼び出される

よって、test1 と test2 の変数の値は一緒である。


または、


// 何かしら処理をする関数
void Func( TestA a ) { ,,, }
~~~~~~~~~~~~~~~~~~~~~~~~~

TestA testA( 1, 10 );

// 関数呼び出し
Func( testA );



これもFunc関数に入る時にコピーコンストラクタが発生します。


以上。
すごく単純です... ///


他に気をつけるところは const を書かなければエラーになる所。
コピー元が変更されないように記述しないといけない。


実は本日, XCodeでc++ を記述している時にこれを忘れていて、 

『コンパイルが通らねえ!! ぜってぇ間違ってねぇのにふざけんじゃねーぞ!!Appleぶっ壊れたか!? カチカチカチカチカチ!!!! ← コンパイルボタンを連打する音 』


と自分のミスなのにXCodeを散々馬鹿にして途中でこれに気づき、XCodeにブラックトンジ家に伝わる108の土下座の1つバックトゥーゲザーフューチャーをした経緯があったので、
二度とこんなツマラナイミスでXCodeちゃんを怒らせないようこの記事を書こうと思ったわけでありまする(´・ω・`)

いや、ほんと申し訳ない。。。あまつさえ天下のApple様をも愚弄してもうた。。



【代入演算子】

コピーコンストラクタとほぼ同じです。

class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int mNumber;

public:
    // コンストラクタ
    TestA( int id, int number )
           : mID( id ), mNumber( number )
    {}

    // 代入演算子
    void operator = ( const MyVector& cpy )
    {
// 変数をコピー
     mID = cpy.mID;
    mNumber = cpy.mNumber;
    }
};



動きとしては

TestA test1( 1, 10 );
TestA test2( 2, 100 );

test2 = test1;     // 代入演算子が呼び出される。

  ↓

test2.mID は 1
test2.mNumber は 10 が入っている。



operator = というのは = の機能を自分で書いちゃう。 ってものです。
他にも +, -, *, / ....... と様々な機能を自分で記述できますが、今は特に要らないです。





普通にクラスを使用していて、コピーコンストラクタや代入演算子を書いていなくてもクラスを関数に渡したり = で代入処理をしていた場面があると思います。


何故かというと、自分でコンストラクタ、コピーコンストラクタ、代入演算子を記述していないと

コンパイラが勝手に上記3つを作成してくれるからです。
しかもコピー系はデフォルトで中身をコピーしてくれます。

なんという便利機能... ( ゚д゚ )
脱帽やでぇ。。。  はい、僕はただのめんどくさがり屋です。



え? なら自分で書かなくてい~じゃーん!! 
クラスめんどくせーからいーやー! ちゃー!!

となります。

確かに普通に使用する分では良いですが、メンバ変数にポインタを書いていると話は別になります。


【例えが悪いけど許して例】

class TestA
{
private:
    /** メンバ変数 **/
    int* mpNumber;

public:
   // コンストラクタ
   TestA()
   {
        mpNumber = new int;
        *mpNumber = 1;
   }

   // デストラクタ( delete時に呼び出される関数 )
   ~TestA()
   {
       // ポインタを削除。
  delete mpNumber;
   }
};


デストラクタで引数で貰ってきたポインタ変数を削除する記述を書くとします。
デストラクタは自分が削除される時に自動で呼び出される関数です。
終了処理を書くと便利。
~TestA() {  /** 終了処理 **/ }



そして

// クラスを引数に持つただの関数
void Func( TestA a ) { /** なにかしら処理を書く **/ }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// コンストラクタが呼ばれる
TestA test1;

// 関数を呼び出す。 デフォルトコピーコンストラクタが呼ばれる。
Func( test1 );


と、書いた場合、test1のmpNumberはぶち壊れます。
そらもう、跡形もなく。。


なぜかというと、
Func関数に入るときコピーコンストラクタが発生して a が生成されるわけです。この時 test1 の変数 mpNumber アドレスa にコピーされます。
で、Funcが終了した時、は消えるのでデストラクタが呼ばれます。

はい、a mpNumberは抹殺されますね。


test1
a同じmpNumberアドレスを保持していたので、

test1
mpNumberも抹殺されます。
ぐわあぁああああああああああああ!!!!!


これは大変危険きわまりない行為ですね。
デバッグ中にイラッ☆とするバグ、メモリ参照エラーが発生します。
わかりにくいバグの1つですね。


なので、コピーするならば

class TestA
{
private:
    /** メンバ変数 **/
    int* mpNumber;

public:

   // コンストラクタ
   TestA()
   {
        mpNumber = new int;
        mpNumber = 1;
   }
   // コピーコンストラクタ
   TestA( const TestA& cpy )
   {
      mpNumber = new int;         // メモリを取り
        *mpNumber = *( cpy.mpNumber );  // 値を代入( 安全 )
   }

   // デストラクタ
   ~TestA()
   {
// 削除されるのは自分だけが保持しているアドレス
  delete mpNumber;
   }
};



と書くと、うまくいきます。
コピーコンストラクタを自分で記述する判断はポインタの有無で決めてもいいと思います。

他にもスマートポインタという方法もあります。
これもいつか書いてみたい。




最後に

class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    int* mpNumber;

public:
    // コンストラクタ
    TestA( int id, int* pNumber )
    {
mID = id;
   mpNumber = pNumber;  // アドレスの代入
    }
};


この書き方を使用するとなぜ少し無駄になるかというと、
例えば、

class TestA
{
private:
    /** メンバ変数 **/
    int mID;
    TestB mTestB;

public:
    // コンストラクタ
    TestA( int id, TestB& testB )
    {
mID = id;
   mTestB = testB;  // TestBのコピーコンストラクタが呼び出される
    }
};


と新たにTestBを記述して、TestAがそれを保持していた場合を考えます。
このコンストラクタの流れは、

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
① TestAが呼びだされる。
② mTestBのコンストラクタが呼ばれる。
③ TestAのコンストラクタが呼ばれる。
④ mIDの代入。
⑤ mTestBのコピーコンストラクタが呼ばれる。
⑥ 終了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

明らかに ② が要らない。
最初からコピーコンストラクタで呼び出したらいい。

後、メンバ変数の順番に上から記述すると多少高速になるみたいです。

ここは個人の好みだと思いますが初期化処理の記述を少し別にすることで、コードの明瞭性も上がるのではないでしょうか。


以上ですm(_ _)m

後は explicit というコンストラクタをちょっと特殊にする記述もあります。
また今度書いてみたいどえす。



単純な凡ミスに数十分も躓いてるとか、そらないわなぁ~(´Д`)
以後気をつけたい。