C++ Builder MEMO 3
迷路作成ソース for C++ Builder
以下のソースはg[]に迷路を作ります。
const SCX=101,SCY=101;
char g[SCX*SCY];
void MakeMaze(void){
int i,j,ax,ay;
char *p,*q;
p=g;for(i=0;i<SCX;i++)*(p++)=1;
for(i=0;i<SCY-2;i++){*(p++)=1;for(j=0;j<SCX-2;j++)*(p++)=(j&1)&(i&1);*(p++)=1;}
for(i=0;i<SCX;i++)*(p++)=1;
for(i=2;i<SCY-1;i+=2)for(j=2;j<SCX-1;j+=2){
do{switch(rand()&3){
case 0:ax=0;ay=-1;break;
case 1:if(j==2){ax=-1;ay=0;break;}else continue;
case 2:ax=1;ay=0;break;
case 3:ax=0;ay=1;break;}
q=g+j+ax+(i+ay)*SCX;}while(*q);*q=1;}}
(Imageコンポーネントに表示する方法)
@Imageコンポーネントを作る。
AFormCreateイベントを作り以下を書く。
char *p;int i,j;
Image1->Width=SCX*2;Image1->Height=SCY*2;
MakeMaze();
p=g;for(i=0;i<SCY;i++)for(j=0;j<SCX;j++)
PatBlt(Image1->Canvas->Handle,j*2,i*2,2,2,(*(p++))?WHITENESS:BLACKNESS);
弾が自分に飛んでくるソース。
x,y=自分 hx,hy=敵 xx,yy=飛んでくる移動量
int xx,yy;
xx=abs(hx-x);yy=abs(hy-y);if(!xx)xx=1;else if(!yy)yy=1;
if(xx>yy){yy=6*yy/xx;xx=6;}else{xx=6*xx/yy;yy=6;}
if(x<hx)xx=-xx;if(y<hy)yy=-yy;
タスクバーに一切表示しなくする(Delphi 4.0)
Application.Initialize;
Application.ShowMainForm := False;
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
ShowWindow(Application.Handle, SW_HIDE);
Application.CreateForm(TForm1, Form1);
return