ページ 11

クリック回数を利用したループ

Posted: 2022年11月20日(日) 12:31
by まりも。
質問です。私は最近C++を勉強をしている初心者なのですが学校の課題がわからず困っています。
問題は、座標の位置に半径10cmの円を描画するというものです。

ひとつ前の課題で配列にクリックしたときの座標を設定するということをしました。
これです↓

コード:

if (g_pInput->IsMouseKeyPush(MOFMOUSE_LBUTTON)) {
		
		//記録済みマウスの座標を1つ後ろにずらす
		for (int i = HISTORY_MAX - 1; i > 0; i--) {

			hist_mx[i] = hist_mx[i-1];
			hist_my[i] = hist_my[i-1];

		}
		//配列の先頭に現在のマウス座標を記録
		hist_mx[0] = mx;
		hist_my[0] = my;

		//クリック回数を加算
		clickCount++;
	}
hist_mx[0]はxの座標配列      hist_my[0]はyの座標配列
mx,myはクリックしたときの座標  HISTORY_MAX は10です。

今回の問題文をそのまま書くと
クリックをしていない場合hist_mx/hist_myの配列には描くべき座標はいっていません。
一回クリックした時点でhist_mx[0]/hist_my[0]に記録されます。
そのため、単純に配列の要素分を繰り返せばよいのではなく配列要素数を超えない範囲で、クリックした回数分繰り返す必要があります。配列要素数は定数HISTORY_MAXに、クリック回数は変数clickCount記録されています。
<>
描画はfor文を使う、描画は
CGraphicsUtilities::RenderCircle(hist_mx[?], hist_my[?], 10, MOF_XRGB(0, 255, 0));を使う

コード:

//演習4&課題4:クリックした座標位置に円を描画

	int a;
	for (a = clickCount; a < HISTORY_MAX; a++) 
	{
		CGraphicsUtilities::RenderCircle(hist_mx[a-1], hist_my[a-1], 10, MOF_XRGB(0, 255, 0));
	}
これは私が書いてみたやつです、
初めて掲示板を使うので質問内容がわかりにくかったらすみません。

Re: クリック回数を利用したループ

Posted: 2022年11月20日(日) 23:56
by みけCAT
クリックした座標は、hist_mx および hist_my の0番目以上 clickCount 番目未満の要素に入っているはずなので、

コード:

	int a;
	for (a = 0; a < clickCount && a < HISTORY_MAX; a++) 
	{
		CGraphicsUtilities::RenderCircle(hist_mx[a], hist_my[a], 10, MOF_XRGB(0, 255, 0));
	}
とするといいかもしれません。

Re: クリック回数を利用したループ

Posted: 2022年11月21日(月) 09:30
by まりも。
出来ました!!ありがとうございます。
おこがましくて申し訳ないのですが、同じ問題をfor文の書き方を変えて書くことはできますでしょうか。

Re: クリック回数を利用したループ

Posted: 2022年11月21日(月) 19:08
by みけCAT
まりも。 さんが書きました:
1年前
同じ問題をfor文の書き方を変えて書くことはできますでしょうか。
できます。
例えば、単純な書き換えだと

コード:

	int a = 0;
	for (; ;) 
	{
		if (!(a < clickCount && a < HISTORY_MAX)) break;
		CGraphicsUtilities::RenderCircle(hist_mx[a], hist_my[a], 10, MOF_XRGB(0, 255, 0));
		a++;
	}
とできます。
何か具体的な条件はありますか?

Re: クリック回数を利用したループ

Posted: 2022年11月21日(月) 23:25
by まりも。
ありがとうございます!無事完成出来ました
特に条件はなかったです。とても助かりました!!!