まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日購入したやさしいC++を読んでクラスを使った簡単なプログラムを作ってみました。
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1307030460
(自機と自機弾と敵が動くだけです。当たり判定は行っていません)
そもそも、なんでクラスの概念を勉強しようかと思ったかというと、プログラムが肥大化するにつれて
何をどこに書いたのか?ってのが非常にわかりにくくなってくるんですよね。(私の書き方がまずい
ってのもあると思いますが^^;)
あの処理は何処に書いたっけ?とアッチのファイルを見たり、コッチのファイルを見たり・・・
クラスを使うと、そういうのを防ぎやすくなるのかな?と思って勉強してみようと思いました。
で、ちょっと本を読んでみると、敵や自機などのクラスに分けておけば変数や関数なども、その
クラス専用に使うような感じになるので、まとめやすくバグなんかが出た時にも原因を追求
しやすそうだなーと。
例えば↓こんなクラスを作ったとすると・・・
class jiki
{
private:
double x;
double y;
public:
jiki();
void jiki_move();
};
double x,yにはvoid jiki_move();と言う関数からしか変数の値を変更する事が出来なくなります。
もし、自機の動きにバグが出た場合、void jiki_move();関数を調べるだけでOKって事になるので
原因の追求が早いですし、自機に関する事はこのクラスに書いておけば解りやすいですよね。
って事で、とりあえず自機と敵が出てきて自機弾で敵が破壊出来るようなプログラムを作ろうと
思って制作しているのですが、当たり判定でつまずいてます。
とりあえず、自機クラスと敵クラスに分けて制作しているのですが、当たり判定を行う為には
最低でも自機の座標と敵の座標が必要です。
ところが、自機の座標にアクセスする為には自機クラス内に関数が必要ですし
敵の座標についても同じ。
でも、当たり判定の為には両方のクラスに一つの関数でアクセスする必要があります。
この方法が良く解らないんですよねぇ。。。
自機クラスと敵クラスを多重継承したクラスを作って判定すれば良いのかな?とも思うのですが
そうすると当たり判定する物が増えた場合に、その都度クラスを増やさなければならず
なんだかおかしい気がします。
かと言って、グローバル関数(そんな言い方するのか?)でクラス内の変数を参照しようとしても
private メンバ にアクセスできません。みたなエラーが出てしまいますし。
privateをpublicにすれば良いのかもしれませんが、それだとクラスの良さが失われてしまいます。
という感じで、どうしたもんかと思っているのですが、根本的に間違ってる気もするので
もうちょっと本やらネットなんかで調べてみようかと思っています。
それにしても、いつも思いますがメンバだのオブジェクトだのインスタンスだのコンストラクタだの
変なカタカナで呼ぶのやめて欲しいです。
普通に日本語で初期化とか変数とか言ってくれた方が解りやすいと思うんですがねぇ^^;
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1307030460
(自機と自機弾と敵が動くだけです。当たり判定は行っていません)
そもそも、なんでクラスの概念を勉強しようかと思ったかというと、プログラムが肥大化するにつれて
何をどこに書いたのか?ってのが非常にわかりにくくなってくるんですよね。(私の書き方がまずい
ってのもあると思いますが^^;)
あの処理は何処に書いたっけ?とアッチのファイルを見たり、コッチのファイルを見たり・・・
クラスを使うと、そういうのを防ぎやすくなるのかな?と思って勉強してみようと思いました。
で、ちょっと本を読んでみると、敵や自機などのクラスに分けておけば変数や関数なども、その
クラス専用に使うような感じになるので、まとめやすくバグなんかが出た時にも原因を追求
しやすそうだなーと。
例えば↓こんなクラスを作ったとすると・・・
class jiki
{
private:
double x;
double y;
public:
jiki();
void jiki_move();
};
double x,yにはvoid jiki_move();と言う関数からしか変数の値を変更する事が出来なくなります。
もし、自機の動きにバグが出た場合、void jiki_move();関数を調べるだけでOKって事になるので
原因の追求が早いですし、自機に関する事はこのクラスに書いておけば解りやすいですよね。
って事で、とりあえず自機と敵が出てきて自機弾で敵が破壊出来るようなプログラムを作ろうと
思って制作しているのですが、当たり判定でつまずいてます。
とりあえず、自機クラスと敵クラスに分けて制作しているのですが、当たり判定を行う為には
最低でも自機の座標と敵の座標が必要です。
ところが、自機の座標にアクセスする為には自機クラス内に関数が必要ですし
敵の座標についても同じ。
でも、当たり判定の為には両方のクラスに一つの関数でアクセスする必要があります。
この方法が良く解らないんですよねぇ。。。
自機クラスと敵クラスを多重継承したクラスを作って判定すれば良いのかな?とも思うのですが
そうすると当たり判定する物が増えた場合に、その都度クラスを増やさなければならず
なんだかおかしい気がします。
かと言って、グローバル関数(そんな言い方するのか?)でクラス内の変数を参照しようとしても
private メンバ にアクセスできません。みたなエラーが出てしまいますし。
privateをpublicにすれば良いのかもしれませんが、それだとクラスの良さが失われてしまいます。
という感じで、どうしたもんかと思っているのですが、根本的に間違ってる気もするので
もうちょっと本やらネットなんかで調べてみようかと思っています。
それにしても、いつも思いますがメンバだのオブジェクトだのインスタンスだのコンストラクタだの
変なカタカナで呼ぶのやめて欲しいです。
普通に日本語で初期化とか変数とか言ってくれた方が解りやすいと思うんですがねぇ^^;
PR
この記事にコメントする
無題
こんばんは。
プログラムはやたら難しい言葉が出てきて概念も
理解するのがなかなか大変ですよね…。
private変数へのアクセスするための
関数をpublicに設ければ良いと思います。
void returnXY(int &x, int &y) {
// private :
// int mX, mY; とします。
x = mX; y = mY;
}
これで外から2変数を一気に取ったり書き込んだり出来ます。
また、STGアルゴリズムマニアックスなどの本でも使われていますが、
自機と敵の親クラスとなるMoverに位置座標や
移動、当たり判定などの更新処理を
入れるとスッキリするかと思います。
以上、参考になればと思います~。
プログラムはやたら難しい言葉が出てきて概念も
理解するのがなかなか大変ですよね…。
private変数へのアクセスするための
関数をpublicに設ければ良いと思います。
void returnXY(int &x, int &y) {
// private :
// int mX, mY; とします。
x = mX; y = mY;
}
これで外から2変数を一気に取ったり書き込んだり出来ます。
また、STGアルゴリズムマニアックスなどの本でも使われていますが、
自機と敵の親クラスとなるMoverに位置座標や
移動、当たり判定などの更新処理を
入れるとスッキリするかと思います。
以上、参考になればと思います~。
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事