すみません、計算してたら頭こんがらがりました

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
結城
記事: 52
登録日時: 14年前
連絡を取る:

すみません、計算してたら頭こんがらがりました

#1

投稿記事 by 結城 » 14年前

お久しぶりです
何となしにあるゲームの模倣プログラムを組み立てていたら→ちなみにAQUAというやつです……知ってる方いたらよろしく!
どうすれば思い通りの描画結果が得られるのかが分からなくなってしまいました
コードがごちゃごちゃしているせいなのかもしれませんが……
誰かよろしくお願いします!
↓今の実行状況ですが正方形に収まらず右にはみ出してしまっています……
状況.png
現在の画面状況です
状況.png (28.81 KiB) 閲覧数: 2996 回
ちなみに、なぜ適当に描画してしまって黒で塗りつぶしてしまわないかというと
ぞれだと後々使いまわして、重ね合わせて描画するときに変な感じになるからです

環境です
レトロなのは仕様ですwそっちの方が使いやすいので
Windows XP Home SP3
VC++ Express 2005

コードです 定義部分と実行コード部分のみです
効率重視のため、グローバル変数に値を代入して定められた順番に描画していくという方式をとっています

コード:

//draw.cpp一部//-----------------------------------------------------------------------------------------
void setdt(int n,int x1,int y1,int x2,int y2,int x3,int y3,DWORD color,int fillflag,int z)
{
	dt[n].x1 = x1;
	dt[n].y1 = y1;
	dt[n].x2 = x2;
	dt[n].y2 = y2;
	dt[n].x3 = x3;
	dt[n].y3 = y3;
	dt[n].color = color;
	dt[n].fillflag = fillflag;
	dt[n].dbase.mode = 0;
	dt[n].dbase.useflag = TRUE;
	dt[n].dbase.z = z;
}//DrawTriangleへ代入するためのグローバル変数です
//-------------------------------------------------------------------------------------------------------

//define.h一部//-------------------------------------------------------------------------------------
#define IWIDTH	854
#define IHEIGHT	480
#define CE_X	IWIDTH/2.0
#define CE_Y	IHEIGHT/2.0
//-------------------------------------------------------------------------------------------------------

//main.cpp一部(main.cppに統合していますが、その内ほかのファイルに移す予定です)//-----
void alert()//問題の関数
{
	//DrawTriangle((CE_X)-140,(CE_Y)-46,(CE_X)-130,(CE_Y)-46,(CE_X)-49,(CE_Y)+45,GetColor(210,210,250),1);
	//DrawTriangle((CE_X)-130,(CE_Y)-46,(CE_X)-49,(CE_Y)+45,(CE_X)-39,(CE_Y)+45,GetColor(210,210,250),1);
	setdb(0,(CE_X)-150,(CE_Y)-50,(CE_X)+150,(CE_Y)-49,GetColor(210,210,250),1,1);
	setdb(1,(CE_X)-150,(CE_Y)+50,(CE_X)+150,(CE_Y)+49,GetColor(210,210,250),1,2);
	int xt = 0;
	int yt = 0;
	int xtt = 0;
	int ytt = 0;
	int dx = 0;
	int dy = 0;
	int dx2 = 0;
	int dy2 = 0;
	int dx3 = 0;
	int dy3 = 0;
	int j = 0;
	int k = 0;
	for(int i = 0;i<20;i++)
	{
		xt = (CE_X) - 150;
		j += 10;
		xtt = xt + j - 100;
		if(xtt < xt)
		{
			dx = xt;
		}else{
			if(xtt > xt + 80)
			{
				dx = xt + 80;
			}else{
				dx = xtt;
			}
		};
		if(xtt < xt)
		{
			dy = (CE_Y) - 45 + j ;
		}else{
			dy = (CE_Y) - 45;
		}

		if(xtt < xt)
		{
			dx2 = xt;
		}else{
			if(xtt > xt + 80)
			{
				dx2 = xt + 80;
			}else{
				dx2 = xtt + 6;
			}
		};
		if(xtt < xt)
		{
			dy2 = (CE_Y) - 45 + j - 6;
		}else{
			dy2 = (CE_Y) - 45;
		}

		if(xtt < xt)
		{
			dx3 = xt + (90 - j);
		}else{
			if(xtt > xt + 80)
			{
				dx3 = xt + 80;
			}else{
				dx3 = xtt + 90;
			}
		};
		if(xtt < xt)
		{
			dy3 = (CE_Y) + 45;
		}else{
			if(xtt > xt + 80)
			{
				dy3 = (CE_Y) + 45 + 200 - j;
			}else{
				dy3 = (CE_Y) + 45;
			}
		}
		setdt(
			k,
			dx,
			dy,
			dx2,
			dy2,
			dx3,//解決できていない変数
			dy3,//解決できていない変数その2
			GetColor(210,210,250),
			1,
			3);
		k++;
		setdt(
			k,
			dx2,
			dy2,
			dx3,
			dy3,
			dx3 + 6,
			dy3,
			GetColor(210,210,250),
			1,
			3);
		k++;
	}

}


以上です
宜しければどうかよろしくお願いいたします

[hr]

追記です
setdt(...)はDrawTriangleに対するグローバル変数をセットする関数です(分かりにくくてごめんなさい……)
最後に編集したユーザー 結城 on 2011年6月07日(火) 00:01 [ 編集 1 回目 ]
ANGE;ART

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: すみません、計算してたら頭こんがらがりました

#2

投稿記事 by h2so5 » 14年前

「思い通りの描画結果」がどんな状態なのか教えてください。

アバター
結城
記事: 52
登録日時: 14年前
連絡を取る:

Re: すみません、計算してたら頭こんがらがりました

#3

投稿記事 by 結城 » 14年前

↓こんな感じでピンクの枠内の領域のみ表示したかったんです(もちろんピンクの線とかは描画しません)
こうなるはずだった.png
こうなるはずでした
こうなるはずだった.png (41.54 KiB) 閲覧数: 2981 回
ANGE;ART

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: すみません、計算してたら頭こんがらがりました

#4

投稿記事 by softya(ソフト屋) » 14年前

そもそも何故にDrawTriangle? DrawLineじゃダメなのでしょうか?
動くところ見てみたいのでソースコード全体を添付してもらえますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
結城
記事: 52
登録日時: 14年前
連絡を取る:

Re: すみません、計算してたら頭こんがらがりました

#5

投稿記事 by 結城 » 14年前

すみません・・・コードを弄繰り回しているうちに自己解決してしまいました
解決したコードをのせておきます

コード:

void alert()
{
	setdb(0,(CE_X)-150,(CE_Y)-50,(CE_X)+150,(CE_Y)-49,GetColor(210,210,250),1,1);//グローバル変数へDrawBox変数の登録
	setdb(1,(CE_X)-150,(CE_Y)+50,(CE_X)+150,(CE_Y)+49,GetColor(210,210,250),1,2);
	int xt = 0;
	int yt = 0;
	int xtt = 0;
	int ytt = 0;
	int dx = 0;
	int dy = 0;
	int dx2 = 0;
	int dy2 = 0;
	int dx3 = 0;
	int dy3 = 0;
	int dx4 = 0;
	int dy4 = 0;
	int j = 0;
	int k = 0;
	for(int i = 0;i<18;i++)
	{
		xt = (CE_X) - 150;
		j += 10;
		xtt = xt + j - 100;
		if(xtt < xt)
		{
			dx = xt;
			dy = (CE_Y) - 45 + j ;
			dx2 = xt;
			dy2 = (CE_Y) - 45 + j - 6;
			dx3 = xt + (90 - j);
			dx4 = dx3 + 6;
			dy3 = (CE_Y) + 45;
			dy4 = dy3;
		}else{
			dy = (CE_Y) - 45;
			dx2 = xtt + 6;
			dy2 = (CE_Y) - 45;
			if(xtt > xt + 90)
			{
				dx = xt + 80;
			}else{
				dx = xtt;
			}
			if(dx3 >= xt + 90)
			{
				dx3 = xt + 90;
				dx4 = dx3;
			}else{
				dx3 = xtt + 90;
				dx4 = dx3;
			}
			if(dx3 >= xt + 90)
			{
				dy3 = (CE_Y) - 45 - ( xtt - ( xt + 90 ) );
				dy4 = dy3 - 6;
			}else{
				dy3 = (CE_Y) + 45;
				dy3 = dy4;
			}
		}

		setdt(
			k,
			dx,
			dy,
			dx2,
			dy2,
			dx3,
			dy3,
			GetColor(210,210,250),
			1,
			3);//グローバル変数へDrawTriangle変数の登録
		k++;
		setdt(
			k,
			dx2,
			dy2,
			dx3,
			dy3,
			dx4,
			dy4,
			GetColor(210,210,250),
			1,
			3);
		k++;
	}

}
※途中のif文はわざと分割しています
次いでスクリーンショットも載せておきます
結果.png
正しく表示された・・・
結果.png (29.23 KiB) 閲覧数: 2866 回
今度はこの関数の一部(スプライトを描画する部分)をさまざまな形で描画できるように多様化できたらいいのですが・・・
ANGE;ART

閉鎖

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