今ネット料金未払いで解約されてしまったので、家からネットに繋がらず、お返事遅くなってすみません(_ _|||)
これだけネットを使ってると1ヶ月ネットが使えないだけでホントに不便で仕方ないです・・・。
txtファイルでもいいんですが、エクセルだと、パターンのあるデータが作りやすいと思ったんですよ。
例えば、シーン1で、
10
20
30
40
50
60
70
80
100
なんて、等間隔で出現するとき、データ作るときに、いちいち上記のように手打ちしないといけないじゃないですか。
でも、エクセルなら、
10
20
だけ書いてピーーと引っ張ったら100まで自動で作れますよね。
しかも、
「あ、シーン3とシーン4の間に他のシーンを入れないといけなかった」とかってとき、
txtファイルだと全部の出現カウンタの時間をずらさないといけませんけど、エクセルデータなら、「前のカウンタ+X」としておけば、全自動で計算しなおしてくれるので、かなり便利です。
上に書いた10個位なら「手打ちで直せばいいじゃん」と思うかもしれませんが、それが数百、数千という数になってくると、結構ありがたくなるんですよね。
そして、xlsデータはスクロール固定行って作れるので、
「あれ、この行に書いてるデータ何のデータだっけ?」と思っても、列の上にデータの種類が表示されるので、わかりやすいんです。
・・とまぁ色々理由があってエクセルデータを使っています。
世間でどういう方法が主流なのかわかりませんが、とりあえず私はこうする・・というだけですので、クロカモさんの好きな方法でやっていただいたらいいと思いますよ。
取り込む方法は簡単です。
fopen関数でファイルを開き、fpのデータからカンマで区切られている文字列データを取ってきます。
文字列データをatoiで数値データに変換して、敵出現データに格納する。
それだけです。
後は現在のカウンタが出現カウンタと同じになった時、格納した敵の種類を出現させればいいということです。
ちなみに、うちのサイトには全くC++の書き方がしてありません。純粋なCです。
(宣言を途中でやったり、C++のコンパイラじゃないと通らない記述はありますが)
>竜神録のステージ1のボスが使用するスペルカード付きの弾幕なんてどういったコードなのか考えながら避けて何度死んでしまった事かw
結構複雑なコードを想像されていらっしゃるのかもしれませんが、
ここまで沢山作らないといけなくなると「プログラム的作成ツールモドキ」みたいなものを作ってからじゃないと中々管理しにくいので、それで作っていますからコード自体は簡単です。
(私の場合は作成モジュールとでもいいますか・・)
本格RPGとかを作るときだって、プログラマー達はきっとマップ作成ツールやいろんなツールを事前に作ってから作成を開始すると思います(知りませんが(汗)
小さなゲームを作るときは、そんなツールを作る方が面倒ですが、少し大きくなってくると作成ツールモドキを作ってから作る方が簡単になりますので。
龍神録の場合、そんな立派なものじゃなく、単に変数に値を代入したらその通り動いてくれるだけです。
変数に値を代入するだけで、その通りの動きをしてくれるようにプログラムを作っておけば、弾幕を作るとき、変数に値を代入するだけでよくなります。
・・・と文字で言ってもわかりにくいので、プログラムの一部をお見せするとこんな感じです。
261番目のボスの弾幕が、角度等間隔で30種類の方向に飛んでいく弾幕だったとします。
400カウントに1回発射します。
vxとvyはspdとangleから自動で計算されます。
#define TM261 400
void BossShotBulletNormal261(int n){
int i,t=boss_shot[n].cnt%TM261;
double base_angle=bossatan2();//敵と自機の角度を計算して返す関数
if(t==0){
for(i=0;i<30;i++){
if((k=serch(n))!=-1){
boss_shot[n].bullet[k].col = 6; //弾の色
boss_shot[n].bullet[k].x = enemy[shot[n].num].x;//初期弾x座標
boss_shot[n].bullet[k].y = enemy[shot[n].num].y;//初期弾y座標
boss_shot[n].bullet[k].angle = base_angle+PI2/30*i; //発射角度
boss_shot[n].bullet[k].knd = 1; //弾の種類
boss_shot[n].bullet[k].flag = 1; //弾の表示フラグ
boss_shot[n].bullet[k].cnt = 0; //カウンタ
boss_shot[n].bullet[k].graze = 1; //グレイズをいくつまでカウントするか
boss_shot[n].bullet[k].spd = 3; //弾の発射スピード
boss_shot[n].bullet[k].pattern= 0; //弾の起動パターン
boss_shot[n].bullet[k].state = 0; //弾のステータス
boss_shot[n].bullet[k].vx = 0; //弾の速度x成分
boss_shot[n].bullet[k].vy = 0; //弾の速度y成分
boss_shot[n].bullet[k].ax = 0; //弾の加速度x成分
boss_shot[n].bullet[k].ay = 0; //弾の加速度y成分
}
}
sound_se_flag[17]=1; //17番の音を鳴らすフラグを立てる
}
}
このように弾幕データをいれるだけでその弾幕になります。
またまた果たしてこんなコードでいいのかどうか疑問です…、あくまで我流だと言うことをお忘れなく・・。
私の書くコードは無駄に長いので読んでると長期休暇すらなくなってしまうでしょう^^;
今の時点で・・6万行位かな?と思います。(ファイル分割してるので行数はわかりませんが)
>自分とは住んでる世界がまったく違うんじゃないかと思ってしまうほどです
多分半年後にもう一度ご覧になったら何でそんなことを言っていたんだろうとお思いになると思いますよ^^;
というのも、私がC言語を勉強しだしてまだ2年弱なので。まだまだ全くの初心者です。
まず私がこのような質問サイトを作れるような人間じゃないのですが、Cについて、雑談交じりに気軽に話せる掲示板無いな~と思って作った何とも適当なサイトです(_ _|||)
元々意見交流や雑談目的で作った掲示板ですので、雑談でもお構いなくどうぞ~♪