アクションゲームにおける敵キャラとマップの管理
http://dixq.net/forum/viewtopic.php?f=3&t=11517
C#勉強とマップエディタ作りの息抜きに軽くリンゴ拾いゲームを作り、
この際だからCSVについての勉強もついでにやっちゃおうと思い、
落ちてくるリンゴをCSVで管理する試みをしました。
今回読み込みたいCSVの中身はこんな感じです。
/カウンタ,種類,x座標,y座標,y加速度
/cnt,knd,x座標,y座標,vy
100,0,124,10,5
110,0,300,20,5
120,0,480,10,5
130,0,100,15,5
140,0,230,13,5
150,0,550,7,5
160,0,340,10,5
170,0,80,15,5
180,0,100,25,5
190,0,440,22,5
そしてこれを読み込もうと試みたソースコードがこちら
#include "DxLib.h"
#include "Key.h"
#include "apple.h"
int aimg[2];//リンゴ画像変数
int backimg1,backimg2;//背景画像変数
int stage_count=1;//ゲーム全体のカウント。今の所リンゴ関係でしか使わないのでとりあえずここに
//画像ロード関数
void aload(){
LoadDivGraph("img/apple.png",2,2,1,31,31,aimg);
backimg1=LoadGraph("img/haikei1.bmp");
backimg2=LoadGraph("img/haikei2.png");
}
//ゲームカウントなどの計算関数
void aculc(){
stage_count++;
}
//csv読み込み関数。よくわからないのでとりあえず龍神録のをまんま真似しました。
void aload_story(A_FILE a_file[APPLE_ORDER_MAX]){
int n,num,i,fp;
char fname[32]={"dat/リンゴ.csv"};
int input[64];
char inputc[64];
fp=FileRead_open(fname);
if(fp==NULL){
printfDx("read error\n");
return;
}
for(i=0;i<2;i++)
while(FileRead_getc(fp)!='\n');
n=0,num=0;
while(1){
for(i=0;i<64;i++){
inputc[i]=input[i]=FileRead_getc(fp);
if(inputc[i]=='/'){
while(FileRead_getc(fp)!='\n');
i=-1;
continue;
}
if(input[i]==','||input[i]=='\n'){
inputc[i]='\0';
break;
}
if(input[i]==EOF){
goto EXFILE;//終了
}
}
switch(num){
case 0: a_file[n].cnt =atoi(inputc);break;
case 1: a_file[n].knd =atoi(inputc);break;
case 2: a_file[n].x =atoi(inputc);break;
case 3: a_file[n].y =atoi(inputc);break;
case 4: a_file[n].vy =atoi(inputc);break;
}
num++;
if(num==5){
num=0;
n++;
}
}
EXFILE:
FileRead_close(fp);
}
//からっぽなリンゴ検索関数
int apple_num_search(){
APPLE apple[APPLE_MAX];
for(int i=0;i<APPLE_MAX;i++){
if(apple[i].flag==false){
return i;
}
}
return -1;
}
//読み込んだ数値をリンゴに代入する関数。
void aenter(APPLE apple[APPLE_MAX],A_FILE a_file[APPLE_ORDER_MAX]){
int i,j;
for(j=0;j<APPLE_ORDER_MAX;j++){
if(a_file[j].cnt==stage_count){
if((i=apple_num_search())!=-1){
apple[i].cnt =0;
apple[i].flag =true;
apple[i].dropflag=true;
apple[i].x =a_file[j].x;
apple[i].y =a_file[j].y;
apple[i].vy =a_file[j].vy;
apple[i].vx =0;
apple[i].knd =a_file[j].knd;
}
}
}
}
//リンゴの動き
void amove(APPLE apple[APPLE_MAX]){
for(int i=0;i<APPLE_MAX;i++){
if(apple[i].dropflag==true){//dropflagが建ったら
apple[i].y+=apple[i].vy;//5下へ加速
}
}
}
//リンゴ描画関数
void agraph(APPLE apple[APPLE_MAX]){
for(int i=0;i<APPLE_MAX;i++){
if(apple[i].flag==true){
DrawRotaGraphF(apple[i].x,apple[i].y,1.0f,0.0f,aimg[apple[i].knd],TRUE);
}
}
}
リンゴがいつまでたっても現れません。
これはCSVファイルを読み込めてないのでしょうか?
アドバイスお願いします。