⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 link4.bas

📁 smallbasic for linux
💻 BAS
📖 第 1 页 / 共 3 页
字号:
' Minor reformatting and modifications by Dave Navarro, Jr.

    5 SCREEN 1:CLS
    7 DIM TALY(7):DIM BOARD(6,7)
    8 GOSUB 28000
   10 GOSUB 4000
   20 GOSUB 5000
   22 GOSUB 6000
   25 GOSUB 7000
   26 GOSUB 8000:GOSUB 9000
   30 H.OFFSET = 60
   40 V.OFFSET = 50
   50 H.SKIP = 30
   60 V.SKIP = 25
   70 P.WIN = 0
   80 C.WIN = 0
   90 GOTO 10010

 4000 REM LOAD SHAPE c.chip
 4010 DIM C.CHIP( 47 )
 4020 S.WIDTH= 21 :S.HEIGHT= 17
 4030 FOR I = 0 TO S.WIDTH-1
 4040 FOR J = 0 TO S.HEIGHT-1
 4050 READ S.COL
 4060 PSET(I,J),S.COL
 4070 NEXT J
 4080 NEXT I
 4090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),C.CHIP
 4100 RETURN

 5000 REM LOAD SHAPE c.chip2
 5010 DIM C.CHIP2( 58 )
 5020 S.WIDTH= 23 :S.HEIGHT= 19
 5030 FOR I = 0 TO S.WIDTH-1
 5040 FOR J = 0 TO S.HEIGHT-1
 5050 READ S.COL
 5060 PSET(I,J),S.COL
 5070 NEXT J
 5080 NEXT I
 5090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),C.CHIP2
 5100 RETURN

 6000 REM LOAD SHAPE sq
 6010 DIM SQ( 58 )
 6020 S.WIDTH= 23 :S.HEIGHT= 19
 6030 FOR I = 0 TO S.WIDTH-1
 6040 FOR J = 0 TO S.HEIGHT-1
 6050 READ S.COL
 6060 PSET(I,J),S.COL
 6070 NEXT J
 6080 NEXT I
 6090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),SQ
 6100 RETURN

 7000 REM LOAD SHAPE back
 7010 DIM BACK( 33 )
 7020 S.WIDTH= 16 :S.HEIGHT= 16
 7030 FOR I = 0 TO S.WIDTH-1
 7040 FOR J = 0 TO S.HEIGHT-1
 7050 READ S.COL
 7060 PSET(I,J),S.COL
 7070 NEXT J
 7080 NEXT I
 7090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),BACK
 7100 RETURN

 8000 REM LOAD SHAPE p.chip
 8010 DIM P.CHIP( 47 )
 8020 S.WIDTH= 21 :S.HEIGHT= 17
 8030 FOR I = 0 TO S.WIDTH-1
 8040 FOR J = 0 TO S.HEIGHT-1
 8050 READ S.COL
 8060 PSET(I,J),S.COL
 8070 NEXT J
 8080 NEXT I
 8090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),P.CHIP
 8100 RETURN

 9000 REM LOAD SHAPE p.chip2
 9010 DIM P.CHIP2( 58 )
 9020 S.WIDTH= 23 :S.HEIGHT= 19
 9030 FOR I = 0 TO S.WIDTH-1
 9040 FOR J = 0 TO S.HEIGHT-1
 9050 READ S.COL
 9060 PSET(I,J),S.COL
 9070 NEXT J
 9080 NEXT I
 9090 GET(0,0)-(S.WIDTH-1,S.HEIGHT-1),P.CHIP2
 9100 RETURN

10000 REM main
10001 WIN=0
10002 FOR I = 1 TO 6
10003  FOR J = 1 TO 7
10004   BOARD(I,J)=0
10005  NEXT J
10006 NEXT I
10010 GOSUB 11000:FIRST=1
10015 LINE (H.OFFSET-10,V.OFFSET-30)-(H.OFFSET+7*H.SKIP+3,199),0,BF
10020 FOR I = V.OFFSET TO V.OFFSET+5*V.SKIP STEP V.SKIP
10030 FOR J = H.OFFSET TO H.OFFSET+6*H.SKIP STEP H.SKIP
10040 PUT (J,I),SQ,PSET
10050 NEXT J
10060 NEXT I
10070 LINE (H.OFFSET-7,V.OFFSET-7)-(H.OFFSET+7*H.SKIP,199),3,B
10080 PAINT (H.OFFSET-6,198),1,3
10090 T.POS = V.OFFSET-27
10100 T.H.POS=4
10110 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
10120 GOSUB 12000
10125 IF A$="r" OR A$="R" THEN P.WIN=0:C.WIN=0
10130 IF A$="q" OR A$="Q" THEN END ELSE GOTO 10000
11000 REM fill screen
11005 GOSUB 29000
11010 FOR I = 0 TO 320-16 STEP 16
11020  FOR J = 0 TO 200-16 STEP 8
11030   PUT (I,J),BACK,PSET
11040  NEXT J
11050 NEXT I
11060 LINE(0,150)-(H.OFFSET-11,199),0,BF
11070 LINE(0,150)-(H.OFFSET-11,199),,B
11080 LOCATE 20,2:PRINT "SCORE"
11090 LOCATE 22,2:PRINT "P ";P.WIN
11100 LOCATE 23,2:PRINT "C ";C.WIN
11110 RETURN
12000 REM get player entry
12005 IF PLAYER = 1 THEN T.H.POS=4:PUT((T.H.POS+1)*H.SKIP+1,T.POS),C.CHIP,PSET:GOSUB 15000:GOSUB 14000:IF WIN<>2 THEN PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,PSET
12007 IF PLAYER = 1 THEN PLAYER = 0 ELSE PLAYER = 1
12010 A$=INKEY$
12020 IF A$="q" OR A$="Q" THEN RETURN
12025 IF A$="r" OR A$="R" THEN RETURN
12030 IF A$=CHR$(13) THEN GOSUB 13000:OLD.POS=T.H.POS:T.H.POS=4:GOSUB 14000:GOSUB 21000
12035 IF A$=CHR$(13) THEN IF WIN =0 AND ER = 0 THEN PUT((T.H.POS+1)*H.SKIP+1,T.POS),C.CHIP,XOR:GOSUB 15000:GOSUB 14000:IF WIN<>2 THEN PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,PSET:GOSUB 21000
12036 IF ER=1 THEN T.H.POS=4:PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,PSET:ER=0
12037 IF WIN = 1 THEN P.WIN=P.WIN+1:GOTO 10000
12038 IF WIN = 2 THEN C.WIN=C.WIN+1:GOTO 10000
12040 IF A$="4" THEN GOSUB 12200
12045 IF A$=CHR$(0,75) THEN GOSUB 12200
12050 IF A$="6" THEN GOSUB 12400
12055 IF A$=CHR$(0,77) THEN GOSUB 12400
12060 GOTO 12010
12200 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
12210 T.H.POS=T.H.POS-1
12220 IF T.H.POS = 0 THEN T.H.POS = 7
12230 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
12240 PLAY "L40O2C"
12250 RETURN
12400 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
12410 T.H.POS=T.H.POS+1
12420 IF T.H.POS = 8 THEN T.H.POS = 1
12430 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
12440 PLAY "L40O2C"
12450 RETURN
13000 REM drop piece
13010 IF BOARD(1,T.H.POS)<>0 THEN ER=1:PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR:PLAY "L20O1C":RETURN
13020 PUT((T.H.POS+1)*H.SKIP+1,T.POS),P.CHIP,XOR
13030 PUT((T.H.POS+1)*H.SKIP,V.OFFSET),P.CHIP2,PSET
13040 PLAY "L10O3C"
13050 IF BOARD(2,T.H.POS)<>0 THEN RW=1:BOARD(1,T.H.POS)=1:PLAY "L40O2C":RETURN
13060 PUT((T.H.POS+1)*H.SKIP,V.OFFSET),SQ,PSET
13070 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP),P.CHIP2,PSET
13080 PLAY "L10O3D"
13090 IF BOARD(3,T.H.POS)<>0 THEN RW=2:BOARD(2,T.H.POS)=1:PLAY "L40O2C":RETURN
13100 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP),SQ,PSET
13110 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*2),P.CHIP2,PSET
13120 PLAY "L10O3E"
13130 IF BOARD(4,T.H.POS)<>0 THEN RW=3:BOARD(3,T.H.POS)=1:PLAY "L40O2C":RETURN
13140 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*2),SQ,PSET
13150 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*3),P.CHIP2,PSET
13160 PLAY "L10O3F"
13170 IF BOARD(5,T.H.POS)<>0 THEN RW=4:BOARD(4,T.H.POS)=1:PLAY "L40O2C":RETURN
13180 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*3),SQ,PSET
13190 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*4),P.CHIP2,PSET
13200 PLAY "L10O3G"
13210 IF BOARD(6,T.H.POS)<>0 THEN RW=5:BOARD(5,T.H.POS)=1:PLAY "L40O2C":RETURN
13220 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*4),SQ,PSET
13230 PUT((T.H.POS+1)*H.SKIP,V.OFFSET+V.SKIP*5),P.CHIP2,PSET
13240 PLAY "L10O3A"
13250 BOARD(6,T.H.POS)=1:RW=6:PLAY "L40O2C":RETURN
14000 REM CHECK FOR A WIN
14010 TOT=0
14020 COL=BOARD(RW,OLD.POS)
14030 NEW.COL=COL:X=RW
14040 WHILE NEW.COL=COL AND X<=6
14050  TOT=TOT+1
14055  X=X+1
14057  IF X<=6 THEN NEW.COL=BOARD(X,OLD.POS)
14060 WEND
14070 IF TOT>=4 THEN PL=1:GOSUB 19000:WIN=COL:RETURN
14080 TOT=1
14085 FOR I = 1 TO 3
14090 IF OLD.POS-I=0 THEN GOTO 14110 ELSE IF BOARD(RW,OLD.POS-I)=COL THEN TOT=TOT+1 ELSE GOTO 14110
14100 NEXT I
14110 FOR I = 1 TO 3
14120 IF OLD.POS+I=8 THEN GOTO 14140 ELSE IF BOARD(RW,OLD.POS+I)=COL THEN TOT=TOT+1 ELSE GOTO 14140
14130 NEXT I
14140 IF TOT>=4 THEN PL=2:GOSUB 19000:WIN=COL:RETURN
14150 TOT=1
14165 FOR I = 1 TO 3
14170 IF OLD.POS-I=0 OR RW+I=7 THEN GOTO 14190 ELSE IF BOARD(RW+I,OLD.POS-I)=COL THEN TOT=TOT+1 ELSE GOTO 14190
14180 NEXT I
14190 FOR I = 1 TO 3
14200 IF OLD.POS+I=8 OR RW-I=0 THEN GOTO 14220 ELSE IF BOARD(RW-I,OLD.POS+I)=COL THEN TOT=TOT+1 ELSE GOTO 14220
14210 NEXT I
14220 IF TOT>=4 THEN PL=3:GOSUB 19000:WIN=COL:RETURN
14230 TOT=1
14245 FOR I = 1 TO 3
14250 IF OLD.POS-I=0 OR RW-I=0 THEN GOTO 14270 ELSE IF BOARD(RW-I,OLD.POS-I)=COL THEN TOT=TOT+1 ELSE GOTO 14270
14260 NEXT I
14270 FOR I = 1 TO 3
14280 IF OLD.POS+I=8 OR RW+I=7 THEN GOTO 14300 ELSE IF BOARD(RW+I,OLD.POS+I)=COL THEN TOT=TOT+1 ELSE GOTO 14300
14290 NEXT I
14300 IF TOT>=4 THEN PL=4:GOSUB 19000:WIN=COL:RETURN
14310 RETURN
15000 REM COMPUTER MOVES!!!!!
15010 REM CLEAR TALY ARRAY
15020 FOR K = 1 TO 7
15030  TALY(K)=0
15040  FOR L = 1 TO 6
15050   IF BOARD(L,K)<> 0 THEN L=L-1:GOTO 15070
15060  NEXT L
15065  L=L-1
15070  IF L = 0 THEN GOTO 15690
15080  TALY(K)=1
15083  REM IRST=1 THEN TALY(K)=TALY(K)+L^3:REM ELE TALY(K)=TALY(K)+3.75*L
15084  FLASH=0
15085  RW=L:OLD.POS=K
15090  BOARD(L,K)=1:GOSUB 14000:GOSUB 16000:TALY(K)=TALY(K)+TOT:BOARD(L,K)=0:IF WIN=1 THEN TALY(K)=TALY(K)+10000
15100  WIN=0
15110  BOARD(L,K)=2:GOSUB 14000:GOSUB 16000:TALY(K)=TALY(K)+TOT:BOARD(L,K)=0:IF WIN=2 THEN TALY(K)=TALY(K)+100000!
15120  WIN=0
15180  RW=L
15190  BOARD(L,K)=1:GOSUB 20000:BOARD(L,K)=0:IF WIN=1 THEN TALY(K)=TALY(K)+400
15200  BOARD(L,K)=2:GOSUB 20000:BOARD(L,K)=0:IF WIN=1 THEN TALY(K)=TALY(K)+300
15210  WIN=0
15630  IF L=1 THEN GOTO 15660
15640   RW=L-1
15650   BOARD(L-1,K)=1:GOSUB 14000:BOARD(L-1,K)=0:IF WIN=1 THEN IF TALY(K)<1000 THEN TALY(K)=1
15655   WIN=0
15660  REM END BRANCH
15670  FLASH=1
15680  RW=L
15690 NEXT K
15695 FIRST = 0
15700 REM FIND HIGHEST TALY
15710 HIGHEST=0
15720 FOR K=1 TO 7
15730  IF TALY(K)>HIGHEST THEN HIGHEST=TALY(K)
15740 NEXT K
15745 IF HIGHEST=0 THEN WIN=3:RETURN
15750 HIGHEST.COUNT=0
15760 FOR K=1 TO 7
15770  IF TALY(K)=HIGHEST THEN HIGHEST.COUNT=HIGHEST.COUNT+1
15780 NEXT K
15790 REM RANDOMIZE CHOICE
15800 CHOICE=INT(RND(1)*HIGHEST.COUNT)+1
15810 I=1
15820 FOR K = 1 TO CHOICE
15830  WHILE TALY(I)<>HIGHEST
15840   I=I+1
15850  WEND
15855  I=I+1
15860 NEXT K
15870 OLD.POS=I-1
15880 FOR K = 1 TO 6
15890  IF BOARD(K,OLD.POS)<>0 THEN K=K-1:GOTO 15910
15900 NEXT K
15905 K=K-1
15910 RW=K:BOARD(RW,OLD.POS)=2
15920 GOSUB 17000:GOSUB 18000
15930 PUT((OLD.POS+1)*H.SKIP,V.OFFSET+V.SKIP*(RW-1)),C.CHIP2,PSET
15940 REM PUT WIN ROUTINE HERE
15950 RETURN
16000 REM CHECK FOR A CLOSE POSITION

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -