- 注册时间
- 2004-8-31
- 最后登录
- 1970-1-1
|
发表于 2005-1-22 23:47:00
|
显示全部楼层
在蛇行走的时候按与蛇行走方向相反的健回停住
你可以借鉴借鉴这个贪吃蛇
可以设计个循环,一个值FPS,每循环一次FPS+1,在循环中根据FPS的值运行程序和修改FPS
如果你能看的懂的话:
0 CLEAR OKE 805,0 OKE 806,1 OKE 807,255:POKE 808,96:START=45:EAT=9:GAMEO=7
1 :
5 WIN=2 IM X,Y,I
10 GRAPH:SD=0:CD=5:SCORE=0:UP=1 OWN=2:RIGHT=3 EFT=4 IM F(4):DIM TOPS(11):SOUND=0
14 FOR Y=0 TO 78 STEP +2 INE 1,Y,159,Y:NEXT :FOR X=1 TO 159 STEP +2 INE X,0,X,79,2:NEXT
15 BOX 37,30,122,50,1,0:LOCATE 3,6:PRINT "Basic Now!";:BOX 37,30,122,50:POKE 199,0
16 FOR I=39 TO 119 STEP +2:LINE I,32,I,48,2:NEXT :FOR I=120 TO 40 STEP -2:LINE I,32,I,48,2
17 NEXT :DIM TOPN$(11):FOR I=0 TO 6000:IF PEEK(199)<>0 THEN POKE 199,0:GOTO 19
18 NEXT
19 FOR I=0 TO 3:FOR Y=0 TO 19:LINE 1,Y*4+I,159,Y*4+I,1:NEXT :NEXT
20 FOR I=3 TO 0 STEP -1:FOR Y=0 TO 19:LINE 1,Y*4+I,159,Y*4+I,0:NEXT :NEXT :CLS
21 PRINT "贪吃蛇 V0.15A"," [JD]laugj":DIM SET(3)
22 DIM MAXSET(3):F(1)=2:F(2)=1:F(3)=4:F(4)=3:MAXSET(1)=10:MAXSET(2)=21:MAXSET(3)=3
23 PRINT "[帮助]"," <方向> 控制方向"," 赞停 <跳出>退出";:BOX 2,32,158,78,1,2
30 BOX 1,0,159,79:FOR I=0 TO 1500:IF PEEK(199)<>0 THEN POKE 199,0:GOTO 32
31 NEXT
32 IF PEEK(199)>0 THEN C=ASC (INKEY$ )
34 FOR I=0 TO 3:FOR Y=0 TO 19:LINE 1,Y*4+I,159,Y*4+I,1:NEXT :NEXT
35 FOR I=3 TO 0 STEP -1:FOR Y=0 TO 19:LINE 1,Y*4+I,159,Y*4+I,0:NEXT :NEXT :CLS
36 Y=1:C=0
39 GRAPH:PRINT "[参数设定]","等级","长度","声音","<输入>OK <跳出>退出";
40 BOX 1,0,159,79:BOX 2,1,158,15,1,2:BOX 2,64,158,78,1,2
41 FOR I=1 TO 3:FOR II=0 TO MAXSET(I):LINE 40+II*3,I*16,39+II*3,I*16+14:NEXT :NEXT
42 FOR I=1 TO 3:LINE 40,I*16+1,40,I*16+13:NEXT
43 IF Y=0 THEN Y=3
44 IF Y=4 THEN Y=1
45 BOX 2,Y*16,32,Y*16+15,1,2
50 :
51 C=ASC (INKEY$ )
52 IF C=20 THEN BOX 2,Y*16,32,Y*16+15,1,2:Y=Y-1:GOTO 43
53 IF C=21 THEN BOX 2,Y*16,32,Y*16+15,1,2:Y=Y+1:GOTO 43
54 IF C=13 THEN GOTO 65
55 IF C=27 THEN TEXT :PRINT "GOOD BYE!";:END
56 IF C=22 THEN SET(Y)=SET(Y)+1:GOTO 59
57 IF C=23 THEN SET(Y)=SET(Y)-1:GOTO 59
58 GOTO 51
59 IF SET(Y)>=MAXSET(Y) THEN SET(Y)=MAXSET(Y)
60 IF SET(Y)<0 THEN SET(Y)=0
61 LINE SET(Y)*3+40,Y*16+1,SET(Y)*3+40,Y*16+13,1
62 LINE SET(Y)*3+43,Y*16+1,SET(Y)*3+43,Y*16+13,0
63 GOTO 51
65 SD=SET(1):CD=5+INT(SD*1.4):SOUND=SET(3)
66 GOTO 1000
120 SCORE=SCORE+SD+3:LOCATE 5,7:PRINT SCORE;:LINE 1,64,159,64
125 BOX CX*4+1,CY*4,CX*4+4,CY*4+3,1,1
126 IF SOUND>0 THEN POKE 806,EAT:CALL 805
130 M=INT(RND(1)*640)
140 IF MAP(M)<>0 THEN GOTO 130
145 CY=INT(M/40):CX=M-CY*40:BOX CX*4+1,CY*4,CX*4+4,CY*4+3
150 CD=CD+1:G=1
160 IF CD>=20+INT(SD*2.3)+SD THEN SD=SD+1:CD=5+INT(SD*1.4):GOTO 161 ELSE GOTO 170
161 IF SD=11 THEN GOTO 1280 ELSE GOTO 162
162 POP :GOTO 1001
170 RETURN
1000 DIM MAP(640):HEADX=0:HEADY=0:TAILX=0:TAILY=0
1001 D=MAP(TAILX+TAILY*40):MAP(TAILX+TAILY*40)=0
1002 IF TAILX=HEADX AND TAILY=HEADY THEN GOTO 1011
1003 ON D GOTO 1004,1005,1006,1007
1004 TAILY=TAILY-1:GOTO 1001
1005 TAILY=TAILY+1:GOTO 1001
1006 TAILX=TAILX+1:GOTO 1001
1007 TAILX=TAILX-1
1008 GOTO 1001
1011 IF SOUND>1 THEN POKE 806,START:CALL 805
1012 FOR X=1 TO 175 STEP +2:LINE X*(X<160),0,X*(X<160),79,0:
1013 IF X>16 THEN LINE X-15,0,X-15,79,0
1014 NEXT :CLS:LOCATE 5,1:PRINT "Score:";SCORE;:LOCATE 5,11:PRINT "Level:";SD;
1020 LINE 1,64,159,64
1030 FOR I=0 TO CD+SET(2)-1:MAP(I)=RIGHT:BOX I*4+1,0,I*4+4,3,1,1:NEXT :HEADX=CD+SET(2)-1
1031 HEADY=0:D=RIGHT
1040 TAILX=0:TAILY=0:CX=INT(RND(1)*39+1):CY=INT(RND(1)*14+2):BOX CX*4+1,CY*4,CX*4+4,CY*4+3
1050 A=(10-SD)+1:POKE 199,0
1055 FOR FPS=0 TO 65535
1070 IF FPS>=A THEN GOTO 1080 ELSE GOTO 1160
1080 IF MAP(HEADX+HEADY*40)=F(D) THEN MAP(HEADX+HEADY*40)=D:FPS=FPS+1:GOTO 1070
1081 FPS=0:IF SOUND>2 THEN PLAY "L 100 C B"
1090 D=MAP(HEADX+HEADY*40):ON D GOTO 1100,1101,1102,1103
1100 HEADY=HEADY-1:GOTO 1104
1101 HEADY=HEADY+1:GOTO 1104
1102 HEADX=HEADX+1:GOTO 1104
1103 HEADX=HEADX-1
1104 IF HEADX>=40 OR HEADX<0 THEN GOTO 1230
1105 IF HEADY>=16 OR HEADY<0 THEN GOTO 1230
1106 IF MAP(HEADX+HEADY*40)<>0 THEN GOTO 1230
1107 MAP(HEADX+HEADY*40)=D
1108 IF HEADX=CX AND HEADY=CY THEN GOSUB 120
1109 IF G=0 THEN BOX TAILX*4+1,TAILY*4,TAILX*4+4,TAILY*4+3,1,0
1110 BOX HEADX*4+1,HEADY*4,HEADX*4+4,HEADY*4+3,1,1
1111 E=MAP(TAILX+TAILY*40):IF G=0 THEN MAP(TAILX+TAILY*40)=0
1112 IF G=0 THEN GOTO 1113 ELSE G=0:GOTO 1160
1113 ON E GOTO 1120,1130,1140,1150
1120 TAILY=TAILY-1:GOTO 1160
1130 TAILY=TAILY+1:GOTO 1160
1140 TAILX=TAILX+1:GOTO 1160
1150 TAILX=TAILX-1
1160 IF PEEK(199)=240 THEN C=ASC (INKEY$ ):C=ASC (INKEY$ ):GOTO 1220
1170 IF PEEK(199)=148 THEN MAP(HEADX+HEADY*40)=UP:POKE 199,0:GOTO 1080
1180 IF PEEK(199)=149 THEN MAP(HEADX+HEADY*40)=DOWN:POKE 199,0:GOTO 1080
1190 IF PEEK(199)=150 THEN MAP(HEADX+HEADY*40)=RIGHT:POKE 199,0:GOTO 1080
1200 IF PEEK(199)=151 THEN MAP(HEADX+HEADY*40)=LEFT:POKE 199,0:GOTO 1080
1220 NEXT
1230 FOR I=784 TO 803:POKE I,0:NEXT
1235 IF SOUND>1 THEN POKE 806,GAMECALL 805
1240 FOR Y=0 TO 78 STEP 2:LINE 1,Y,159,Y:NEXT :FOR X=1 TO 159 STEP 2:LINE X,0,X,79,2
1241 NEXT :FOR X=160 TO 1 STEP -3:LINE X,0,X,79:NEXT :FOR Y=78 TO 0 STEP -3
1242 LINE 1,Y,159,Y:NEXT
1243 LOCATE 3,6:PRINT "GAME OVER"
1250 :
1260 :
1270 FOR I=0 TO 10000:NEXT :GOTO 2015
1280 FOR I=784 TO 803:POKE I,0:NEXT :BOX 32,31,128,48,1,0:LOCATE 3,5:PRINT "STAGE CLEAR!";
1281 IF SOUND>1 THEN POKE 806,WIN:CALL 805
1290 BOX 32,31,128,48:POKE 199,0:FOR X=34 TO 126:LINE X,34,X,46,2
1300 IF PEEK(199)<>0 THEN GOTO 2015
2000 NEXT
2001 :
2010 :
2015 OPEN "Snake" FOR RANDOM AS #1:L=LOF(1):CLOSE #1:IF L=0 THEN OPEN "Snake" FOR OUTPUT AS #1
2016 FOR I=0 TO 9:WRITE #1,"NOBODY",0:NEXT:CLOSE #1
2019 OPEN "Snake" FOR INPUT AS #1
2020 FOR I=1 TO 10:INPUT #1,TOPN$(I),TOPS(I):NEXT :CLOSE #1
2030 FOR I=10 TO 1 STEP -1
2040 IF SCORE>TOPS(I) THEN TOPS(I+1)=TOPS(I):TOPN$(I+1)=TOPN$(I):S=I:FLAG=1
2070 NEXT :IF FLAG=0 THEN GOTO 2090
2071 TEXT :PRINT "恭喜!你上榜了!":INPUT "大名:";TOPN$(S):TOPS(S)=SCORE
2072 IF TOPN$(S)="" THEN BEEP :GOTO 2071
2080 OPEN "Snake"FOR OUTPUT AS #1
2085 FOR I=1 TO 10:?1,TOPN$(I),TOPS(I):NEXT :CLOSE #1
2090 GRAPH
2100 FOR Y=1 TO 5:BOX 1,(Y-1)*16,159,Y*16-1,1,1:BOX 1,(Y-1)*16,159,Y*16-1,1,0
2110 LOCATE Y,1:PRINT Y;".";TOPN$(Y);:LOCATE Y,11:PRINT TOPS(Y);:NEXT
2115 POKE 199,0:FOR D=0 TO 65335:IF PEEK(199)<>0 THEN CLS:GOTO 2120
2116 NEXT :CLS
2120 FOR Y=1 TO 5:BOX 1,(Y-1)*16,159,Y*16-1,1,1:BOX 1,(Y-1)*16,159,Y*16-1,1,0
2125 LOCATE Y,1:PRINT Y+5;".";TOPN$(Y+5);:LOCATE Y,11:PRINT TOPS(Y+5);:NEXT
2130 C=ASC (INKEY$ ):C=ASC (INKEY$ )
2140 CLEAR:GOTO 0
|
|