うーん。これでいいかな???
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側からこんなふうに呼び出すことで、最初の計算式と
同じ効果を出せましたぁ!! (^^