まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ゲーム中の音楽の作曲用にと思って、以前USBキーボードを購入したのですが
張り切って49鍵の物を買ったのは良かったのですが、ちょっと大きすぎて邪魔だったんですよね。
もっと小さいキーボードの方がエエな~と思いつつ使っていました。
で、そんな時にぐらにどっとこむさんで紹介されていたこの動画を見てこれや!と思って
思わず注文してしまったのがコレ↓

KORGのnanoKEYというキーボードで、形はカワイイ感じですが機能的には普通のUSB
キーボードと遜色ない感じ。
(画像のパソコンの下に置いてある鍵盤っぽいのがnanoKEYです)
そして、キーボードと同じくらい惹かれたのがバンドルソフトのM1 Leでして
これはコルグから20年くらい前に発売されたシンセサイザーを再現したソフトウェアシンセで
M1と同じ音(かどうかはわかりませんが)が収録されている様子。
このM1に収録されていた音が個性的な音が多くて楽しかったので、是非使ってみたいな~と
思った訳です。
当時、私はヤマハのV50というFMシンセを使っていたのですが、音源がFMなので音の種類
によってはイマイチの音(特にピアノ)とかがあったんですよね。
もちろんFMならではの良い音も沢山ありますが。
でもM1は当時としては珍しかったPCM音源で、初めて楽器屋で鳴らしたピアノの音が
凄くリアルで、これスゲーって感じだったんですよ。
他にも、シーケンサー、リズムマシン、エフェクター等などが内蔵されていて
まさにオールインワンと言った感じで、それでいて値段も安い。(と言っても24万くらいしてましたが)
当時、メチャクチャ欲しくて必死でバイトして中古のM1を購入した時は、そのリアルな音に
感動しまくりでした。
でも数年後には全く使わなくなり友人にあげてしまったんですよね。(V50は実家で眠ってます^^;)
そんな感じでM1には思い入れたっぷりなので、nanoKEY&M1 Leがどんな物なのか
今から届くのがとても楽しみです^^
張り切って49鍵の物を買ったのは良かったのですが、ちょっと大きすぎて邪魔だったんですよね。
もっと小さいキーボードの方がエエな~と思いつつ使っていました。
で、そんな時にぐらにどっとこむさんで紹介されていたこの動画を見てこれや!と思って
思わず注文してしまったのがコレ↓
KORGのnanoKEYというキーボードで、形はカワイイ感じですが機能的には普通のUSB
キーボードと遜色ない感じ。
(画像のパソコンの下に置いてある鍵盤っぽいのがnanoKEYです)
そして、キーボードと同じくらい惹かれたのがバンドルソフトのM1 Leでして
これはコルグから20年くらい前に発売されたシンセサイザーを再現したソフトウェアシンセで
M1と同じ音(かどうかはわかりませんが)が収録されている様子。
このM1に収録されていた音が個性的な音が多くて楽しかったので、是非使ってみたいな~と
思った訳です。
当時、私はヤマハのV50というFMシンセを使っていたのですが、音源がFMなので音の種類
によってはイマイチの音(特にピアノ)とかがあったんですよね。
もちろんFMならではの良い音も沢山ありますが。
でもM1は当時としては珍しかったPCM音源で、初めて楽器屋で鳴らしたピアノの音が
凄くリアルで、これスゲーって感じだったんですよ。
他にも、シーケンサー、リズムマシン、エフェクター等などが内蔵されていて
まさにオールインワンと言った感じで、それでいて値段も安い。(と言っても24万くらいしてましたが)
当時、メチャクチャ欲しくて必死でバイトして中古のM1を購入した時は、そのリアルな音に
感動しまくりでした。
でも数年後には全く使わなくなり友人にあげてしまったんですよね。(V50は実家で眠ってます^^;)
そんな感じでM1には思い入れたっぷりなので、nanoKEY&M1 Leがどんな物なのか
今から届くのがとても楽しみです^^
PR
先日購入したシューティングゲームプログラミングを参考にして、タスクシステムを使って
弾幕を撃たせてみました。

今回は2種類の弾を1発づつ角度を変えて毎フレーム発射します。
プログラムはコチラ↓
タスクシステムを使った弾幕表示プログラム
一応ソースファイルも入っています。
A⇔Zキーで敵弾発射角度をS⇔Xキーで敵弾速度を変更出来ます。
本の解説にはC言語の構造体と関数を使った実装方法とC++のクラスを使った実装方法
が紹介されていたのですが、C++の方は殆ど理解出来なかったので構造体と関数で
タスクシステムを実装しています。といっても殆ど本の丸写しですが(汗)
今回の弾幕は、引数に弾の座標以外に、角度、速度、弾画像を入れたので
タスクは1種類なのですが、別々の動きをする弾を表示させる事が出来ました。
もっと上手く作れば、弾の情報を入れるだけで、色んな弾幕が撃てるプログラムが作れそうですね^^
いっぱい弾を撃たせるとこんな感じ。

一応、弾の上限は10000発ですが弾速を一番遅くしてもそこまで撃つのは無理です^^;
そして、このタスクシステムですが、とっても便利な気がします。
まず、プログラムの流れが把握しやすい。
HSPで作っていた時は、(私の作り方が悪かったのもあるとは思いますが)どこに何が
書いてあるのかがわかりにくく、何かを実装しようとしても、アッチやコッチに色々と
追加していかねばならず不便でした。
でも、このタスクシステムの場合は構造体と関数を追加すれば良いだけなので、とっても
プログラムがわかりやすいです。
あと、繰り返しの無駄が無いのも良いです。
以前にも書きましたが配列変数を使うと、弾が有っても無くても繰り返しますが
タスクシステムの場合は、存在する弾の数しか繰り返さないので、プログラムが軽くなりそうで
良い感じです。
と言っても、まだまだ自由自在に扱えると言う訳では無いので、もうちょっと複雑なプログラムを
作ってみようかと思っています。
弾幕を撃たせてみました。
今回は2種類の弾を1発づつ角度を変えて毎フレーム発射します。
プログラムはコチラ↓
タスクシステムを使った弾幕表示プログラム
一応ソースファイルも入っています。
A⇔Zキーで敵弾発射角度をS⇔Xキーで敵弾速度を変更出来ます。
本の解説にはC言語の構造体と関数を使った実装方法とC++のクラスを使った実装方法
が紹介されていたのですが、C++の方は殆ど理解出来なかったので構造体と関数で
タスクシステムを実装しています。といっても殆ど本の丸写しですが(汗)
今回の弾幕は、引数に弾の座標以外に、角度、速度、弾画像を入れたので
タスクは1種類なのですが、別々の動きをする弾を表示させる事が出来ました。
もっと上手く作れば、弾の情報を入れるだけで、色んな弾幕が撃てるプログラムが作れそうですね^^
いっぱい弾を撃たせるとこんな感じ。
一応、弾の上限は10000発ですが弾速を一番遅くしてもそこまで撃つのは無理です^^;
そして、このタスクシステムですが、とっても便利な気がします。
まず、プログラムの流れが把握しやすい。
HSPで作っていた時は、(私の作り方が悪かったのもあるとは思いますが)どこに何が
書いてあるのかがわかりにくく、何かを実装しようとしても、アッチやコッチに色々と
追加していかねばならず不便でした。
でも、このタスクシステムの場合は構造体と関数を追加すれば良いだけなので、とっても
プログラムがわかりやすいです。
あと、繰り返しの無駄が無いのも良いです。
以前にも書きましたが配列変数を使うと、弾が有っても無くても繰り返しますが
タスクシステムの場合は、存在する弾の数しか繰り返さないので、プログラムが軽くなりそうで
良い感じです。
と言っても、まだまだ自由自在に扱えると言う訳では無いので、もうちょっと複雑なプログラムを
作ってみようかと思っています。
注文していたシューティングゲームプログラミングが届きました。

以前購入したシューティングゲーム アルゴリズム マニアックスと同じ人が書いた本で
この本の場合は一本のシューティングゲームを作っていく過程を解説していく感じの本です。
収録されているゲームはこんな感じ↓

3ボタン+レバーの怒首領蜂タイプのゲームで、このゲームの作り方を自機や敵や背景などに
分けて解説されています。
で、早速パラパラと読んでみたのですが、C言語/C++を理解している人向けの本なので
ある程度は予想していましたが、難しいです(汗)
でも、解説毎にサンプルがCDに収録されているので動かしながら覚えれるのは良い感じです。
ちなみにVC++.net2003用とVC++2005用のサンプルが収録されていました。
肝心のタスクシステムについても、かなり詳しく解説されており、C言語の構造体と関数を使った
実装方法とC++のクラスを使った実装方法が紹介されていました。
とりあえずタスクシステムの章は一通り読んでみたのですが、解説は理解出来るのですが
サンプルプログラムを見ると何がなんだか・・・って感じなんですよね。
でも、これが理解出来たらゲーム作製に取り掛かれそうな気がするので、頑張って解析
して行こうかと思っています。
それにしても、他のゲームプログラマの人はどうやって技術を身につけるんでしょうかね?
知り合いで教えてくれるような人がいれば良いですが、そんな人がいない場合
頼れるのは本とネットしかありません。
今はネットが発達しているので良いですが、昔のプログラマの人は凄い苦労したんでしょうねぇ。
なんにせよ、やっぱりコツコツと地道に覚えていくしかないんでしょうね。
以前購入したシューティングゲーム アルゴリズム マニアックスと同じ人が書いた本で
この本の場合は一本のシューティングゲームを作っていく過程を解説していく感じの本です。
収録されているゲームはこんな感じ↓
3ボタン+レバーの怒首領蜂タイプのゲームで、このゲームの作り方を自機や敵や背景などに
分けて解説されています。
で、早速パラパラと読んでみたのですが、C言語/C++を理解している人向けの本なので
ある程度は予想していましたが、難しいです(汗)
でも、解説毎にサンプルがCDに収録されているので動かしながら覚えれるのは良い感じです。
ちなみにVC++.net2003用とVC++2005用のサンプルが収録されていました。
肝心のタスクシステムについても、かなり詳しく解説されており、C言語の構造体と関数を使った
実装方法とC++のクラスを使った実装方法が紹介されていました。
とりあえずタスクシステムの章は一通り読んでみたのですが、解説は理解出来るのですが
サンプルプログラムを見ると何がなんだか・・・って感じなんですよね。
でも、これが理解出来たらゲーム作製に取り掛かれそうな気がするので、頑張って解析
して行こうかと思っています。
それにしても、他のゲームプログラマの人はどうやって技術を身につけるんでしょうかね?
知り合いで教えてくれるような人がいれば良いですが、そんな人がいない場合
頼れるのは本とネットしかありません。
今はネットが発達しているので良いですが、昔のプログラマの人は凄い苦労したんでしょうねぇ。
なんにせよ、やっぱりコツコツと地道に覚えていくしかないんでしょうね。
先日作ったプログラムを元にリスト構造を使って弾幕を撃たせてみました。

白い四角い線を描画画面と見立てて、その範囲を超えると削除するようになっています。
ダウンロードはコチラ↓
リスト構造を使った弾幕表示プログラム(右クリック→対象をファイルに保存で保存して下さい)
一応ソースファイルも入ってますが、あまり参考にはならないかも(汗)
前回と同じようにA⇔Zキーで敵弾発射間隔をS⇔Xキーで敵弾速度を変更出来ます。
今回は画像の回転表示もやってみようと思ってDrawRotaGraph関数を使って表示させました。
関数の仕様は
int DrawRotaGraph( int x, int y,
double ExtRate, double Angle,
int GrHandle , int TransFlag , int TurnFlag ) ;
となっていて、double ExtRateが拡大率でdouble Angleが回転角度となっており
double ExtRateは1.0で等倍となります。
で、回転して表示させる為にはdouble Angleに角度を指定しなければならないので
atan2関数を使って発射地点からみた弾の向きを計算して表示させると上手く出来ました^^
こんな感じで記述してます↓
DrawRotaGraph( p->nXPos,p->nYPos ,1.0, atan2(p->nXPos-(308),(228)-p->nYPos) , image[0] , TRUE ) ;
この辺の考え方はHSPで勉強していたのが役にたちました^^
1フレームに1回描画させるとこんな感じになります^^;

今回のリスト構造の場合は常に最後にオブジェクトが追加されるので描画順を考えなくても
綺麗に表示されて良い感じです。
と言う訳で次はタスクシステムを勉強しようと思って、シューティングゲームプログラミングを
注文しました^^
白い四角い線を描画画面と見立てて、その範囲を超えると削除するようになっています。
ダウンロードはコチラ↓
リスト構造を使った弾幕表示プログラム(右クリック→対象をファイルに保存で保存して下さい)
一応ソースファイルも入ってますが、あまり参考にはならないかも(汗)
前回と同じようにA⇔Zキーで敵弾発射間隔をS⇔Xキーで敵弾速度を変更出来ます。
今回は画像の回転表示もやってみようと思ってDrawRotaGraph関数を使って表示させました。
関数の仕様は
int DrawRotaGraph( int x, int y,
double ExtRate, double Angle,
int GrHandle , int TransFlag , int TurnFlag ) ;
となっていて、double ExtRateが拡大率でdouble Angleが回転角度となっており
double ExtRateは1.0で等倍となります。
で、回転して表示させる為にはdouble Angleに角度を指定しなければならないので
atan2関数を使って発射地点からみた弾の向きを計算して表示させると上手く出来ました^^
こんな感じで記述してます↓
DrawRotaGraph( p->nXPos,p->nYPos ,1.0, atan2(p->nXPos-(308),(228)-p->nYPos) , image[0] , TRUE ) ;
この辺の考え方はHSPで勉強していたのが役にたちました^^
1フレームに1回描画させるとこんな感じになります^^;
今回のリスト構造の場合は常に最後にオブジェクトが追加されるので描画順を考えなくても
綺麗に表示されて良い感じです。
と言う訳で次はタスクシステムを勉強しようと思って、シューティングゲームプログラミングを
注文しました^^
リスト構造を理解しようと思って0からのゲームプログラミングさんのリスト構造 3を
参考にして、弾を沢山表示して移動させて消去するプログラムを作っています。
とりあえずこんな感じ↓

画像じゃわかりにくいですが上から下に弾が移動して、y軸が300ドット以上になると消去されます。
ポインタについても、ちょっとは解ったような気がしてきましたが、やっぱり難しいです。
ポインタの説明で良くあるのが
int a=1;
int *p=&a
と書いてあって*pは変数aのポインタである。みたいな説明なのですが
この場合はaという実体があるので理解も出来るのですが、実際に色んなサンプルを見てみると
ポインタだけで色んな処理を行っているので、非常に頭がこんがらがってくるんですよ。
そして宣言の時には*を付けるのに、使うときは*をつけなかったり
構造体のポインタを参照するときはアロー演算子->を使うとか、ホントにワザと
ややこしくしてるんじゃないのかと言いたくなってきます^^;
とりあえず、上記のプログラムで今度は弾幕を撃たせるような物を作ってみようと思っています。
参考にして、弾を沢山表示して移動させて消去するプログラムを作っています。
とりあえずこんな感じ↓
画像じゃわかりにくいですが上から下に弾が移動して、y軸が300ドット以上になると消去されます。
ポインタについても、ちょっとは解ったような気がしてきましたが、やっぱり難しいです。
ポインタの説明で良くあるのが
int a=1;
int *p=&a
と書いてあって*pは変数aのポインタである。みたいな説明なのですが
この場合はaという実体があるので理解も出来るのですが、実際に色んなサンプルを見てみると
ポインタだけで色んな処理を行っているので、非常に頭がこんがらがってくるんですよ。
そして宣言の時には*を付けるのに、使うときは*をつけなかったり
構造体のポインタを参照するときはアロー演算子->を使うとか、ホントにワザと
ややこしくしてるんじゃないのかと言いたくなってきます^^;
とりあえず、上記のプログラムで今度は弾幕を撃たせるような物を作ってみようと思っています。
カレンダー
| 07 | 2026/08 | 09 |
| 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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事