はじめに
この一週間ブロック崩しを作ってみて、オブジェクト指向の難しさに気づいた。
ブロック崩し 【OF】
現在の進行状況
ファイル一覧
# main関数みたいなもの
Game.h
Game.cpp
# オブジェクトクラス ( Circle, Box, Bar ) の親クラス
# 継承を使いたかったので無理やり導入
Object.h
# Objectクラスの子クラス
# ブロック崩しの "バー" の部分を定義している
Bar.h
Bar.cpp
# Objectクラスの子クラス
# ブロック崩しの "ブロック" の部分を定義している
Box.h
Box.cpp
# Objectクラスの子クラス
# ブロック崩しの "ボール" の部分を定義している
Circle.h
Circle.cpp
# インスタンスを作るためのクラス
# 実装途中...。
CreateFactory.h
CreateFactory.cpp
# ゲーム作りは、 'pos.x' とかを使うと便利ときいたので、
# operator関数の練習も兼ねて実装した
# かなり勉強になった
# Objectクラスで使っている。
Vector2D.h
Vector2D.cpp
# 当たり判定のクラス
# 実装途中...。
Collision.h
Collision.cpp
オブジェクト指向
実際にブロック崩しを作っていると、もやもやした気持ちになった。それは、他のインスタンスの情報は、引数で受け取る方法をしていると、引数が10個くらいになってしまうと気がついた。
例
Bar bar;//インスタンス生成
Circle circle;
void execute(double bar.pos.x,double bar.pos.y, double circle.pos.x, ........ );
このように必要な情報を引数に入れて情報を渡していると、大規模プロジェクトならいつか限界が来ると感じた。そこで、「インスタンスのアドレスを関数で渡したら多少ましになるのでは?」と考えたが、インスタンスの数が多すぎるとこの方法も使えない。ネットで検索していると、オブジェクト指向を取り入れる必要があるという結果がでてきた。オブジェクト指向ってかなり難しいことを身をもって体感した。
今後
このような実装を目指している。 `ボールの跳ね返り` や `Barをキーボードからの入力` は、お互いのオブジェクトに干渉しないので、 `それぞれのクラスのヘッダファイル` に実装してもおかしくないだろう。 問題は `setup` で生成したインスタンスをどのようにして、 `Bar_collisionクラス` や `Block_collisionクラス` で使用するのか。オブジェクト指向を学ぶいい機会かもしれない。 ブロック崩しといえば、 `Block` を大量に生成しなければならない。この場合、インスタンスを大量に生成するにはどうすればいいのか?と、疑問に思った。ネットには、 `動的配列を使う` とか `newを使う` など様々な意見があった。仮に `new` を使うなら `std::make_shared` を実践で使うときが来たのかなと感じて少しうれしい。もうすこし調べる必要がある。 あと、ソースコードが大量にあるのでさすがに直接コードを貼るのは気が引ける。他の方たちは、gitで自分の制作物を作っているみたいなので、私もgitを使ってみようかなと考えている。 ##ロベールのC++ ブロック崩しの実装に夢中になって手つけてなかったので久しぶりにやる。 ###クラスのテンプレート 関数のテンプレートだけではく、クラスのテンプレートもできる。これは便利だな。 ふと思ったが、 `ブロック崩しのVector2Dクラス` も `Templete` で実装したほうが良さそう。いまは、double型で固定しているので、templeteになおしてみる。 #終わりに ロボットプログラミングに興味が出てきました。 [ROS](https://qiita.com/srs/items/5f44440afea0eb616b4a) という (いまいちよくわかっていないが) のを使うと C++で開発ができるみたい。しかも、 `ラズベリーパイ` という 小さいコンピュータ? を使って実際に動かすことができるのも面白そう。 プログラミングをできると、遊びの幅がかなり広がる。しかも、お金は電気代だけっていうね。最高だよほんとに。