_SOS 04 0000 0000 /* ** ** SAMPLE PROGRAM 'TANOSI' for 'GRAPH.LIB' ** ** */ ORG $3000; OFFSET $6000; CONST _PLOTSW=0,_THREE=1,_FLOAT=1,_SINCOS=1,_TILESW=1,_GHIN=$FFFF; #INCLUDE GRAPH.LIB // MAGIC 3D DATA CONST PANEL_PMAX= 003,PANEL_WMAX= 003; (*座標、線分の数*) ARRAY PANEL_D[ 003][2]=[ (* 座標データ *) %-00100,%-00100,% 00000, (* X,Y,Z *) %-00100,% 00100,% 00000, (* X,Y,Z *) % 00100,% 00100,% 00000, (* X,Y,Z *) % 00100,%-00100,% 00000], (* X,Y,Z *) BYTE PANEL_W[ 003][1]=[ (* 線分 データ *) 000, 001, 001, 002, 002, 003, 003, 000]; VAR CX,CY,X1,Y1,IX,IY,AX,AY,CC,AC,PR,KAKU,IKAKU,FL; MAIN() VAR I; [ @INIT(); (*初期化 *) FOR I=0 TO 8 [ _PAR[I] = 0; ] (*パラメータ 初期化 *) @SETOD( PANEL_D , PANEL_PMAX ); (*座標デ−タ 定義  *) @SETWD( PANEL_W , PANEL_WMAX ); (*線分デ−タ 定義 *) _PAR[2] = 5000; (*Z=5000 *) WHILE( _PAR[2] .>. 0 ) (*Zがマイナスになるまで*) [ @MAGIC(0); (* 2D → 3D *) @MAGIC(1); (* 画面表示 *) @CRTKN( 7 , 0 , 0); (* プレーン切り換え *) @CLS(); (* 裏プレーン消去 *) _PAR[2]=_PAR[2]-15; (* Z=Z−15 *) _PAR[_HEAD]++; (* HEAD回転 *) _PAR[_PITCH]=_PAR[_PITCH]+2; (* PITCH回転 *) _PAR[_BANK]=_PAR[_BANK]+3; (* BANK回転 *) IF (INKEY(0)==' ') EXIT; ] @INIT(); CX = 319; CY = 99; X1 = RND(640); Y1 = RND(200); AX = RND(10) - 5; AY = RND(10) - 5; CC = 0; AC = 1; PR = 1; FL = 0; _DEMODE=1; @MODE(2,2); FOR I = 0 TO 20 [ @GRAD(RND(5) + 1); @TRIANGLE(RND(640),RND(200),RND(640),RND(200),RND(640),RND(200)); ] @MODE(2,0); WHILE(INKEY(0) == 0) [ AX = AX + SGN(CX - X1); AY = AY + SGN(CY - Y1); IX = X1; IY = Y1; X1 = X1 + AX; Y1 = Y1 + AY; IF (X1 .<. 0) [ X1 = 20; AX =-AY; ] IF (X1 .>. 639) [ X1 = 619; AX =-AY; ] IF (Y1 .<. 0) [ Y1 = 10; AY =-AY; ] IF (Y1 .>. 199) [ Y1 = 189; AY =-AY; ] CC = CC + AC; IF (CC == 0) OR (CC == 7) [ AC = 0-AC; PR = 1-PR; ] @GRAD(CC); @CIRCLE(X1,Y1,20); IKAKU=KAKU; KAKU=@IATN(X1-CX,Y1-CY); @LINE(CX,CY,CX+@ICOS(KAKU,50),CY+@ISIN(KAKU,25)); @CRTKN(7,1,PR); @GRAD(0); @CIRCLE(IX,IY,20); IF (FL==1) @LINE(CX,CY,CX+@ICOS(IKAKU,50),CY+@ISIN(IKAKU,25)); FL=1; ] @INIT(); @MODE(2,2); _SPITCH=-30; _SHEAD=0; _SBANK=30; _KSTEP=30; _WSEL=0; _SBLUE=0; _SRED=7; _SGREEN=0; _OFSY=100; @WAVE(900,1200,60,130); I=0; WHILE(I<360) [ _SBLUE=RND(4)+4; _SRED=RND(4)+4; _SGREEN=RND(4)+4; @KYU(@ICOS(I,500),-40-@ISIN(I,500)./.2,@ISIN(I,500)+900,100); I=I+45; ] ]