クォータービューでマップを斜めに並べる

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

クォータービューでマップを斜めに並べる

#1

投稿記事 by charaza » 14年前

いろんなRPGのようなクォータービュー(斜め視点)のマップの作り方のサイトを見てきたのですが、
マップ(ひし形)を並べるだけの基本的なことが描いてあるところが少なく(キャラの描画とかでてきてしまう)、
そして参考になるサイトがあったものの、思っていた並べ方と少し違ったのでここで質問させていただくことにしました。

まず、あるサイトを参考にさせてもらって一応作ることができたのですが、その並び方が、クォータービューで並べる順番でいうと、

,,01,11,21,31,41,51,61,71,81,91
02,12,22,32,42,52,62,72,82,92,,
,,03,13,23,33,43,53,63,73,83,93
04,14,24,34,44,54,64,74,84,94,,
,,05,15,25,35,45,55,65,75,85,95
06,16,26,36,46,56,66,76,86,96,,
,,07,17,27,37,47,57,67,77,87,97
08,18,28,38,48,58,68,78,88,98,,
,09,19,29,39,49,59,69,79,89,99,
10,20,30,40,50,60,70,80,90,100

こんなかんじで、それのコードが

コード:

int getOffsetX(int x,int y){
	int startx=12,stepx=48,offsetx=0;
	if(y==0 || y%2==0)
		offsetx=24;

return (startx+offsetx)+(x*stepx); 
}

int getOffsetY(int y){
	int starty=0,stepy=12,offsety=0;     
	return (starty+offsety)+(y*stepy); 
}
 

void DrawMap()
{
	int xx,yy;
	int x=20,y=20;
	for(yy=0;yy<20;++yy) 
	{
		for(xx=0;xx<20;++xx)
		{
			DrawGraph(getOffsetX(xx,yy)-CameraX,getOffsetY(yy)-CameraY,chip[(Map1[yy][xx])-1],TRUE); //マップ描画
		}
	} 

	DrawGraph(PlayerViewX,PlayerViewY,chip[1],TRUE);//プレイヤー
}

こんなかんじになっているのですが、これでも良いんですが、
私が作りたかったのはマップの端がキザギザにならない、チェスのボードのような

,,,,,,,,,,,,,,,,01,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,11,02,,,,,,,,,,,,,,,
,,,,,,,,,,,,21,12,03,,,,,,,,,,,,,
,,,,,,,,,,31,22,13,04,,,,,,,,,,,
,,,,,,,,41,32,23,14,05,,,,,,,,,
,,,,,,51,42,33,24,15,06,,,,,,,,
,,,,61,52,43,34,25,16,07,,,,,,
,,71,62,53,44,35,26,17,08,,,,
81,72,63,54,45,36,27,18,09,,
,,82,73,64,55,46,37,28,19,10
,,,,83,74,65,56,47,38,29,20,,
,,,,,,84,75,66,57,48,39,30,,,,
,,,,,,,,85,76,67,58,49,40,,,,,
,,,,,,,,,,86,77,68,59,50,,,,,,,
,,,,,,,,,,,,87,78,69,60,,,,,,,,
,,,,,,,,,,,,,,88,79,70,,,,,,,,,,
,,,,,,,,,,,,,,,,89,80,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,90,,,,,,,,,,,,,

こんなかんじの全体でひし形ひなるような並び方を求めているんです。
結構違うと思うのですが、どう変えればこう並べることができるんでしょうか…
最初の描画位置から右下にどんどん並べて行って、一行分並べたら最初の描画位置の左下からまた右下へ並べる感じです…
これをどうプログラムで組んでいけばいいか教えてください…

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

Re: クォータービューでマップを斜めに並べる

#2

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

それは単に正方形のマップを斜めに座標計算させるだけで良いじゃないでしょうか?
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
と言うマップを座標計算だけで

コード:

      00
    10 01
  20 11 02
30 21 12 03
  31 22 13
    32 23
     33
の形に表示できますよ。
マップパーツは表示上の菱形(実際には半透明のある四角形)じゃないとダメですけどね。

座標計算は、パーツのx,yをうまく表示座標になるように計算させます。
partsx,partsy パーツのx,y番号
drawx,drawy 表示座標。
PARTS_SIZEW,PARTS_SIZEH パーツのドットサイズ高さと幅(透明部分を含む)
DRAW_NUMX,DRAW_NUMY 表示する縦横のパーツ数。
試していませんが、こんな式になるはずです。
drawx = (DRAW_NUMY - partsy - 1)*(PARTS_SIZEW/2) + (partsx * PARTS_SIZEW)
drawy = (partsx+partsy)*PARTS_SIZEH
試してないので間違っていたらごめんなさい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

chalaza

Re: クォータービューでマップを斜めに並べる

#3

投稿記事 by chalaza » 14年前

ありがとうございます
ちょっと調整したら案外簡単に綺麗に並べられました。
解決ですー

閉鎖

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