読者です 読者をやめる 読者になる 読者になる

明日への断片

ゲーム制作やプログラミング関する記事を中心に更新していこうと思います。

76欠片目:STL~vector応用編~

 こんにちは。バイト代が入ったので念願だったクトゥルフ神話TRPGのルルブを購入したvoidです。
る↑るぶ(旅行雑誌)ではなくル→ルブ(ルールブック)です。

友人にトゥルフ神話TRPGを教えてもらって興味を持ち、リプレイ動画でハマってしまい、遂に買ってしまいました。
f:id:yasu-game-void:20170425232824j:plain

5800円(税別)...結構なお値段でしたが、パラパラ読んでみてかなりいろいろ書いてあるなぁとワクワクしております。
勉強の合間の息抜きに読んでウハウハしていたいと思います。

あと、約8000円のDirectXの参考書籍の注文もしました。届いたらそちらの方も勉強し始めていきたいと思います。


残りのお金は就活用に貯金です。
お金があるとつい使ってしまうので...使わないようにしなくては...


さて、本題です。昨日に引き続きSTLvectorやっていきます!

目次



反復子(イテレータ)

 イテレータvectorのみならず、コンテナ全般に対して発揮できる機能です。
コンテナは配列と違って動的にメモリの確保を行ってくれるということを機能は勉強しましたね。
そうなると、全要素にアクセスする場合、参照するデータの数が変動します。

そんな時に活躍してくれるのが、イテレータです。
イテレータとはコンテナの要素を指すポインタのようなもので、
そのコンテナの要素全てにアクセスすることが容易になります。

宣言(インクルードやstdは省略)

vector<int>::iterator itr;
// コンテナ名<型名>::iterator 反復子;

実際に使われるときは、for文やwhile文などのループ文でコンテナの中身1つずつにアクセスするときに使われることが多いでしょう。

// 4/26(修正:v.end()がv.begin()になっていたので修正)

for(itr = v.begin(); itr != v.end(); itr++)
{
    // 値を全て0にする
    *itr = 0;
}

vectorメンバ関数が唐突に出てきました。
が、非常に単純な単語ですし、for文の仕組みが分かれば何となく意味は分かりそうですね。

// コンテナの先頭要素を指します
v.begin()

// コンテナの末尾要素『の次』を指します
v.end()

// 次の要素へ移動します
itr++

つまり、
コンテナの先頭からスタート!
今の要素が末尾の次じゃなければ(末尾まで)繰り返す!
次の要素を順番に見ていく!

という感じです。

アルゴリズム関数

 ざっくりいうと、vectorの中身で、特定のデータの数を調べたり、ソートしたり、順番をひっくり返したりできる便利機能がたくさんまとめられたものです。(超ざっくり)

ここでも、データの位置を返す時にイテレータが使われたりしているのでイテレータは大変便利です。

詳細はサンプルコードにて。

サンプルソース

イテレータの便利さがなるべく伝わるよに頑張って作ったサンプルです...まだサンプル感が足りない...


実行結果:
f:id:yasu-game-void:20170426010325j:plain

次回予告

まだ確定ではありませんが、今日の授業で作っていたDirectXTKのスプライト機能をクラス化して使いやすくしたものが完成したら公開&解説的なものをできたらしようと思います。

次回予告を書くと、何書こう...て迷うことがなくなるので結構いいですね。ただし内容が縛らられてしまうので一長一短といったところでしょうか。


本日は以上。ではまた!

(Unityやって、ルルブ読んで、あと... <<現在am1:00>> )



 

75欠片目:STL~vector基礎編~

 こんにちは。もうすぐ健康診断があるvoidです。気になっている症状の欄にいくつか当てはまる項目があるので少し不安です...

f:id:yasu-game-void:20170425015535j:plain
本日はSTL(StandardTemplateLibrary) のうち、vectorの基礎についてです。
※)画像に特に意味はありません。

◆==目次==◆



vectorとは

 C++の標準テンプレートライブラリ(StandardTemplateLibrary)の機能の一つに、vectorというものがあります。

標準テンプレートライブラリとは、頻繁に使われるデータ構造やアルゴリズムなどを使えるようにC++で標準で用意してくれているライブラリの事です。

そのデータ構造の内、一つの型のデータを複数まとめて入れることが出来る
コンテナクラスという、配列のようなものがあります。
 そのコンテナクラスの内、最も基本的な機能がVectorです。

メリット

 Vectorを使うメリットは何か?


先述した通りvectorはほとんど配列と同じような役割を果たします。では何が違うのか?

配列は宣言時に

int array[10];

と宣言するとint型の変数100個分のメモリを確保できますが、プログラム内で10をオーバーしていしまうとエライことになります。(具体的に言うと配列を破壊して、他の変数の値を勝手に変えに行ったりします。良く起こる超常的なバグの原因は大体こいつが原因です...)

なら最初から余裕をもって、

int array[100];

と宣言してしまえばいいではないのか?
そういうわけでもないのです。結果として13個とかしか使わなかった場合、かなりの量のメモリが無駄に確保されてしまいます。


これに対して、メモリを動的に確保してくれるのがvectorです。
vectorは配列と同じように連続したアドレスにデータを持っています。そのため、データへのアクセスも高速に行うことが出来ます。さらに

宣言

 vectorを使うには<vector>をインクルードする必要があります。
また名前空間stdを使用しているのでusing namespace std; を1度記述するか、
使用するたびにstd::を記述する必要があります。

#include<vector> 

...

std::vector<int> v;

要素を追加

 vectorの基本的な操作の一つに要素の追加があります。
vectorに要素を追加する場合は、push_backというメンバ関数を使用します。

std::vector<int> v; // vectorを作成
v.push_back(10);   // vectorに要素10を追加

要素を削除

 vectorの基本的な操作の一つに要素の削除があります。
vectorの要素を削除する場合は、pop_backというメンバ関数を使用します。

std::vector<int> v;

// v.pop_back();  データがない状態で削除を行うとエラー

v.push_back(10); // vectorに要素(10)を追加

v.pop_back();   // vectorから要素を削除

サンプルソース


どうせサンプル張るなら、もっと実用性あるものを書きたいんですけど、パッと思いつくものがなかったです。
次回はもっと実用性のあるものを...

次回予告

 次回、vectorの更なる機能に迫る応用編。乞うご期待を。


本日は以上。ではまた!

74欠片目:Unity Remoteで超簡単に実機テスト

 こんにちは。最近、毎日ブログ更新の限界を感じてきたvoidです。せっかく70回以上も続けてきたのでやめるのは惜しいですが、そろそろきりのいいところで更新ペースを変更しようと思います。


本日はUnityで開発したゲームをスマートフォン(iPhone)上で簡単に実行する方法を紹介したいと思います。

Unity Remote

手順をまとめると、

1.Unity Remote5アプリをインストール

2.Unity上で端末設定

3.実行


以上です!
ね?簡単でしょう?

詳しい設定

まず、こちらのアプリをインストール

Unity Remote 5

Unity Remote 5

  • Unity Technologies ApS
  • ユーティリティ
  • 無料

次に、iPhoneとPCをUSBケーブルで接続。

次に、Unityの設定を行います。

左上メニューバーから、[Edit]->[Project Setting]->[Editor]を選択します。
f:id:yasu-game-void:20170424000248j:plain



すると、Inspectorに以下のように表示されます。
f:id:yasu-game-void:20170424000254j:plain

Deviceの部分から接続したスマートフォンを選びます。


そして実行!
たったこれだけで、スマートフォン上で実行できちゃうんですねぇ...

注意点としては、タップとクリックは別ものなので、PC上でクリック操作出来るようにしていたものは、スマートフォン上のタップでは判定できません。逆もまた然り。





ちなみにこちらの方法は、あくまで実機上でプレイするためだけのものであり、アプリとしてリリース出来る形式にするものではありません。その場合はMacが必要になるようです。

今までMacがなければiPhone上で動かせないと思っていたので、この発見はとても衝撃的でした。
といってもやはり、リリースは出来ないのでiOS開発用にMac買いたいですね。


本日は以上。ではまた!

73欠片目:求められし力

 こんにちは。力を求めしvoidです。
プログラミング力とか。コミュニケーション力とか。

本日は、「求められし力」についてです。

求められし力

 何回同じ言葉使うんだよ。というセルフ突っ込みはさておき、「求められし力」というと何かRPGなどで世界を救うをような壮大な力かと思われるかもしれませんが、そういう意味ではありません。人間として、社会人として求められている力の事です。


というのも、本日2度目のオープンキャンパス出勤がありまして、社会人として必要な力、そして今の自分に足りていない力が一部判明したので、このブログに残しておきたいと思います。


社会人として必要な力 と一言に行ってもいくつかありますので、社会人として必要な力、社会人に求められている力を総称して社会人力とでもしておきます。



自分にまだ足りていないと感じたのは、能動的行動力、提案力です。
 前回の反省から、自分から声を出していくということに意識はしていたのですが、それでもまだ不十分だと痛感しました。講座に来たお客さんの対応を先輩にさせてしまったり、少し余裕のある時間帯に、より良い接客をするためのシミュレーションを怠っていることを先生に指摘されるまで気が付かなかったりしていました。

 能動的行動というのは決められた事を積極的にこなすだけでなく、それ以上のことを自分から見つけて行動に移していくことなんだなと今更ながらに思いました。


またそれに付随して、オープンキャンパス全体をよくしていくための提案をしていくべきだというのも感じました。今回から新体制で迎え、トラブルも多々ありしばらくはごたごたが続くとのことです。そんな中で、「ここはこうした方がいいんじゃないかないか」という提案ができる力はとても大切だと思います。

もし、自分が偉い人だったらそういうことが出来る人と一緒に仕事をしていきたいと思うと思います。
現状のレベルに満足するのではなく、さらにより良いものを目指そうとする精神は大切だと思います。


といった感じで、オープンキャンパスからも大切な事を学び取ることが出来ました。


オープンキャンパススタッフとして働く以上はオープンキャンパス自体もっといいものにしていきたいですし、そのこと自体が自分の力を高める機会にもなるのでとてもやりがいのある仕事だと思います。
これからも頑張ります!

本日は以上。ではまた!

72欠片目:開発が加速する小技

 こんにちは。1年間同じクラスで過ごした仲間に名前を忘れられていたvoidです。普段からあだ名で呼ばれることが多かったので仕方がないとはいえ、ほんのちょっとだけショックでした...

本日は、最近知ったゲーム開発の上で便利な小技(ショートカットキー等)をまとめていこうと思います。
環境はWindows10です。

ウィンドウ管理がサクサク

 まずはウィンドウの切り替えや移動が便利になるショートカットキーです。

Alt + Tab

f:id:yasu-game-void:20170421235918j:plain

Altキーを押した状態でTabキーを押すとこんな画面になります。


この状態でさらにTabキーを押すと、選択ウィンドウが1個ずつ変更され、Altキーを離すことで選択状態のウィンドウをアクティブにすることが出来ます。

メモや、ネットの記事を見ながらプログラムを組むときにウィンドウを何度も切り替えたりすることがあるのですが、いちいちマウスでウィンドウを選んだりする手間が省けるのでとても便利で時短です。

windowsキー + ↑/↓/→/←

アクティブ状態のウィンドウの位置を調整できます。
最大化、縮小、最小化、左寄せ、右寄せ...などなどの位置調整が簡単にできます。
また、ウィンドウが2つ以上ある状態で寄せ状態にすると、空きスペースに画面を分割したように、ウィンドウを開くことが出来ます。境界線をマウスで調整することができ、2つウィンドウでの内容を見比べたりするとき等には重宝します。

コピーカットを未指定で行指定

 コピーのショートカット、およびカットのショートカット

Ctrlキー + C Ctrlキー + X

これらのショートカットは有名で、ご存知の方も多いかもしれません。
マウスやキーで範囲を選択して、これらのショートカットキーで、その範囲のコピーorカットが出来ます。

 しかし、VisualStudioや、一部のテキストエディタソフトでは更なる機能を持っています。
選択範囲を指定しないで、Ctrl+C or Ctrl+Xを実行すると、カーソルが存在する行に対してコピーorカットが出来ます。

プログラムを書いていると行単位での修正がしばしばあるのですが、その度にその一行を選択するのは、非常に時間が勿体ないです。

意味...あるの?

細かい時短ではありますが、プログラム以外にかける時間は極限まで減らしておきたいのです。
あとは単に、ショートカットキーを使いこなせるとかっこいいという自己満足ですかね...
これからも、便利な機能はじゃんじゃん使っていこうと思います。


本日は以上。ではまた!

71欠片目:やるべきこと~優先順位~

 こんにちは。今朝久しぶりの満員電車でもみくちゃになったvoidです。余裕をもって早く家を出たのが裏目に出ました...時間に余裕を持たせて、混みをさけるにはもっと早く行くしかないのですかね...

積み重なるTODO

 さて、昨日から明確な目標も決まり、モチベーションがみなぎってきたのはいいのですが、目標を叶えるためにはやらなければならないことがたくさんあります。技術や知識の習得はもちろんですが、社会に出て働くための経験を磨くためにも外部のイベントにも参加していく予定です。
 
 そんなわけで、今のうちにやっておくべきことを優先順位をつけてまとめてみました。

今すべきこと 優先度
日本ゲーム大賞制作 ★★★★★∞
業界研究 ★★★★★
C++勉強 ★★★★☆
デザインパターン勉強 ★★★★☆
DirectXTK会得 ★★★★☆

ゲーム大賞の制作は言うまでもなく、現在の最優先事項でしょう。

夢は決まりましたが、その夢を叶えるためにどの会社を目指すべきなのか。それをまずは明確に決定させることで、磨いていくべき知識や技術が変わっていくので業界研究の優先度は高いと思いますし、目標は明確であるほど、やる気につながるので業界を知り、目標となる会社を早く決めることが大事だと思います。
 その他、どの会社であろうと、プログラマとして就職する上で最低限必要なものを極限まで絞るとこんな感じだと思います。

他にもやっておくべきことはたくさんあるのですが、一度に何もかもをやろうとしてしまうと破綻してしまうので、まずは優先度の高いものから達成させていこうと思います。


本日は以上。ではまた!
 

70欠片目:絶対に叶えたい夢の2つの条件

こんにちは。昔の夢は「コンピュータ関係の仕事に就くこと」だったvoidです。ゲームプログラマはまさに当てはまると思います。

f:id:yasu-game-void:20170419225115p:plain
今回のサムネ画像です。フォトショップの図形だけを使って「夢」の字を作りました。割と気に入ってます。

今回は昨日書ききれなかった、自分で解決しなければならない問題についてです。

本気度を問い直す

 最近、自分は自分の本気度に対して疑問に感じていました。本気でゲーム業界への就職を目指しているのか?本気で叶えたい夢があるのか?

 正直なところ、今までは将来についてあまり本気で考えていませんでした。ただ何となくゲーム業界に就職できたらいいなぁぐらいの気持ちでいたと思います。自分本当にしたいことが何かを見つめ直すために、今までの人生の足取りを辿ってみたいと思います。

経緯

 自分が今の専門学校に通うに至るまでの経緯はなかなか特殊で、何度思い返しても急展開だったなぁと思います...

中学卒業後は情報科の大学への進学を希望して、(それなりに)偏差値の高い公立高校に合格し、入学します。しかし、そこで人間関係を上手く築けず、学校に通うことが苦痛に感じてしまい、3か月で不登校になってしまいます。

それからは、毎日毎日、時間だけがあふれかえるように存在していました。そこで兼ねてより興味を持っていたプログラミングの勉強(C言語の勉強)を始めます。しばらく勉強を進めていく中で、初めてゲームプログラミングというものに出会います。当時はゲームを専門的に学びたいとは思っていなかったと思います。

その頃は寝ているか、ゲームをしているか、プログラミングをしているかだけの、酷い生活を送っていました...


そんな生活が1年半ほど続いた頃、このままじゃ嫌だと思い直し、再び大学に進む道を決意します。
高校中退者向けの予備校に通い、半年ほど普通の高校で習うような勉強をして、高卒認定試験(大学を受験するための資格のようなもの)に合格しました。

 ですが合格と同時に、張りつめていた緊張の糸が切れていしまったせいか、急に体調を崩してしまいます。
しばらく休養をとり、少し元気になった頃、再び勉強を再開しました。

しかし、体調も完全には回復せず頭痛や耳鳴りが続いて、勉強にも身が入りませんでした。
このままでは大学進学の道は非常に厳しいと思い始めていました。



 そんな時、その予備校のスタッフの方に提示してもらった選択肢が、今通う専門学校への進学という道でした。
勉強を続けていた時期も、ちょくちょくプログラミングは触っていて、そのころにはいろんなサイトを見ながら自分でミニゲームを作り始めていました。そんな時、ゲーム開発を専門的に学べる学校があるということを教えていただきました。

始めは、大学進学の道が捨てられず迷っていましたが、オープンキャンパスや体験入学を経て、
「ここでゲーム作りのプロを目指すのも面白そう」
と思うようになりました。

 冒頭でも書いたように、自分には具体的な夢はなく、漠然とした理想や、ただ何となくやりたいことが存在しているだけでした。

昔から自分の原動力となるのは、「今のままじゃ嫌だ」だったり、「こうはなりたくない」といった負の動力ばかりで、「これになりたい」、「この夢を叶えたい」という正の動力はあまりありませんでした。しかし、業界の人や先生、先輩方といった色々な人の話を聞く中で、明確な目標や夢がないと人間は本気になれないんじゃないかと最近思うようになりました。

夢の条件

 自分のなかで、「夢」としての条件が2つあります。
1つは、『自分がやりたいこと』です。
これは、中学2年生の職場体験が影響しています。と言っても、希望職種はなんだかんだで断られてしまい、最終的に友人と一緒に大学に行きました。

職場体験:大 学 の 教 授
というわけです...

中々にインパクトのある貴重な体験だったと思います。
そのとき、職場体験としての質問をしていく中で、教授のお話から『好きなことだから続けられる』ということを聞いたのが印象に残っています。その時から、自分の好きなもの、好きなことを使って仕事ができることに魅力を感じ、自分もそうなれるようにしたいと思い、漠然と「好きなことを仕事にしたい」という理想が生まれました。


そしてもう1つは、『自分にしかできないこと』です。自分と同じような経験を積んで、自分と同じレベルの知識を持った人や、同じレベルの技術を持った人は、世の中にはたくさんいると思います。しかし、そんな中でも、「自分である必要性」のようなものは大事だと思います。他の誰かでもできることを自分がやるのではなく、「自分にしかできないこと」、「自分だからこそできること」をやらないと、自分が自分である意味がないように感じてしまいます。(なんか哲学的な話)

夢の確立

 というわけで自分の夢は何だろうともう一度よくよーく、よぉぉぉぉおく考え直し、1つの叶えたい夢が見つかりました。将来の夢というより、人生を通して叶えたい夢のようなものです。
ですが、ここに文字として書いてしまうと、それだけで満足した気分になってしい叶わなくなって気がしてしまうので、この夢は心の中にとどめておこうと思います。

これを叶えようと決めてからは、心の中にぽっかりと開いていた穴が埋まったような気分になりました。

すごい長文になっていた...

 気が付いたら冗長な自分語りになってしまいました...(もうちょいで3000字て...)

夢や理想を語るのは簡単ですが、叶えるのは決して簡単ではないと思います。
ですが、この夢を原動力にしていけば、本気になって夢をかなえて行けそうな気がしています!


大変長くなりました!
この長い記事を最後までご覧いただき、本当にありがとうございました。

本日は以上。ではまた!