どうも、中原です。
SPI対策の日程は大体決まったのですが、まだラボの使用許可を取っていない為、正確な日時は決まってません。
一応、今週は説明会などで忙しいため、第1回は7日を予定しております。
2、3日の間に、しっかりと告知いたしますので、もう暫くお待ち下さい。
さて、来年2年生になる方々、そして現2年生の方々。
C++言語というものを使っていますか?
もうゲーム業界では必須の言語です。
これを使えないと、業界には入れないくらいに…。
とはいっても、ゲームをしっかり作っているならば、勿論大丈夫ですが。
ほんとうに 『しっかり』 作っている場合ですよ!
今1年生の方々は、この春休みにC++言語を勉強して、是非今年の製作ではC++でゲームを作っていきましょう。
今回は、本を読むのがいやだとか、買うお金がないという方たちのために、とても簡単にC++の説明をしていきたいと思います。
一応春から、新2年生に向けて、ラボでC++講座を開きたいと思っていますが、「春休みに勉強したい!」という方々のために、春休みの間、C++の簡単な勉強をブログで行っていきたいと思います。
ただ、C言語の構造体が分かっているものとしてお願いいたします。
もっと詳しいことを知りたいという方々は、是非本を読んでくださいね。
前置きが長くなりましたが、では始めていきたいと思います。
第1回 C++講座 『C++ってなに?』
[0回]
まず、C++とは何ぞや?
一番よく言われているのは オブジェクト指向 の為の言語です。
また、よく分からない言葉が出てきましたよね。 オブジェクト指向…
自分的にはゲーム製作に特化した考え方だと思っています。
ものすごく難しそうと思う方もいるかもしれませんが、
ぶっちゃけて言うと、C言語の構造体とほとんど同じで、ただもっといろんな機能がついてるよ!って言うだけなんです。
書き方も、ほぼC言語と変わりません。
ほら、とっても簡単に思えてきませんか?
C言語の構造体を例にとって、オブシェクト指向について考えてみましょう。
例えばキャラクターを10人作る場合。
キャラクターにはHP、MP、攻撃力、防御力があるとします。
#define CHARA_MAX 10
もちろん定義をしといてください。
int hp[CHARA_MAX];
int mp[CHARA_MAX];
int attackPoint[CHARA_MAX];
int deffencePoint[CHARA_MAX];
はじめはこうしていたかも知れませんが(私もしていました)、とても見にくくありませんか?
キャラクター1人を管理する為に、4つも変数を管理しなければならないのです。
しかも、キャラクターになにか変数を増やすとすると、またこの下にイロイロと書いていかなければなりませんし、管理する変数の量も増えます。
では構造体にすると…
typedef struct BaseCharacter
{
int hp;
int mp;
int attackPoint;
int deffencePoint;
}BASECHARA;
BASECHARA chara[CHARA_MAX];
とっても見やすくなったと思いませんか?
もし、変数を増やしたとしても、構造体の中に加えるだけでいいのです。
管理するのは、変数charaだけ。
中身はすべて詰まっているのですから。
はい。
これがオブシェクト指向の考え方の基本なんです。
オブジェクト は 日本語で もの という意味です。
キャラクターを一つのオブジェク(=もの)として考えて、型として定義(例の場合はBASECHARA)してしまうんですね。
武器を持たしたいと思ったならば、
typedef struct Wepon
{
int attackPoint;
}SWORD;
typedef struct BaseCharacter
{
int hp;
int mp;
int attackPoint;
int deffencePoint;
SWORD Excalibur;
}BASECHARA;
BASECHARA chara[CHARA_MAX];
ほら、キャラクターがエクスカリバーを持っちゃいました。
(全員エクスカリバーもっちゃったよ…)
また、この考え方が使えるのは、キャラクター、武器といった、目で見て分かるものだけではありません。
ゲーム全部を一つのものとして考えると
typedef struct GameMain
{
BASECHARA chara[CHARA_MAX];
}DRAQUE;
DRAQUE game;
こんな風にDRAQUEを宣言しただけで、全部ゲームができちゃうのです。
(ゲームには、キャラクターが10人いるって意味になるのわかりますか?)
こうやって、なんでもかんでも一つ一つを もの として考えてやって、プラモデルを組み立てるように部品をくっつけてプログラムを作っていくことをオブジェクト指向によるプログラミングといいます。
「参考書読んだら、違うことかいてるよ!」っていう方もいらっしゃるかもしれませんが、別にどちらが間違ってるとも思いません。
根本的なことは同じで、ニュアンスが違うように書かれてあるだけだと思います。
さて、ここで気づいた方はいらっしゃいますか?
実は、この考え方で作っていくと、グローバル変数というものが一つしか必要ないのです!
DRAQUE game;
しか必要ないですよね?
他はこの中に全部入っちゃってるのですから。
一人で製作していると、あまり感じないかもしれませんが、多人数で製作していると、よくグローバル変数がかぶるってことはありませんか?
はじめにチームで話し合っていると問題なく出来るかもしれませんが、会社に入ってしまうと、わざわざそんなことまで話し合っている時間はありません。
*構造体の中にある変数のことをメンバー変数といいます。
メンバー変数は、その構造体が管理している変数ですから、中身はかぶっても大丈夫なのです。
また、「武器作って」 とか 「インターフェイス作って」 とか言われた際にも、構造体を作って、そのまま渡してしまえばおしまいですよね。
(関数はどうすんだ?という話が飛んできそうですが、C++ではちゃんとそのへんもカバーしてあります。)
会社では多人数製作が当たり前です。
なんと、オブシェクト指向は、多人数製作にも向いているわけですね!
これで、オブジェクト思考の話はおしましです。
まだまだ、抜けているところがあるかもしれませんが、思いつき次第書いていくことにしましょう。
では、早速C++を使ってみましょう。
class BaseCharacter
{
int hp;
int mp;
int attackPoint;
int deffencePoint;
};
BASECHARA chara[CHARA_MAX];
以上です。
は?
という方もいらっしゃるかもしれませんが、ぶっちゃけこれだけです。
struct を class に変えるだけなんです。
勿論、機能はいっぱいありますが、ほんとに使うだけならこれだけなんですよ!
(後は、拡張子を .c から .cpp に変える)
C言語とC++言語の違いというのは、言語が違う!ではなく、『プログラミングの考え方の違い』 なのです。
どうです?簡単でしょう?
以上で今回の講座は終了です。
次回は『C++の様々な機能』、『C++の魅力』について、一つ一つ書いていこうかと思います。
これを読んで、少しでもC++を勉強しようと思ってくださったなら幸いです。
中原でした。
PR
COMMENT