まったくのプログラミング素人の筆者が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
先日購入したEeePC1000HEですが、やはりパフォーマンスに満足出来なくて
我慢できずにN10Jを購入してしまいました^^;

簡単なスペックはAtom N270 1.6G/Geforce9300mgsという構成でグラフィックボードを
別で備えているという一風変わったネットブックです。

キーボードはキーピッチも十分で打ちやすく、全体的な製品の作りも安っぽくない感じです。
気になるバッテリーでの駆動時間も6セルバッテリーで3.5~4時間程度は使えます。
私の購入した商品には3セルのバッテリーも付属されていたので合計で5~6時間は使える感じ。
このN10JはGeforceと内蔵のオンボードグラフィックをスイッチで切り替える事が出来るので
オンボードグラフィックを使えばバッテリー駆動時間はEeePC1000HEと変わらない印象です。
ただ、OSがVistaなのが問題で特にDXライブラリとDirectX10の相性が悪い?のか、3Dに対応して
いないDXライブラリを使ってるソフトだと速度が全然出ないんですよね。
全体的なOSの動きも若干モッサリとした感じがしたのと、以前購入したEeePC用に買ったXPが
余っていたのでXP化する事にしました。
XP用のドライバなどはASUSの公式で配布されていたので普通にインストールすればOKでした。
で、3D使った自分のゲームを動かしてみると・・・

ちゃんと60FPSで動いてくれました^^ EeePC1000HEの時は20FPS位しか出なかったので
かなりのパフォーマンスアップです。
でも、オブジェクトが沢山出てくると処理落ちしたりして、自分が思っていたよりは遅いかな・・・と。
他のゲームを動かしてみても、2Dなら全く問題なく動いてくれますが3D使ったもので処理が重そうな
場面だと処理落ちする感じでした。
CrystalMark 2004R3でベンチを測ってみた。

EeePC1000HEだとこんな感じ↓

グラフィック性能はかなり良くなっている事がわかりますね。
N10JはSetFBSと言うソフトを使うとオーバークロック出来るとTwitterで教えて頂いたので
試しに2GHzまで上げてベンチしてみました

効果はかなりあって、ベンチも良くなったのですが、実際にゲームを動かしてみても
処理落ちする場面が軽減されていました^^
やはりATOMが足を引っ張ってるって感じなんですかねぇ。
まぁでもパソコンには優しくないので、ここぞと言う時だけ使うのが良いかもしれません^^;
と言った感じでパフォーマンス的には満足出来る内容だったので、N10Jを使ってゲーム制作
してみようかと思っています。
常にスタインバイ状態にしておいて、パッと出してサッと制作出来たらよいかなーと。
EeePCの方は売却決定です(笑)
我慢できずにN10Jを購入してしまいました^^;
簡単なスペックはAtom N270 1.6G/Geforce9300mgsという構成でグラフィックボードを
別で備えているという一風変わったネットブックです。
キーボードはキーピッチも十分で打ちやすく、全体的な製品の作りも安っぽくない感じです。
気になるバッテリーでの駆動時間も6セルバッテリーで3.5~4時間程度は使えます。
私の購入した商品には3セルのバッテリーも付属されていたので合計で5~6時間は使える感じ。
このN10JはGeforceと内蔵のオンボードグラフィックをスイッチで切り替える事が出来るので
オンボードグラフィックを使えばバッテリー駆動時間はEeePC1000HEと変わらない印象です。
ただ、OSがVistaなのが問題で特にDXライブラリとDirectX10の相性が悪い?のか、3Dに対応して
いないDXライブラリを使ってるソフトだと速度が全然出ないんですよね。
全体的なOSの動きも若干モッサリとした感じがしたのと、以前購入したEeePC用に買ったXPが
余っていたのでXP化する事にしました。
XP用のドライバなどはASUSの公式で配布されていたので普通にインストールすればOKでした。
で、3D使った自分のゲームを動かしてみると・・・
ちゃんと60FPSで動いてくれました^^ EeePC1000HEの時は20FPS位しか出なかったので
かなりのパフォーマンスアップです。
でも、オブジェクトが沢山出てくると処理落ちしたりして、自分が思っていたよりは遅いかな・・・と。
他のゲームを動かしてみても、2Dなら全く問題なく動いてくれますが3D使ったもので処理が重そうな
場面だと処理落ちする感じでした。
CrystalMark 2004R3でベンチを測ってみた。
EeePC1000HEだとこんな感じ↓
グラフィック性能はかなり良くなっている事がわかりますね。
N10JはSetFBSと言うソフトを使うとオーバークロック出来るとTwitterで教えて頂いたので
試しに2GHzまで上げてベンチしてみました
効果はかなりあって、ベンチも良くなったのですが、実際にゲームを動かしてみても
処理落ちする場面が軽減されていました^^
やはりATOMが足を引っ張ってるって感じなんですかねぇ。
まぁでもパソコンには優しくないので、ここぞと言う時だけ使うのが良いかもしれません^^;
と言った感じでパフォーマンス的には満足出来る内容だったので、N10Jを使ってゲーム制作
してみようかと思っています。
常にスタインバイ状態にしておいて、パッと出してサッと制作出来たらよいかなーと。
EeePCの方は売却決定です(笑)
プチコンでゲームを作ってみて思ったのが、ちょっとでも時間があれば何処でもパッと出して
サクッとゲーム製作が出来て良いなぁといった事でした。
で、この環境をPCでも実現出来ないかなぁ?と思ってEeePC1000HEを買ってみました。

EeePC1000HEはバッテリー駆動時の持続時間が公式で9時間とあったので、常にスタンバイ状態
で待機させておいて、使いたい時にバッテリー駆動で動かせばケーブルレスでパッと使う事が出来る
んじゃないかと思いまして。
ちなみに、中古1万5千円程度で購入。ホント、ここ最近のPCの値段の安さは
異常といっても良いのでは^^;

見た感じ、見慣れたEeePCって感じですが、キーボードが今風?のキーが平べったくてキーとキーの
間に隙間が開いてるタイプになっていました。
打ってみた感じはキーピッチも狭くなく普通に打てますし、特に使いにくいって事はありません。
ネット接続してメールやインターネット回覧などの使い方なら普通に動いてくれて全く問題なし。
そして、バッテリー駆動時間ですが連続で6~7時間程度使ってみても20%位の残量があったので
殆どバッテリーの事は気にしなくても良いくらい、バッテリーの持ちが良くて驚きました。
(メモリは2Gに増設済み)
で、気になるゲームの動作速度。
とりあえず、以前作製した動作速度検証プログラムを動かしてみると・・・

弾10000発表示だとFPS60キープは難しい感じ。
Solid State SURVIVORを動かしてみるとFPS60キープは出来ていました。

しかし、3Dを使用したプログラムの場合だと・・・

FPS15~20位しか速度がでず、ちょっと使用するにはツライ感じ。
他のPCSTGを動かしてみても、2Dゲームの場合は良いのですが3Dゲームの場合は処理落ちが
よく起こる感じでした。
CrystalMark 2004R3でベンチを測ってみた。

以前測定した別PCと比べても全体的にスコアが低いですが、グラフィック部分がかなりツライ感じ。
まぁ、PCの使い方としてゲームを遊ぶ用には作られていないので仕方ないとは思います。
実際、インターネットを見るような使い方なら全然問題なく使用できますし^^
といった感じで2Dゲームを作るなら、このPCでもプチコン的にゲーム製作が出来るかなぁといった
印象ですが、出来ればもうちょっと性能の良いPCの方が良いかなぁという気もしているんですよね。
でも、性能が良い=バッテリーの持ちが悪くなるって事なので、その辺のバランスが問題です。
EeePC1000HEを買う時に、もうひとつ悩んでいたPCがあって、それがN10JCなのですが
こちらはGPUにGeForce9300MGSを積んでいるので、そこそこ動くのではないかな?
と思っていたのですが、GeForce9300MGSを使用するとバッテリー駆動時間が4時間になって
しまうんですよねぇ・・・
どうしたもんかと悩み中です^^;
サクッとゲーム製作が出来て良いなぁといった事でした。
で、この環境をPCでも実現出来ないかなぁ?と思ってEeePC1000HEを買ってみました。
EeePC1000HEはバッテリー駆動時の持続時間が公式で9時間とあったので、常にスタンバイ状態
で待機させておいて、使いたい時にバッテリー駆動で動かせばケーブルレスでパッと使う事が出来る
んじゃないかと思いまして。
ちなみに、中古1万5千円程度で購入。ホント、ここ最近のPCの値段の安さは
異常といっても良いのでは^^;
見た感じ、見慣れたEeePCって感じですが、キーボードが今風?のキーが平べったくてキーとキーの
間に隙間が開いてるタイプになっていました。
打ってみた感じはキーピッチも狭くなく普通に打てますし、特に使いにくいって事はありません。
ネット接続してメールやインターネット回覧などの使い方なら普通に動いてくれて全く問題なし。
そして、バッテリー駆動時間ですが連続で6~7時間程度使ってみても20%位の残量があったので
殆どバッテリーの事は気にしなくても良いくらい、バッテリーの持ちが良くて驚きました。
(メモリは2Gに増設済み)
で、気になるゲームの動作速度。
とりあえず、以前作製した動作速度検証プログラムを動かしてみると・・・
弾10000発表示だとFPS60キープは難しい感じ。
Solid State SURVIVORを動かしてみるとFPS60キープは出来ていました。
しかし、3Dを使用したプログラムの場合だと・・・
FPS15~20位しか速度がでず、ちょっと使用するにはツライ感じ。
他のPCSTGを動かしてみても、2Dゲームの場合は良いのですが3Dゲームの場合は処理落ちが
よく起こる感じでした。
CrystalMark 2004R3でベンチを測ってみた。
以前測定した別PCと比べても全体的にスコアが低いですが、グラフィック部分がかなりツライ感じ。
まぁ、PCの使い方としてゲームを遊ぶ用には作られていないので仕方ないとは思います。
実際、インターネットを見るような使い方なら全然問題なく使用できますし^^
といった感じで2Dゲームを作るなら、このPCでもプチコン的にゲーム製作が出来るかなぁといった
印象ですが、出来ればもうちょっと性能の良いPCの方が良いかなぁという気もしているんですよね。
でも、性能が良い=バッテリーの持ちが悪くなるって事なので、その辺のバランスが問題です。
EeePC1000HEを買う時に、もうひとつ悩んでいたPCがあって、それがN10JCなのですが
こちらはGPUにGeForce9300MGSを積んでいるので、そこそこ動くのではないかな?
と思っていたのですが、GeForce9300MGSを使用するとバッテリー駆動時間が4時間になって
しまうんですよねぇ・・・
どうしたもんかと悩み中です^^;
クラスの概念を理解したいなーと思ってやさしいC++と言う本を買ってみました。

私が最初にC言語を覚えようと思って購入した本はC言語の解説書でした。
C言語の本なので当然C++の事については書いてなかったんですよね。
なのでクラスの事についても書いてなかったので、C++について書いてある本が欲しいなと思い
ネットなどの評判を調べてみて、この本が良いかな?と言う事で購入。
そもそも、なんでクラスの概念を理解したいと思ったかというと、プログラムが肥大化するにつれて
何をどこに書いたのか?ってのが解り難くなって来てしまって何とかならんかなーと思っていました。
で、クラスってのを使うと解りやすくなるらしい?と言う事で本でも買ってみようかと。
ザッと読んでみましたが、評判通り解りやすい例と共に解説してあって読みやすそうです。
ただ、かなり分厚い本なので全て読むのは結構骨が折れそうですが^^;
こう言う解説本って読んでいる分には理解出来るのですが、実際に自分のプログラムに
どう使うのか?って部分で悩む事が多い気がします。
関数ポインタとか概念はなんとなく解る気はするのですが、使いどころが良くわからなかったり^^;
まぁ、ボチボチ読んで行こうかと思っています。
私が最初にC言語を覚えようと思って購入した本はC言語の解説書でした。
C言語の本なので当然C++の事については書いてなかったんですよね。
なのでクラスの事についても書いてなかったので、C++について書いてある本が欲しいなと思い
ネットなどの評判を調べてみて、この本が良いかな?と言う事で購入。
そもそも、なんでクラスの概念を理解したいと思ったかというと、プログラムが肥大化するにつれて
何をどこに書いたのか?ってのが解り難くなって来てしまって何とかならんかなーと思っていました。
で、クラスってのを使うと解りやすくなるらしい?と言う事で本でも買ってみようかと。
ザッと読んでみましたが、評判通り解りやすい例と共に解説してあって読みやすそうです。
ただ、かなり分厚い本なので全て読むのは結構骨が折れそうですが^^;
こう言う解説本って読んでいる分には理解出来るのですが、実際に自分のプログラムに
どう使うのか?って部分で悩む事が多い気がします。
関数ポインタとか概念はなんとなく解る気はするのですが、使いどころが良くわからなかったり^^;
まぁ、ボチボチ読んで行こうかと思っています。
プチコンはタッチペンを扱うための命令も実装されているので、何かタッチペンを使ったSTGを
作ってみたいなーと思って試しに作ってみました。
今の所こんな感じ↓
上画面と下画面はキャラは違いますが、全く同じ動きを表示させています。
イメージ的にはロストワールドやオメガファイブみたいな感じで自機の回りのオプションを
タッチペンで移動させる感じ。
ロータリースイッチの代わりにタッチペンで方向を変える感じです。
背景が青い時はタッチペンの方向に向くようになっていて、Lボタンを押すと背景が赤くなって
タッチペンの位置にオプションが来て敵を倒せるような感じにしています。
背景が青い時は上画面を見てタッチペンを回転させて、赤い時は下画面を見てタッチペンを
移動させるイメージです。
本当は下画面にキャラなどを表示させたかったんですが、プチコンの仕様で下画面に表示
出来るスプライトは制限されているんですよね。。。
でも、プチコンはスプライトの最大数が100と言う制限があるのですが、上画面と下画面で
別扱いになっているようで、上画面に100と下画面に100のスプライトが使えるようです。
そして、両方に表示させたら重くなるのかなーと思っていたら大して影響しない感じ。
(上下全く同じ動きをさせているからかもしれませんが)
今回はリストを短くしようと思っているのですが、やはり短いと凝ったゲームは作れませんし
凝ったゲームを作ろうとするとリストは長くなって遊んでもらえる可能性も低くなるしで
何か良い方法はないものですかねぇ・・・^^;
作ってみたいなーと思って試しに作ってみました。
今の所こんな感じ↓
上画面と下画面はキャラは違いますが、全く同じ動きを表示させています。
イメージ的にはロストワールドやオメガファイブみたいな感じで自機の回りのオプションを
タッチペンで移動させる感じ。
ロータリースイッチの代わりにタッチペンで方向を変える感じです。
背景が青い時はタッチペンの方向に向くようになっていて、Lボタンを押すと背景が赤くなって
タッチペンの位置にオプションが来て敵を倒せるような感じにしています。
背景が青い時は上画面を見てタッチペンを回転させて、赤い時は下画面を見てタッチペンを
移動させるイメージです。
本当は下画面にキャラなどを表示させたかったんですが、プチコンの仕様で下画面に表示
出来るスプライトは制限されているんですよね。。。
でも、プチコンはスプライトの最大数が100と言う制限があるのですが、上画面と下画面で
別扱いになっているようで、上画面に100と下画面に100のスプライトが使えるようです。
そして、両方に表示させたら重くなるのかなーと思っていたら大して影響しない感じ。
(上下全く同じ動きをさせているからかもしれませんが)
今回はリストを短くしようと思っているのですが、やはり短いと凝ったゲームは作れませんし
凝ったゲームを作ろうとするとリストは長くなって遊んでもらえる可能性も低くなるしで
何か良い方法はないものですかねぇ・・・^^;
カレンダー
04 | 2025/05 | 06 |
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 | 31 |
リンク
カテゴリー
最新記事
(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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事