' Programm: Ships.bas ' Function: puzzle game ' Language: PB, QB, TB ' Computer magazine ' (c) BlackMedia 31 CLS : DEFINT A-Z: DIM p(255, 99), s(5): RANDOMIZE TIMER FOR y = 1 TO 10 FOR x = 1 TO 10: p(x, y) = 1 NEXT NEXT FOR s = 2 TO 5 no: x = INT(RND * 10) + 1 y = INT(RND * 10) + 1 xp = INT(RND * 2) - 1 yp = INT(RND * 2) - 1 IF xp <> 0 AND yp <> 0 THEN GOTO no IF xp = 0 AND yp = 0 THEN GOTO no FOR n = 1 TO s IF p(x+xp*n,y+yp*n) <> 1 THEN GOTO no NEXT n FOR n = 1 TO s p(x + xp * n, y + yp * n) = -s: NEXT n NEXT s try: GOSUB board LOCATE 22, 65: INPUT a$ IF a$="q" then GOTO finish a$ = UCASE$(a$) + "x" x = ABS(ASC(a$) - 64) y = ABS(VAL(MID$(a$, 2, 2))): p = p(x, y) IF p > 1 OR p = 0 THEN BEEP: GOTO try IF p < 0 THEN p = ABS(p): s(p) = s(p) + 1 p(x, y) = p FOR t = 999 TO 499 STEP -39 SOUND t, 1 NEXT END IF IF p = 1 THEN SOUND 200, 6: p(x, y) = 0 V = V + 1: GOTO try board: LOCATE 1, 1: PRINT "Search ": PRINT V FOR n = 1 TO 10: LOCATE 2, 6 + n * 5 PRINT CHR$(64 + n): LOCATE 2 + n * 2, 4 PRINT n: NEXT COLOR 0, 7 FOR x = 1 TO 10: FOR y = 1 TO 10 y2 = 2 + y * 2: x2 = 5 + x * 5 LOCATE y2, x2: p = p(x, y) IF p = 1 OR p < 0 THEN PRINT " " IF p = 0 THEN PRINT " X" IF p > 1 THEN IF s(p) < p THEN PRINT " "; CHR$(173) ELSE PRINT p END IF END IF NEXT: NEXT COLOR 7, 0 FOR n = 2 TO 5: IF s(n) <> n THEN RETURN NEXT finish: PRINT "Game over"