今回こちらの掲示板にて質問させて頂こうと思ったものは
学校の課題として作っているゲームのシステムの一部です。
ゲーム内容としては中央に教室の画像を出し、その上で
プレイヤーを動かして四方八方から現れる、鉛筆などのアイテムを避けて
三分間耐久するゲームです。
言語はCで、今仮完成しているのはプレイヤーの移動とマップや他キャラのみです。
鉛筆やカバンなどの飛んでくる物体を
ランダムに複数出すようにしてそれぞれが画面端までちゃんと動くようにしたいです。
以下のコードでは複数は出るのですがバグが多く、
途中で左折したりアイテム表示が移動中に別のアイテムの画像に差し替わったりしてしまいます…。
どのようにコードを書き換えれば良いのか、アドバイスを頂きたいです。
よろしくお願いいたします。
NEW_ITEM.cpp
#include "tool/DxLib.h"
#include "etc1.h"
static int count=0;
static int x[6],y[6]; //座標を区間に分けている
static int randflag=1,Item_flag[8]={};
static int item[CHIP_ITEM];
static int xrand,yrand,itemrand_flag=0;
static int speed=3;
static int i=0;
static int syokix[6]={},syokiy[6]={},item_rand[6]={};
static int Draw_flag[6];
void ITEM_SET(){
for(int i=0;i<6;i++){
x[i]=165+syokix[i]*58; //165は範囲。x座標を5個の箱にそれぞれ入れておく
y[i]=80+syokiy[i]*58; //y座標も同じく
}
item[0]=LoadGraph("アイテム/スクバ.png");
item[1]=LoadGraph("アイテム/バスケ.png");
item[2]=LoadGraph("アイテム/鉛筆.png");
item[3]=LoadGraph("アイテム/教科書.png");
item[4]=LoadGraph("アイテム/空き缶.png");
}
void ITEM_FLAG(){
//フラグ生成
if(count%1000==0){//最初の0.5sでフラグ1、5sごとにランダムフラグを立てる
randflag=1;
}
if(count%100==0){ //0.5sと0.5sごとに実行
int i =0;
while(Item_flag[i]!=0)i++; //0に当たるまでwhile文で実行し続けることによって箱の中を確認し続ける
Item_flag[i]=1;
}
}
void ITEM_RAND(){
//ランダム生成
if(randflag==1){ //ランダムフラグが立っているのならば実行
if(itemrand_flag==1){ //更に別のランダムフラグが立っているのならば実行
xrand=GetRand(5);
yrand=GetRand(5);
syokix[i]=xrand; //syokixの中にはxrandで出た値を格納
syokiy[i]=yrand; //shokiyも同様
item_rand[i]=GetRand(4); //アイテムの種類を表す数字を格納
}
randflag=0; //ランダムフラグを最後に0にする
}
count++;
//デバッグ用
int Cr=GetColor(255,255,255);
DrawFormatString(0,0+i*20,Cr,"%d,%d,%d",syokix[i],syokiy[i],item_rand[i]);
DrawFormatString(400,0,Cr,"%d,%d,%d,time---%d",x[xrand],y[yrand],item[item_rand[i]],count);
}
void ITEM_MOVE(){
if((syokix[i]==1||syokix[i]==2||syokix[i]==3||syokix[i]==4)&&syokiy[i]==0){ //現れる場所確定
if(y[i]<=370){
DrawGraph(x[i],y[i],item[item_rand[i]],TRUE);
y[i]+=speed;
itemrand_flag=0;
Draw_flag[i]=0;
}else{
y[i]=80;
Item_flag[ i ]=0;
itemrand_flag=1;
Draw_flag[i]=1;
}
}else if((syokix[i]==1||syokix[i]==2||syokix[i]==3||syokix[i]==4)&&syokiy[i]==5){
if(y[i]>=80){
DrawGraph(x[i],y[i],item[item_rand[i]],TRUE);
y[i]-=speed;
itemrand_flag=0;
Draw_flag[i]=0;
}else{
y[i]=370;
Item_flag[i]=0;
itemrand_flag=1;
Draw_flag[i]=1;
}
}else if((syokiy[i]==1||syokiy[i]==2||syokiy[i]==3||syokiy[i]==4)&&syokix[i]==0){
if(x[i]<=455){
DrawGraph(x[i],y[i],item[item_rand[i]],TRUE);
x[i]+=speed;
itemrand_flag=0;
Draw_flag[i]=0;
}else{
x[i]=165;
Item_flag[i]=0;
itemrand_flag=1;
Draw_flag[i]=1;
}
}else if((syokiy[i]==1||syokiy[i]==2||syokiy[i]==3||syokiy[i]==4)&&syokix[i]==5){
if(x[i]>=165){
DrawGraph(x[i],y[i],item[item_rand[i]],TRUE);
x[i]-=speed;
itemrand_flag=0;
Draw_flag[i]=0;
}else{
x[i]=455;
Item_flag[i]=0;
itemrand_flag=1;
Draw_flag[i]=1;
}
}else{
randflag=1;
}
}
void ITEM_MAIN(){
ITEM_FLAG();
for(i = 0;i<6;i++ ){
ITEM_RAND();
if(Item_flag[ i ]==1){
ITEM_MOVE();
}
}
if(count%100000==0)
speed+=3;
}