DECLARE SUB zidan ()DECLARE SUB mubiao ()DECLARE SUB lose ()DECLARE SUB win ()DIM SHARED room(0 TO 24, 0 TO 15) AS INTEGERDIM SHARED state(127) AS INTEGERDIM SHARED score AS INTEGER, x0 AS INTEGERgun = 7: x0 = 20RANDOMIZE TIMERVIEW PRINT 1 TO 25: CLS '初始化边界LOCATE 1, x0 + 1: PRINT CHR$(201); STRING$(30, 205); CHR$(187)FOR i = 2 TO 24 LOCATE i, x0 + 1: PRINT CHR$(186); SPC(30); CHR$(186)NEXT iDEF SEG = &HB800POKE 24 * 160 + 2 * x0, 200FOR j = 2 TO 60 STEP 2 POKE 24 * 160 + 2 * x0 + j, 205NEXT jPOKE 24 * 160 + 2 * x0 + 62, 188COLOR 9LOCATE 24, x0 + 2 * gun: PRINT "[]"DO CALL mubiao '目标下移 FOR j = 1 TO 15 IF room(0, j) = 24 THEN CALL lose END IF NEXT j mubiaotime = TIMER + 1.5 DO zidantime = TIMER + .01 DO keyin = INP(&H60) IF keyin < 128 THEN state(keyin) = 1 ELSE state(keyin - 128) = 0 END IF LOOP UNTIL TIMER > zidantime OR INKEY$ <> "" COLOR 9 IF state(75) THEN '按键 左 LOCATE 24, x0 + 2 * gun: PRINT " " gun = gun - 1: IF gun = 0 THEN gun = 1 LOCATE 24, x0 + 2 * gun: PRINT "[]" END IF IF state(77) THEN '按键 右 LOCATE 24, x0 + 2 * gun: PRINT " " gun = gun + 1: IF gun = 16 THEN gun = 15 LOCATE 24, x0 + 2 * gun: PRINT "[]" END IF IF state(57) THEN '按键 空格 room(24, 0) = gun END IF IF state(28) THEN '按键 回车 DO WHILE INKEY$ = "" LOOP END IF IF state(1) THEN '按键 ESC COLOR 7 END END IF CALL zidan LOOP UNTIL TIMER > mubiaotimeLOOPSUB lose LOCATE 23, 1: PRINT "Lose" ENDEND SUBSUB mubiaoCOLOR 10FOR j = 1 TO 15 '产生目标 room(1, j) = 1: room(0, j) = room(0, j) + 1NEXT jFOR k = 1 TO 5 r = INT(RND * 15 + 1) room(1, r) = 0NEXT kFOR i = 23 TO 2 STEP -1 '下移目标 FOR j = 1 TO 15 room(i, j) = room(i - 1, j) IF room(i, j) = 1 THEN cc$ = "[]" ELSE cc$ = " " LOCATE i, x0 + 2 * j: PRINT cc$ NEXT jNEXT iEND SUBSUB win LOCATE 23, 1: PRINT "Win" ENDEND SUBSUB zidanCOLOR 12FOR i = 2 TO 23 IF room(i, 0) THEN '清除显示的子弹 (预备上移) LOCATE i, x0 + 2 * room(i, 0): PRINT " " END IF room(i, 0) = room(i + 1, 0)NEXT iFOR i = 2 TO 23 IF room(i, 0) THEN '显示子弹 (已上移) IF room(i, room(i, 0)) = 0 THEN LOCATE i, x0 + 2 * room(i, 0): PRINT "[]" ELSE LOCATE i, x0 + 2 * room(i, 0): PRINT " " room(i, room(i, 0)) = 0 room(i, 0) = 0 score = score + 1 '击中目标分数增一 LOCATE 1, x0 + 2 * 5: PRINT "SCORE:"; score IF score = 200 THEN win END IF END IFNEXT iroom(24, 0) = 0END SUB

评论