その上から降ってくる星の部分が現在画像のようになっていて、1つづつ降ってくるようにしたいのですが上手くいきません。
STAR_NUMを利用してループしているところで画像のようになっているのではないかと思います。
C言語はやさしいCの内容はほぼできる程度です。よろしくお願いします。
(<img>の使い方が分からなかったので画像リンクです)
https://d.kuku.lu/1c8a2851a
#include "DxLib.h"
#include <stdlib.h>
#include <time.h>
#define STAR_NUM 50
struct Position
{
int x;
int y;
int isExist; //存在したらTRUE、いなかったらFALSE
};
struct Position a; //虫取り網の場所
struct Position s[STAR_NUM]; //星の場所
struct Position w; //アイテムの場所
int count;
int amispeed;
int score;
int star_num = STAR_NUM;
int Cr = GetColor(255, 255, 255);
//初期化
void init()
{
int i;
score = 0; //取った星の数
a.x = 130, a.y = 300; //網の座標
for (i = 0; i < STAR_NUM; i++)
{
s[i].isExist = TRUE;
s[i].x = 0;
s[i].y = 0;
}
}
//以下3つ 星の発生、落下
//空いている配列の値を返す
int star_pre()
{
int i;
for (i = 0; i < STAR_NUM; i++)
{
if (s[i].isExist == FALSE)
return i;
}
return -1;
}
//星の発生場所
void star_enter()
{
int i;
srand((unsigned)time(NULL));
i = star_pre(); //空いている弾情報格納要素番号
if (i != -1)
{
s[i].isExist = TRUE; //弾の存在フラグを立てる
s[i].x = 0 + rand() % 585; //乱数の生成
s[i].y = -10; //y座標は0
}
}
//星の落下と当たり判定
void star_main()
{
int i;
if (count % 60 == 0) //60カウントに一回
star_enter(); //発射
for (i = 0; i < STAR_NUM; i++)
{
if (s[i].isExist == TRUE)
{
s[i].y += 5;
if (s[i].y > a.y + 65 && s[i].x >= a.x + 125 && s[i].x <= a.x + 200 ) //かごの中にあるか?
s[i].isExist = FALSE; //弾を消す
else if (s[i].y == 480) //画面の中にあるか?
s[i].isExist = FALSE; //弾を消す
else
s[i].isExist = TRUE;
}
}
}
//網の操作
void MoveAmi()
{
amispeed = 20;
if (CheckHitKey(KEY_INPUT_D) == 1 || CheckHitKey(KEY_INPUT_RIGHT) == 1)
a.x += amispeed; //右
if (CheckHitKey(KEY_INPUT_A) == 1 || CheckHitKey(KEY_INPUT_LEFT) == 1)
a.x -= amispeed; //左
if (a.x <= -150)
a.x = -150;
if (a.x >= 410)
a.x = 410;
};
void Draw()
{
int i;
//画像読み込み
static int BackHandle = LoadGraph("back.png"); //640×480
static int Handle1 = LoadGraph("mushitoriami.png"); //150×150
static int Handle2 = LoadGraph("star_yellow.png"); //55×51
static int Handle3 = LoadGraph("star5.png"); //70×314
//描画
DrawGraph(0, 0, BackHandle, TRUE);
DrawGraph(a.x, a.y, Handle1, TRUE);
for (i = 0; i < STAR_NUM; i++)
{
if (s[i].isExist == FALSE)
continue;
DrawGraph(s[i].x, s[i].y, Handle2, TRUE);
}
DrawFormatString(0, 0, Cr, "SCORE:%d", score);
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// ウインドウモードに変更
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) //DXライブラリ初期化処理
return -1; //エラーが起きたら直ちに終了
init();
while (1)
{
DrawFormatString(40, 100, Cr, "PUSH ENTER.");
//エンターキーが押されるまで待機
while (!CheckHitKey(KEY_INPUT_RETURN))
{
//メッセージループに代わる処理をする
if (ProcessMessage() == -1)
{
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}
}
for (int time = 5000; time >= 0; time--)
{
//網
MoveAmi();
//星
star_main();
//描画
Draw();
DrawFormatString(0, 20, Cr, "TIME:%d", time);
WaitTimer(50);
ClearDrawScreen();
}
}
WaitKey(); //キーの入力待ち(『WaitKey』を使用)
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}