ページ 1 / 1
10章でつまづいています
Posted: 2009年9月22日(火) 20:47
by 小夜
度々すみません。
先日、5章でつまずき 質問をさせて頂いた者です。
前回の質問ではload.cppの中がgraph.cppと全く同じになっていた、
という確認すれば気が付く簡単なミスだったので、今回はきっちり見直して質問をさせて頂きます。
今回は10章でつまずいてしまいました;
「敵を表示させる」の所です。
まず、変更後のソースを貼ります。
【function.h】
//char.cpp
GLOBAL void calc_ch();
GLOBAL void ch_move();
//graph.cpp
//描画メイン
GLOBAL void graph_main();
//ini.cpp
GLOBAL void first_ini();
//key.cpp
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//現在のパッド入力処理を行う関数
GLOBAL void GetHitPadStateAll();
//受け取ったパッド番号の現在の入力状態を返す
GLOBAL int CheckStatePad(unsigned int Handle);
//laod.cpp
//データのロード
GLOBAL void load();
GLOBAL void enemy_main();
GLOBAL void ini();
【GV.h】
#include "../../../include/DxLib.h"
#include "define.h"
#include "math.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
//画像用変数宣言部
GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
GLOBAL int img_board[40]; //ボードにつかう画像
//フラグ・ステータス変数
GLOBAL int func_state; //関数制御用変数
//構造体変数宣言部
GLOBAL ch_t ch; //キャラクタデータ宣言
GLOBAL configpad_t configpad;//コンフィグで設定したキー情報
GLOBAL int stage_count;
GLOBAL int img_enemy[3][9];//敵画像9枚分 X3体分
GLOBAL enemy_t enemy[ENEMY_MAX];
【struct.h】
//キャラクターに関する構造体
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img;
int slow; //スローかどうか
double x,y; //座標
}ch_t;
//パッドに関する構造体
typedef struct{
int key[PAD_MAX];
}pad_t;
//コンフィグに関する構造体
typedef struct{
int left,up,right,down,shot,bom,slow,start,change;
}configpad_t;
//敵に関する構造体
typedef struct{
//フラグ、カウンタ、移動パターン、向き、敵の種類、HP最大値、落とすアイテム、画像
int flag,cnt,pattern,muki,knd,hp,hp_max,item_n[6],img;
//座標、速度x成分、速度y成分、スピード、角度
double x,y,vx,vy,sp,ang;
//弾幕開始時間、弾幕の種類、弾の種類、色、状態、待機時間、停滞時間
int bltime,blknd,blknd2,col,state,wtime,wait;
}enemy_t;
【define.h】
//フィールドの広さ
#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448
//フィールドの左上の座標
#define FIELD_X 32
#define FIELD_Y 16
//パッドキーの最大数
#define PAD_MAX 16
#include "struct.h"
//敵の同時表示最大数
#define ENEMY_MAX 30
メッセージが長すぎる、とエラーになったので一旦きらせて頂きますね^^;
Re:10章でつまづいています
Posted: 2009年9月22日(火) 20:51
by 小夜
上記の続きです。
【main.cpp】
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
GetHitPadStateAll(); //現在のパッド入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//メインループ
switch(func_state){
case 0://初回のみ入る処理
load(); //データロード
first_ini();//初回の初期化
func_state=99;
break;
case 99://STGを始める前に行う初期化
ini();
func_state=100;
break;
case 100://通常処理
calc_ch(); //キャラクタ計算
ch_move(); //キャラクタの移動制御
enemy_main();//敵処理メイン
graph_main();//描画メイン
stage_count++;
break;
default:
printfDx("不明なfunc_state\n");
break;
}
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
【graph.cpp】
#include "../include/GV.h"
void graph_enemy(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy.flag==1){
DrawRotaGraphF(enemy.x+FIELD_X,enemy.y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy.img],TRUE);
}
}
}
void graph_ch(){
DrawRotaGraphF(ch.x+FIELD_X,ch.y+FIELD_Y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
void graph_board(){
DrawGraph( 0, 0,img_board[10],FALSE);
DrawGraph( 0, 16,img_board[11],FALSE);
DrawGraph( 0,464,img_board[12],FALSE);
DrawGraph(416, 0,img_board[20],FALSE);
}
void graph_main(){
graph_enemy();
graph_ch();
graph_board();
}
【enemy.cpp】
#include "../include/GV.h"
//敵の移動パターン0での移動制御
void enemy_pattern0(int i){
if(enemy.cnt<60){
enemy.y+=2.0;
}
if(enemy.cnt>60+240){
enemy.y-=2.0;
}
}
//敵データの登録
void enemy_enter(){
if(stage_count==100){//ゲームが始まって100カウントで登録
enemy[0].cnt =0;
enemy[0].muki =1;
enemy[0].flag =1;
enemy[0].bltime =150;
enemy[0].hp =1000;
enemy[0].hp_max =enemy[0].hp;
enemy[0].pattern=0;
enemy[0].x =FIELD_MAX_X/2;
enemy[0].y =-20;
}
}
//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy.flag==1){//その敵のフラグがオンになってたら
enemy_pattern0(i);
enemy.cnt++;
enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%18)/6;
//敵が画面から外れたら消す
if(enemy[i].x<-50 || FIELD_MAX_X+50<enemy[i].x || enemy[i].y<-50 || FIELD_MAX_Y+50<enemy[i].y)
enemy[i].flag=0;
}
}
}
//敵処理メイン
void enemy_main(){
enemy_enter();
enemy_act();
}
またエラー出ました;
次に残り全部を書きます。(何度もすみません!)
Re:10章でつまづいています
Posted: 2009年9月22日(火) 20:54
by 小夜
【ini.cpp】
#include "../include/GV.h"
//一番最初の初期化
void first_ini(){
configpad.down=0;
configpad.left=1;
configpad.right=2;
configpad.up=3;
configpad.bom=4;
configpad.shot=5;
configpad.slow=11;
configpad.start=13;
configpad.change=6;
}
//ゲームの初期化
void ini(){
stage_count=1;
memset(&ch,0,sizeof(ch_t));//自機データの初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}
【load.cpp】
#include "../include/GV.h"
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
続いて、エラーメッセージです。
ビルドしますと、「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」と出ます。
出力先の表示の所には、
1>c:\users\○○\desktop\○○\project\project\9章\mydat\source\load.cpp(10) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\○○\desktop\○○\project\project\9章\mydat\source\load.cpp(10) : error C2365: 'LoadDivGraph' : 再定義; 以前の定義は '関数' でした。
1> c:\users\○○\desktop\○○\project\project\include\dxlib.h(1594) : 'LoadDivGraph' の宣言を確認してください。
1>c:\users\○○\desktop\○○\project\project\9章\mydat\source\load.cpp(10) : error C2078: 初期化子の数が多すぎます。
1>c:\users\○○\desktop\○○\project\project\9章\mydat\source\load.cpp(10) : error C2440: '初期化中' : 'int [9]' から 'int' に変換できません。
1> この変換が可能なコンテキストはありません。
と表示されます。
今回は何度か確認したのでファイルの内容が同じだった、という事は無いと思います^^;
前回は皆様ありがとうございました!
今回もご指摘ほど よろしくお願い致します。
Re:10章でつまづいています
Posted: 2009年9月22日(火) 20:57
by でんすけ
とりあえず、わかるところから
load.cpp内の
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ); は
void load()内に入れてください。
Re:10章でつまづいています
Posted: 2009年9月22日(火) 21:22
by 小夜
回答ありがとうございます。
またお世話になりそうですね^^;
load.cpp内の ~ void load()内に入れてください。
>えぇと、それは
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] );
をvoid load()内に入れる つまり、
void load(LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ); )
という事でしょうか?
初歩的な質問ですみません;
Re:10章でつまづいています
Posted: 2009年9月22日(火) 21:37
by でんすけ
以下のようにしてください。
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] );
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] );
}
Re:10章でつまづいています
Posted: 2009年9月22日(火) 21:37
by MNS
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
↓
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
}
こういうことだと思いますが
Re:10章でつまづいています
Posted: 2009年9月22日(火) 22:02
by 小夜
出来ました!!
そういう事だったんですね!
本当に助かりました。
でんすけさん、MNSさん どちらもありがとうございました!
またつまずくと思いますので、その時はお力添えお願い致します。
Re:10章でつまづいています
Posted: 2009年9月22日(火) 22:05
by Tatu
>>小夜 さん
皆さんが回答しているので、同じことは書きません。
龍神録プログラミングの館ではプロジェクトを一括ダウンロードすることも可能なので、
ダウンロードしたものと見比べるという方法もとってはいかがでしょうか。
あと、ソースコードを乗せるときには
<pre>
コード
</pre>
というようにpreタグで囲ってください。
ただし、タグは半角で入力してください。
複数のレスを使う場合は各レスごとにpreタグで囲ってください。
規約に一通り目を通しておくとよいでしょう。
>>Dixq(管理人)さん
前にも同じ質問内容を見かけたきがするので、
10章のページを見てみましたが、
敵の画像の追加について以下のようになっていたのが問題だと思います。
--load.cppに以下を追加--
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
このかきかただと、load.cppの最後に追加すると思ってしまい、
この文をload関数の外にかくようです。
--load.cppのload関数内に以下を追加--と書き直してはいかがでしょうか。
あと、些細なことですがfunction.hの注釈に//laod.cppとあるのが気になりました。