So, hier nun das Programm.
10 REM ************
20 REM * 2048 *
30 REM ************
40 PRINT CHR$(27)"[2J";
100 W=2: REM **** W=0 FOR LOOSE W=1 FOR WIN W=2 FOR PLAYING ****
110 DIM MA(4,4)
120 FC=16:REM FREECELLS
130 SC=0:MT=2:AM=1:REM SC=SCORE MT=MAXTILE AM=ALLOWED MOVE
140 GOSUB 1000:REM DRAW SCREEN
150 GOSUB 1500:REM PRINT SCORE AND MAXTILE
160 AM=1:GOSUB 1700:REM PUT FIRST "2"
170 GOSUB 2000:REM PRINT SCORES
200 REM ******************
210 REM MAIN PROGRAM
220 REM ******************
230 REM PRINT CHR$(27)"[22;38H";
235 IF W<2 THEN GOTO 950:REM ******* END GAME ********
240 A$=INKEY$:IF A$="E" OR A$="e" THEN GOTO 999
280 REM ************************
285 REM FOLLOWING LINES HANDLE UP, LEFT, RIGHT, DOWN
290 REM ************************
300 IF A$="8" THEN GOSUB 2500:GOSUB 3500:GOSUB 2500:GOSUB 1700:GOSUB 2000:GOSUB 1500
350 IF A$="4" THEN GOSUB 2600:GOSUB 3600:GOSUB 2600:GOSUB 1700:GOSUB 2000:GOSUB 1500
400 IF A$="6" THEN GOSUB 2700:GOSUB 3700:GOSUB 2700:GOSUB 1700:GOSUB 2000:GOSUB 1500
450 IF A$="2" THEN GOSUB 2800:GOSUB 3800:GOSUB 2800:GOSUB 1700:GOSUB 2000:GOSUB 1500
460 GOTO 200
950 PRINT CHR$(27);"[10;0H";
960 PRINT " ********************"
970 IF W=1 THEN PRINT " * YOU WIN *"
980 IF W=0 THEN PRINT " * YOU LOOSE *"
990 PRINT " ********************"
995 PRINT " SCORE =";SC
996 PRINT " MAXTILE=";MT
999 END
1000 REM DRAW FRAME + SCORE
1010 FOR I=1 TO 5
1020 VT=1+(I-1)*4:PRINT CHR$(27)"[";VT;";0H";
1025 PRINT "-------------------------------------------------"
1030 NEXT
1040 FOR I=1 TO 4
1050 FOR J=1 TO 3
1060 VT=1+(I-1)*4+J:PRINT CHR$(27)"["VT";0H";
1065 PRINT "| | | | |"
1070 NEXT : NEXT
1090 PRINT CHR$(27);"[3;65H8"CHR$(27);"[9;65H2"CHR$(27);"[6;60H4"CHR$(27);"[6;70H6"
1130 PRINT CHR$(27);"[12;60HE = END"CHR$(27);"[14;60HSCORE:"CHR$(27);"[16;60HMAX TILE:"
1200 RETURN
1500 REM ***************
1501 REM PRINT SCORE + MAXTILE
1502 REM ***************
1510 PRINT CHR$(27);"[14;67H";
1520 SC$=STR$(SC):LS=LEN(SC$)
1530 FOR I=1 TO 7-LS: PRINT " ";: NEXT
1540 PRINT SC$CHR$(27);"[16;69H";
1560 MT$=STR$(MT):LS=LEN(MT$)
1570 FOR I=1 TO 5-LS:PRINT " ";: NEXT
1580 PRINT MT$
1590 IF MT=2048 THEN W=1: REM *** YOU WIN ***
1595 AM=0
1690 RETURN
1700 REM ****************
1701 REM PUT A "2" IN A RANDOM EMPTY CELL
1702 REM ****************
1705 IF AM=0 THEN PRINT CHR$(7):RETURN
1708 IF FC=0 THEN W=0:GOTO 1800:REM *** YOU LOOSE ***
1710 K=INT(RND(1)*FC+1)
1720 N=0
1730 FOR I=1 TO 4
1740 FOR J=1 TO 4
1750 IF MA(I,J)=0 THEN N=N+1
1760 IF N=K THEN MA(I,J)=2:FC=FC-1:I=4:J=4
1780 NEXT:NEXT
1800 AM=0:RETURN
2000 REM *************
2001 REM WRITE THE CELL CONTENT AND CALC. FREECELLS AND MAXTILE
2002 REM *************
2005 FC=0:MT=0:REM INITIALIZE FREECELLS AND MAXTILES
2010 FOR I=1 TO 4
2020 FOR J=1 TO 4
2030 PRINT CHR$(27);"["3+(I-1)*4";"2+(J-1)*12"H";CHR$(27)"[3m "CHR$(27)"[m";:
2040 PRINT CHR$(13);CHR$(27);"["2+(J-1)*12"C";
2050 IF MA(I,J)=0 THEN FC=FC+1: GOTO 2060
2055 M$=STR$(MA(I,J)):PRINT CHR$(27)"[3m"RIGHT$(M$,LEN(M$)-1)CHR$(27)"[m"
2060 IF MA(I,J)>MT THEN MT=MA(I,J)
2090 NEXT:NEXT
2190 RETURN
2500 REM *****************
2510 REM COMPACT UP - KIND OF BUBBLE SORT
2520 REM *****************
2530 FOR J=1 TO 4
2540 FOR K=3 TO 1 STEP -1
2550 FOR I=1 TO K
2560 IF MA(I,J)=0 THEN MA(I,J)=MA(I+1,J):MA(I+1,J)=0:IF MA(I,J)<>0 THEN AM=1
2570 NEXT:NEXT:NEXT
2590 RETURN
2600 REM ************
2610 REM COMPACT LEFT
2620 REM ************
2630 FOR I=1 TO 4
2640 FOR K=3 TO 1 STEP -1
2650 FOR J=1 TO K
2660 IF MA(I,J)=0 THEN MA(I,J)=MA(I,J+1):MA(I,J+1)=0:IF MA(I,J)<>0 THEN AM=1
2670 NEXT:NEXT:NEXT
2690 RETURN
2700 REM ************
2710 REM COMPACT RIGHT
2720 REM ************
2730 FOR I=1 TO 4
2740 FOR K=2 TO 4
2750 FOR J=4 TO K STEP -1
2760 IF MA(I,J)=0 THEN MA(I,J)=MA(I,J-1):MA(I,J-1)=0:IF MA(I,J)<>0 THEN AM=1
2770 NEXT:NEXT:NEXT
2790 RETURN
2800 REM *****************
2810 REM COMPACT DOWN
2820 REM *****************
2830 FOR J=1 TO 4
2840 FOR K=2 TO 4
2850 FOR I=4 TO K STEP -1
2860 IF MA(I,J)=0 THEN MA(I,J)=MA(I-1,J):MA(I-1,J)=0:IF MA(I,J)<>0 THEN AM=1
2870 NEXT:NEXT:NEXT
2890 RETURN
3500 REM ***************
3510 REM ADD UP
3520 REM ***************
3530 FOR J=1 TO 4
3540 FOR I=1 TO 3
3550 IF MA(I,J) THEN IF MA(I,J)=MA(I+1,J) THEN MA(I,J)=MA(I,J)*2:MA(I+1,J)=0:SC=SC+MA(I,J):AM=1
3560 NEXT:NEXT
3590 RETURN
3600 REM **************
3610 REM SUM LEFT
3620 REM **************
3630 FOR I= 1 TO 4
3640 FOR J= 1 TO 3
3650 IF MA(I,J) THEN IF MA(I,J)=MA(I,J+1) THEN MA(I,J)=MA(I,J)*2:MA(I,J+1)=0:SC=SC+MA(I,J):AM=1
3660 NEXT:NEXT
3690 RETURN
3700 REM **************
3710 REM SUM RIGHT
3720 REM **************
3730 FOR I= 1 TO 4
3740 FOR J= 4 TO 2 STEP - 1
3750 IF MA(I,J) THEN IF MA(I,J)=MA(I,J-1) THEN MA(I,J)=MA(I,J)*2:MA(I,J-1)=0:SC=SC+MA(I,J):AM=1
3760 NEXT:NEXT
3790 RETURN
3800 REM ***************
3810 REM ADD DOWN
3820 REM ***************
3830 FOR J= 1 TO 4
3840 FOR I= 4 TO 2 STEP - 1
3850 IF MA(I,J) THEN IF MA(I,J)=MA(I-1,J) THEN MA(I,J)=MA(I,J)*2:MA(I-1,J)=0:SC=SC+MA(I,J):AM=1
3860 NEXT:NEXT
3890 RETURN
Alles anzeigen