#3
by あたっしゅ » 2年前
東上☆海美☆「
.png ファイルがないので、DrawBox() や DrawLine() で、描いています。
init() の中で、isExist を TRUE で初期化していたので、
最初は、星 STAR_NUM 個が、一つに重なって、落下していたみみ。
star_main() の中をいじったみみ。
あと、srand((unsigned)time(NULL)); と LoadGraph() をメインループの外に出しましたみみ。
」
コード:
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21286&sid=cf6acf862baddc1c27a0c7b82fb3da4d
// キャッチゲーム - ミクプラ(ja)
//
#include "DxLib.h"
#include <stdlib.h>
#include <time.h>
//#define STAR_NUM 50
#define STAR_NUM 5
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);
// Draw() から移動
int BackHandle; //640×480
int Handle1; //150×150
int Handle2; //55×51
int Handle3; //70×314
// Draw() から移動 終わり
//初期化
void init0()
{
// star_enter() から移動
srand((unsigned)time(NULL));
// Draw() から移動
//画像読み込み
BackHandle = LoadGraph("back.png"); //640×480
Handle1 = LoadGraph("mushitoriami.png"); //150×150
Handle2 = LoadGraph("star_yellow.png"); //55×51
Handle3 = LoadGraph("star5.png"); //70×314
// Draw() から移動 終わり
// 描画先画面を裏画面にセット
SetDrawScreen(DX_SCREEN_BACK);
}
//初期化
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].isExist = FALSE;
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カウントに一回
if (count++ % 20 == 0) //20 カウントに一回
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; //弾を消す
score += 1;
}
//else if (s[i].y == 480) //画面の中にあるか?
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);
DrawBox(a.x, a.y, a.x + 150, a.y + 150, GetColor(128, 128, 128), TRUE);
DrawLine(a.x+150, a.y + 50, a.x + 200, a.y + 150, GetColor(128, 128, 128), TRUE);
DrawLine(a.x+200, a.y + 150, a.x + 250, a.y + 50, GetColor(128, 128, 128), TRUE);
for (i = 0; i < STAR_NUM; i++)
{
if (s[i].isExist == FALSE)
continue;
//DrawGraph(s[i].x, s[i].y, Handle2, TRUE);
DrawBox(s[i].x, s[i].y, s[i].x+50, s[i].y+50, GetColor( 255, 255, 0 ), 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();
init0();
while (1)
{
DrawFormatString(40, 100, Cr, "PUSH ENTER.");
ScreenFlip();
//エンターキーが押されるまで待機
while (!CheckHitKey(KEY_INPUT_RETURN))
{
//メッセージループに代わる処理をする
if (ProcessMessage() == -1)
{
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}
}
init();
int time = 5000;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
//for (int time = 5000; time >= 0; time--)
{
if (--time < 0) {
break;
}
//網
MoveAmi();
//星
star_main();
//描画
Draw();
DrawFormatString(0, 20, Cr, "TIME:%d", time);
WaitTimer(50);
//ClearDrawScreen();
}
}
//WaitKey(); //キーの入力待ち(『WaitKey』を使用)
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}
// end.
東上☆海美☆「
.png ファイルがないので、DrawBox() や DrawLine() で、描いています。
init() の中で、isExist を TRUE で初期化していたので、
最初は、星 STAR_NUM 個が、一つに重なって、落下していたみみ。
star_main() の中をいじったみみ。
あと、srand((unsigned)time(NULL)); と LoadGraph() をメインループの外に出しましたみみ。
」
[code]
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21286&sid=cf6acf862baddc1c27a0c7b82fb3da4d
// キャッチゲーム - ミクプラ(ja)
//
#include "DxLib.h"
#include <stdlib.h>
#include <time.h>
//#define STAR_NUM 50
#define STAR_NUM 5
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);
// Draw() から移動
int BackHandle; //640×480
int Handle1; //150×150
int Handle2; //55×51
int Handle3; //70×314
// Draw() から移動 終わり
//初期化
void init0()
{
// star_enter() から移動
srand((unsigned)time(NULL));
// Draw() から移動
//画像読み込み
BackHandle = LoadGraph("back.png"); //640×480
Handle1 = LoadGraph("mushitoriami.png"); //150×150
Handle2 = LoadGraph("star_yellow.png"); //55×51
Handle3 = LoadGraph("star5.png"); //70×314
// Draw() から移動 終わり
// 描画先画面を裏画面にセット
SetDrawScreen(DX_SCREEN_BACK);
}
//初期化
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].isExist = FALSE;
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カウントに一回
if (count++ % 20 == 0) //20 カウントに一回
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; //弾を消す
score += 1;
}
//else if (s[i].y == 480) //画面の中にあるか?
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);
DrawBox(a.x, a.y, a.x + 150, a.y + 150, GetColor(128, 128, 128), TRUE);
DrawLine(a.x+150, a.y + 50, a.x + 200, a.y + 150, GetColor(128, 128, 128), TRUE);
DrawLine(a.x+200, a.y + 150, a.x + 250, a.y + 50, GetColor(128, 128, 128), TRUE);
for (i = 0; i < STAR_NUM; i++)
{
if (s[i].isExist == FALSE)
continue;
//DrawGraph(s[i].x, s[i].y, Handle2, TRUE);
DrawBox(s[i].x, s[i].y, s[i].x+50, s[i].y+50, GetColor( 255, 255, 0 ), 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();
init0();
while (1)
{
DrawFormatString(40, 100, Cr, "PUSH ENTER.");
ScreenFlip();
//エンターキーが押されるまで待機
while (!CheckHitKey(KEY_INPUT_RETURN))
{
//メッセージループに代わる処理をする
if (ProcessMessage() == -1)
{
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}
}
init();
int time = 5000;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
//for (int time = 5000; time >= 0; time--)
{
if (--time < 0) {
break;
}
//網
MoveAmi();
//星
star_main();
//描画
Draw();
DrawFormatString(0, 20, Cr, "TIME:%d", time);
WaitTimer(50);
//ClearDrawScreen();
}
}
//WaitKey(); //キーの入力待ち(『WaitKey』を使用)
DxLib_End(); //DXライブラリ使用の終了処理
return 0; //ソフトの終了
}
// end.
[/code]