📄 tz.bas
字号:
#!/usr/local/bin/sbrun -g#sec:Main'' TIC-TAC-TOE'' SmallBASIC 0.6.0 example'declare sub displaydeclare sub userdeclare sub computerdeclare func checkDIM MAT(9), PW(8), ST(3)LABEL RESTARTFOR I=1 TO 9 MAT(I)=0NEXTcls? cat(1);"Tic-Tac-Toe";cat(0)? chr$(27)+"[92m"? "A SmallBASIC example"at 0,130? "X=USER, O=CPU" ? "Are you want to play first"; INPUT selWINNER=0IF UCASE$(LEFT$(sel,1))="Y" THEN PLAYER=-1ELSE PLAYER=1FI' startWHILE 1 IF PLAYER=-1 DISPLAY USER ELSE COMPUTER FI winner=CHECK PLAYER=-PLAYER IF WINNER THEN exitWENDDISPLAYAT 0,130:? cat(1);IF WINNER=-1 ? "YOU WIN!"ELIF WINNER=1 ? "I WIN!"ELSE ? "TIE!"FI? cat(92)AT 0,148INPUT "PLAY AGAIN?",SELIF UCASE$(LEFT$(SEL,1))="Y" THEN GOTO RESTARTEND#sec:display' disp'===================Sub DISPLAYLocal N, Oclsrect 0,0,160,140 color 15 filledline 20,40,140,40line 20,80,140,80line 60,0,60,120line 100,0,100,120FOR N=1 TO 9 STEP 3 y=int(n/3)*40+20 FOR O=0 TO 2 x=(o+1)*40 IF MAT(O+N)=1 circle x,y,10 ELIF MAT(O+N)=-1 line x-10,y-10,x+10,y+10 line x+10,y-10,x-10,y+10 FI NEXTNEXTend#sec:user' user'===================Sub USER func upos local p,x,y while pen(0)=0:wend x=pen(4):y=pen(5) p=int((x-20)/40)+1 if y>80 p=p+6 elif y>40 p=p+3 fi upos=p endLocal p,x,ypen onwhile 1 p=upos if mat(p)=0 exit else beep fiwendpen offMAT(P)=-1end#sec:computer' comp'===================Sub COMPUTERlocal i,p,w'===================Sub CCFIN(p)MAT(P)=1end'===================Func SELPOS(i)IF I < 4 ST(1)=(I-1)*3+1 ST(2)=(I-1)*3+2 ST(3)=(I-1)*3+3ELIF I < 7 ST(1)=(I-3) ST(2)=(I-3)+3 ST(3)=(I-3)+6ELIF I=7 ST(1)=1:ST(2)=5:ST(3)=9ELSE ST(1)=3:ST(2)=5:ST(3)=7FIIF MAT(ST(1))=0 selpos=ST(1)ELIF MAT(ST(2))=0 selpos=ST(2)ELSE selpos=ST(3)FIend'===================' WINNER MOVEFOR I=1 TO 8 IF PW(I)=2 p=SELPOS(i) CCFIN p exit sub FINEXT' DEFENCE MOVEFOR I=1 TO 8 IF PW(I)=-2 p=SELPOS( i) CCFIN p exit sub FINEXT'' SIMPLE MOVE - THIS LETS USER TO WIN' BECAUSE IT DOES NOT CALCULATE THE' FREE CELLS'IF MAT(5)=0 P=5ELSE FOR I=1 TO 9 IF MAT(I)=0 THEN P=I CCFIN p exit sub FI NEXTFIend#sec:winner' check'===================func Checklocal i, cnt, wFOR i=1 TO 3 PW(i)=MAT((i-1)*3+1) PW(i)=PW(i)+MAT((i-1)*3+2) PW(i)=PW(i)+MAT((i-1)*3+3) PW(i+3)=MAT(i)+MAT(i+3)+MAT(i+6)NEXTPW(7)=MAT(1)+MAT(5)+MAT(9)PW(8)=MAT(3)+MAT(5)+MAT(7)FOR i=1 TO 8 IF PW(i)=-3 THEN W=-1 IF PW(i)= 3 THEN W=1NEXTIF W=0 THEN CNT=0 FOR i=1 TO 9 IF MAT(i) THEN CNT=CNT+1 NEXT IF CNT=9 THEN W=999FIcheck=wend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -