' ' Paper Plane ' ' 2001-4 Takeshi Yamaya(toyman@kosugi.nsk.ne.jp) ' 'GOTO makedatafile initial: '--------------------------------------------- SCREEN 7: RANDOMIZE INT(TIMER) CLS : PLAY "mb t180" 'constance set pi! = 3.141592 / 32: gamewait = 5: gravity = -.8 OPEN "pplane.dat" FOR INPUT AS #1 INPUT #1, a$: highscore = VAL(a$): INPUT #1, a$: highround = VAL(a$): INPUT #1, name$ CLOSE DIM bmap(41, 25) AS INTEGER DIM bx(32) AS INTEGER, by(32) AS INTEGER, bt(32) AS INTEGER DIM pre.bx(32) AS INTEGER, pre.by(32) AS INTEGER DIM se$(10): RESTORE FOR i = 0 TO 7: READ se$(i): NEXT DATA "mf o2 l16cgeg>cgcg>egcg>egce" DATA "mfo3l16c>cp5" DATA "mb o1l32c" DATA "mbo3c32" DATA "mbo4g32" DATA "mf o4l8cgeb>p8cgc" DATA "mb l32o1cgdc>>cc<<>>cc<< 180 OR py < 8 THEN GOTO gameover tmpx = INT(px / 8): tmpy = INT(py / 8) IF bmap(tmpx, tmpy) <> 0 THEN GOTO gameover 'add score IF bmap(tmpx - 1, tmpy) <> 0 THEN score = score + 7: PLAY se$(4) IF bmap(tmpx, tmpy - 1) <> 0 THEN score = score + 8: PLAY se$(4) IF bmap(tmpx + 1, tmpy) <> 0 THEN score = score + 9: PLAY se$(4) IF bmap(tmpx, tmpy + 1) <> 0 THEN score = score + 6: PLAY se$(4) GOSUB block.proc '----Draw GOSUB plane.draw LOCATE 24, 1: PRINT USING "Score ######### Round ######"; score; round; GOSUB waiter GOTO gamemain '################################################## gameover: PLAY se$(6) GOSUB waiter2 GOSUB keywait: CLS : LOCATE 8, 1: LOCATE 1, 1: ' PRINT " ": PRINT " ----GAME OVER---- ": PRINT : PRINT : PRINT : PRINT : PRINT USING " Round ###### "; round: PRINT PRINT USING " Your Score is ###### "; score: PRINT : COLOR 13 PRINT " "; name$ PRINT USING " High-score is ###### "; highscore: PRINT PRINT USING " High-round is ###### "; highround COLOR 15 IF highscore < score THEN highscore = score: highround = round PRINT : PRINT : PRINT : COLOR 14: PRINT " You are New Top Player! Good play.": COLOR 15 PLAY se$(0) INPUT "What's Your Name?", name$ IF name$ = "" THEN name$ = "Secret" OPEN "pplane.dat" FOR OUTPUT AS #1 PRINT #1, highscore PRINT #1, highround PRINT #1, name$; "("; DATE$; ")" CLOSE END IF GOSUB keywait GOTO title: '################################################## plane: 'player Key check backangle = 0 IF INP(&H60) = 57 THEN backangle = 2 IF flyflag < 3 THEN v = v + 1 - flyflag * .2: flyflag = flyflag + 1 ELSE flyflag = 0 END IF 'angle culc--------------- w = -2 * COS(angle * pi) + backangle * v * .3 IF v = 0 THEN IF angle > 16 THEN w = w + 1 ELSE w = w - 1 angle = angle + w '-------place culc--------------- vx = v * COS(pi * angle) vy = v * SIN(pi * angle) + gravity vy = -vy v = v + gravity * SIN(pi * angle) px = px + vx: py = py + vy IF v < 0 THEN v = 0 IF v > 6 THEN v = 6 IF px < 8 THEN px = 8 IF px > 324 THEN px = 8: GOSUB goal IF py < 0 THEN py = 0 IF py > 194 THEN py = 194 angle = angle AND 63 'for debug 'LOCATE 2, 3: PRINT USING "### ### ### ###"; px; py; vy; angle RETURN plane.draw: LINE (pre.px, pre.py)-(pre.px + pre.x1, pre.py + pre.y1), 0 LINE (pre.px, pre.py)-(pre.px + pre.x2, pre.py + pre.y2), 0 LINE (pre.px + pre.x1, pre.py + pre.y1)-(pre.px + pre.x2, pre.py + pre.y2), 0 x1 = COS(pi * angle) * 8 y1 = -SIN(pi * angle) * 8 x2 = COS(pi * (angle - backangle * 4)) * -5 y2 = -SIN(pi * (angle - backangle * 4)) * -5 'LINE (tmpx * 8, tmpy * 8)-(tmpx * 8 + 7, tmpy * 8 + 7), 13, B LINE (px, py)-(px + x1, py + y1), 15 LINE (px, py)-(px + x2, py + y2), 15 LINE (px + x1, py + y1)-(px + x2, py + y2), 15 pre.px = px: pre.py = py pre.x1 = x1: pre.x2 = x2 pre.y1 = y1: pre.y2 = y2 RETURN '# Block's Proc ################################## block.init: '---------------------------------------- FOR i = 0 TO 39 FOR j = 0 TO 22 bmap(i, j) = 0 IF j = 0 OR j = 22 THEN bmap(i, j) = 8 NEXT NEXT FOR i = 0 TO 32: bx(i) = 0: by(i) = 0: bt(i) = 0: pre.bx(i) = 0: pre.by(i) = 0: NEXT bnum = 0: RETURN block.proc: '---------------------------------------- IF RND * 100 < (round * 10 + time AND 300) THEN GOSUB block.generate a = 0: b = bnum FOR i = 1 TO b IF bt(i) > 0 THEN bt(i) = bt(i) - 1 IF bt(i) < 3 THEN ccc = 4 ELSE ccc = 6 LINE (bx(i) * 8, by(i) * 8)-(bx(i) * 8 + 7, by(i) * 8 + 7), ccc, BF bmap(bx(i), by(i)) = 6: a = a + 1 bx(a) = bx(i): by(a) = by(i): bt(a) = bt(i) ELSE IF bmap(bx(i), by(i) + 1) = 0 THEN bmap(bx(i), by(i)) = 0: LINE (bx(i) * 8, by(i) * 8)-(bx(i) * 8 + 7, by(i) * 8 + 7), 0, BF by(i) = by(i) + 1 bmap(bx(i), by(i)) = 6: LINE (bx(i) * 8, by(i) * 8)-(bx(i) * 8 + 7, by(i) * 8 + 7), 6, BF a = a + 1 bx(a) = bx(i): by(a) = by(i): bt(a) = bt(i) ELSE bnum = bnum - 1: PLAY se$(2) END IF END IF NEXT RETURN block.generate: '------------------------------------ rrrr = round + 5: IF rrrr > 25 THEN rrrr = 25 IF bnum < rrrr + 5 THEN bnum = bnum + 1: rrrr = (round MOD 5) * 10 bx(bnum) = RND * 34 + 5: by(bnum) = 1: bt(bnum) = -RND * rrrr + 50 END IF RETURN block.display: '------------------------------------- FOR i = 0 TO 39 FOR j = 0 TO 22 LINE (i * 8, j * 8)-(i * 8 + 7, j * 8 + 7), bmap(i, j), BF NEXT NEXT RETURN block.del: '---------------------------------------- blockline = 20 - round / 7 IF blockline < 7 THEN blockline = 7 FOR j = blockline TO 1 STEP -1 FOR i = 0 TO 39 IF bmap(i, j) <> 0 THEN score = score + 1 bmap(i, j) = 0 LINE (i * 8, j * 8)-(i * 8 + 7, j * 8 + 7), 7, BF END IF NEXT NEXT bnum = 0 RETURN '################################################## goal: '---------------------------------------- PLAY se$(4) round = round + 1 score = score + 30 + round * 10 IF (round MOD 7) = 0 THEN GOSUB block.del: GOSUB waiter2: GOSUB block.display IF round MOD 10 = 5 THEN gamewait = gamewait - 1 IF round MOD 10 = 9 THEN gamewait = gamewait + 1 IF round = 30 THEN gamewait = gamewait - 1 RETURN keywait: '---------------------------------------- LOCATE 24, 1: COLOR 4: PRINT " PUSH SPACE KEY!! "; WHILE INP(&H60) <> 57: a$ = INKEY$: WEND WHILE INP(&H60) = 57: a$ = INKEY$: WEND LOCATE 24, 1: PRINT " "; PLAY se$(1): COLOR 15 RETURN waiter: '---------------------------------------- FOR wwww = 0 TO gamewait WHILE (INP(&H3DA) AND 8) <> 0: WEND WHILE (INP(&H3DA) AND 8) = 0: WEND NEXT WHILE INKEY$ <> "": WEND RETURN waiter2: '---------------------------------------- FOR zzzz = 0 TO 10: GOSUB waiter: NEXT RETURN makedatafile: CLS PRINT "Make Data File." OPEN "pplane.dat" FOR OUTPUT AS #1 PRINT #1, 0 PRINT #1, 0 PRINT #1, "Top score("; DATE$; ")" CLOSE PRINT "Ok, Success." END