ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
10月 15 (月曜日) 2007
13:52
パターン埋め関数できたかな?
 
うーん。これでいいかな???


void ptboxfill8(char *vram, int vgax, int startX, int startY,int xsize,
int ysize, char *ptn, int ptnY, int ptnX,int forcolor,int backcolor){

/*引数一覧
   --*vram vramのアドレス
--vgax 現在の画面モードのx方向のサイズ
--startX 塗り潰し開始点のx座標
--startY 塗り潰し開始点のy座標
--xsize 塗り潰す範囲のx方向の大きさ
--ysize 塗り潰す範囲のy方向の大きさ
--*ptn 塗り潰しパターンの配列変数

--ptnY パターン配列のy方向(縦方向)の大きさ
--ptnX パターン配列のx方向(横方向)の大きさ
  ここが逆転しているのは配列宣言と同じ
          置き方になるようにするため

--forcolor パターンで*だった場合にこの色を置く
--backcolor パターンで*以外だった場合にこの色を置く
*/
int y2,x2;
int ptnX2,ptnY2;
ptnX2=0;ptnY2=0;

for(y2=startY; y2 <= ysize; y2++){
if (ptnY2 > ptnY-1){ptnY2=0;}

for(x2=startX; x2 < xsize-1; x2++){
if (ptnX2 > ptnX-1){ptnX2=0;}

if(ptn[ptnY2*ptnX+ptnX2] == '*'){
vram[y2*vgax+x2]=forcolor;
}
else {
vram[y2*vgax+x2]=backcolor;
}

ptnX2++;
}
ptnX2=0;
ptnY2++;
}

return;
}




で、呼び出しはこんなことしてみたり・・・

static char ptn[8][8] = {
"********",
"**.....*",
"*.*....*",
"*..*...*",
"*...*..*",
"*....*.*",
"*.....**",
"********"
};
char sas[40];
sprintf(sas,"ptn= %05x",ptn);
putfonts8_asc(vram,800,64,8,COL8_000000,sas);

ptboxfill8(vram,x,0,20,x,y-30,ptn,8,8,COL8_000000,COL8_FFFFFF);






おぉぉ! でけたーーーー!!!!

━━━━━━(゜∀゜)━━━━━━

そんなわけで!!!!


char ptn[6][9] = {
"*..*..*..",
".........",
".........",
"..*..*..*",
".........",
"........."
};
ptboxfill8(vram,x,0,0,x,y-29,ptn,6,9,COL8_000000,COL8_FFFFFF);



init_screen側からこんなふうに呼び出すことで、最初の計算式と
同じ効果を出せましたぁ!! (^^
 
30日を過ぎたBlogにはコメントできません。

Referer  (4)
(1) 2 3 4 5 6 7 8 9 10 » 

PopnupBlog V3 Denali created by Bluemoon inc.