簡単なゲームをつくっているのですが...

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
プー

簡単なゲームをつくっているのですが...

#1

投稿記事 by プー » 8年前

ふうせんがでてきてそれをクリックすると消えるというプログラムを作っているのですが、
1回風船が出てきて左クリックを長押ししていて、次の風船にアイコンがあたると消えてしまいます。
質問は
どうしたら1個目から割れるようになるか
どうしたら長押しではなく、カチッと1回押したときだけ割れるようになるか
です。

コード:

#include <DxLib.h>

int ootani();

int Key[256];
			  
int gpUpdateKey() {
	char tmpKey[256];
	GetHitKeyStateAll(tmpKey);
	for (int i = 0; i<256; i++) {
		if (tmpKey[i] != 0) {
			Key[i]++;     
		}
		else {              
			Key[i] = 0;   
		}
	}
	return 0;
}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);


	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
		ootani();
	}

	DxLib_End();
	return 0;
}

int ootani() {
	int mouse = GetMouseInput();
	int mx, my;
	int x = GetRand(500), y = 336;
	int x2 = x + 100, y2 = y + 155;
	int handle = LoadGraph("画像/husen.png");
	GetMousePoint(&mx, &my);

	for (y = 336; y > -300 && ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0;) {
		DrawGraph(x, y, handle, TRUE);
		GetMousePoint(&mx, &my);
		y = y - 10;
		x2 = x + 100, y2 = y + 155;
		Sleep(28);
		if (mx >= x && mx <= x2 && my >= y  && my <= y2) {
			if (mouse & MOUSE_INPUT_LEFT) {
				return 0;
			}
		}

		DrawFormatString(10, 10, GetColor(0, 255, 0), "x=%d,y=%d\nx=%d,y=%d", mx, my, x, y);
			
	}

	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 簡単なゲームをつくっているのですが...

#2

投稿記事 by みけCAT » 8年前

まず、3大処理が複数ある、良くない実装をやめるべきでしょう。
同じ画像を開放せずに複数回読み込むのもよくないでしょう。
その上で、
プー さんが書きました:どうしたら1個目から割れるようになるか
マウスのボタンが押されているかの判定を毎フレームやるようにしましょう。
プー さんが書きました:どうしたら長押しではなく、カチッと1回押したときだけ割れるようになるか
「このフレームで押されているか」の情報だけでなく「前のフレームで押されていたか」の情報も保持し、
「このフレームで押されている、かつ前のフレームでは押されていない」ときのみ割れるようにするといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 簡単なゲームをつくっているのですが...

#3

投稿記事 by みけCAT » 8年前

実装例です。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

プー

Re: 簡単なゲームをつくっているのですが...

#4

投稿記事 by プー » 8年前

みけCATさんのアドバイスでマイフレームマウスの入力状態を更新するというのに気づきました!ありがとうございました。
こんな感じになりました。

コード:

#include <DxLib.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(FALSE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
	int mouse = GetMouseInput();
	int mx, my;
	int x = GetRand(500), y = 336;
	int x2 = x + 100, y2 = y + 155;
	int handle = LoadGraph("画像/husen.png");
	int hundle = LoadGraph("画像/弾00.png");
	GetMousePoint(&mx, &my);

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
		mouse = GetMouseInput();
		if (y < -300)y = 336, x = GetRand(500);
			DrawGraph(x, y, handle, TRUE);
			GetMousePoint(&mx, &my);
			DrawGraph(mx, my, hundle, TRUE);
			y = y - 6;
			x2 = x + 100, y2 = y + 155;
			
			if (mx >= x && mx <= x2 && my >= y  && my <= y2) {
				if (mouse & MOUSE_INPUT_LEFT) {
					y = -300;
				}
			}
			
		}
	}

返信

“C言語何でも質問掲示板” へ戻る