RANDOMIZE OPTION BASE 0 PRINT PRINT "ボウリング シミュレーション 1000回" PRINT PRINT "1ゲーム目のスコア表:" DIM C(0 TO 1000) LET TS=0 LET TI=300 FOR X=1 TO 1000 DIM T1(12),T2(11),S(10) FOR i=1 TO 10 LET T1(i)=STRIKE(i) LET T2(i)=SPEA(i,T1(i)) NEXT i LET R=-1 IF T1(10)=10 THEN LET T2(10)=STRIKE(11) IF T2(10)=10 THEN LET R=STRIKE(12) ELSE LET R=SPEA(11,T2(10)) END IF ELSE IF T1(10)+T2(10)=10 THEN LET R=STRIKE(11) END IF IF T1(1)=10 THEN LET S(1)=T1(1)+T2(1)+T1(2)+T2(2) ELSEIF T1(1)<10 AND T1(1)+T2(1)=10 THEN LET S(1)=T1(1)+T2(1)+T1(2) ELSE LET S(1)=T1(1)+T2(1) END IF FOR i=2 TO 9 IF T1(i)=10 THEN LET S(i)=S(i-1)+T1(i)+T2(i)+T1(i+1)+T2(i+1) ELSEIF T1(i)<10 AND T1(i)+T2(i)=10 THEN LET S(i)=S(i-1)+T1(i)+T2(i)+T1(i+1) ELSE LET S(i)=S(i-1)+T1(i)+T2(i) END IF NEXT i IF R>0 THEN LET S(10)=S(9)+T1(10)+T2(10)+R ELSE LET S(10)=S(9)+T1(10)+T2(10) END IF IF X=1 THEN CALL SetColor(0,0,255) FOR i=1 TO 10 PRINT " ";i; NEXT i CALL SetColor(0,0,0) PRINT PRINT " "; FOR i=1 TO 10 PRINT USING "##":T1(i); PRINT USING "##":T2(i); IF i=10 THEN EXIT FOR PRINT " "; NEXT i IF R>-1 THEN PRINT USING "##":R ELSE PRINT END IF PRINT " "; FOR i=1 TO 9 PRINT USING "###":S(i); PRINT " "; NEXT i CALL SetColor(255,0,0) PRINT " "; PRINT USING "###":S(10); CALL SetColor(0,0,0) PRINT END IF LET C(X)=S(10) IF C(X)>TS THEN LET TS=C(X) IF C(X)=3 AND W<6 THEN LET STRIKE=8 ELSEIF W>=6 AND W<9 THEN LET STRIKE=9 ELSE LET STRIKE=10 END IF END FUNCTION EXTERNAL FUNCTION RND1(q) ! 0か1を乱数で出す。 !OPTION BASE 0 LET RND1=INT(RND*2) END FUNCTION EXTERNAL FUNCTION RND2(q) !OPTION BASE 0 LET W=INT(RND*4) IF W<2 THEN LET W=0 ELSE LET W=W-1 END IF LET RND2=W END FUNCTION EXTERNAL FUNCTION RND3(q) !OPTION BASE 0 LET W=INT(RND*6) IF W<3 THEN LET W=0 ELSE LET W=W-2 END IF LET RND3=W END FUNCTION EXTERNAL FUNCTION SPEA(q,r) SELECT CASE r CASE 10 LET SPEA=0 CASE 9 LET SPEA=RND1(q) CASE 8 LET SPEA=RND2(q) CASE 7 LET SPEA=RND3(q) END SELECT END FUNCTION EXTERNAL SUB SetColor(R,G,B) OPTION CHARACTER Byte SUB SendMessage(hwnd,msg,wparam,lparam$) ASSIGN "USER32.DLL","SendMessageA" END SUB LET EM_SETCHARFORMAT=BVAL("0444",16) LET CHARFORMAT$=CHR$(60) & REPEAT$(CHR$(0),59) LET CHARFORMAT$(8:8)=CHR$(64) LET CHARFORMAT$(21:24)=CHR$(R) & CHR$(G) & CHR$(B) & CHR$(0) CALL SendMessage(WinHandle("RICHEDIT"),EM_SETCHARFORMAT,1, CHARFORMAT$) END SUB