'=========================================================================== ' Subject: SEA BATTLE (LIKE BATTLESHIP) Date: 11-08-97 (20:42) ' Author: Andrey Berezansky Code: QB, QBasic, PDS ' Origin: nikolai@nsi.co.il Packet: GAMES.ABC '=========================================================================== ' fixed things: ' 1) controls (now ARROW keys -to move ,SPACE -to switche ' vertical/horizontal ,ENTER -to place the ship) ; ' 2) computer (better orientation) ; ' 3) loses (ships that you didnt shot are shown in blue color ' at the end when you lose to computer) ' ' IMPORTANT FOR NUBER 10 - (IN THE GAME) PRESS "0" ' IMPORTANT PRESS ANY KEY BETWEEN TURNS ' 'programmer is BEREZANSKY ANDREY email - nikol@cs.bgu.ac.il DECLARE SUB loos () DECLARE SUB win () DECLARE SUB compush () DECLARE SUB mturn () DECLARE SUB cturn () DECLARE SUB shipgrp () DECLARE SUB risunok () RANDOMIZE TIMER SCREEN 0 CLS DIM SHARED moy1(10, 10) DIM SHARED moy2(10, 10) 10 FOR i = 1 TO 10 ships = ships + 1 CALL shipgrp NEXT i FOR iii = 1 TO 10 FOR iiii = 1 TO 10 COLOR 1, 11 IF moy1(iii, iiii) = 1 THEN LOCATE (iiii + 5), (iii + 4) * 2 + 1: PRINT "*" NEXT iiii NEXT iii CALL compush DO WHILE endgame = 0 CALL mturn IF endgame = 0 THEN CALL cturn LOOP SUB compush a = 1 2000 y11 = 0: y12 = 0: x11 = 0: x12 = 0: m = 0 hrv = INT(RND * 3) IF hrv = 0 THEN 2000 x = INT(RND * 10) IF x = 0 THEN 2000 y = INT(RND * 10) IF y = 0 THEN 2000 IF a = 1 THEN b = 3 IF a = 2 THEN b = 2 IF a = 4 THEN b = 1 IF a = 7 THEN b = 0 IF hrv = 1 AND y + b > 10 THEN 2000 IF hrv = 2 AND x + b > 10 THEN 2000 IF hrv = 1 THEN IF y > 1 THEN y11 = y - 1 IF y = 1 THEN y11 = y IF y + b < 10 THEN y12 = y + b + 1 IF y + b = 10 THEN y12 = y + b FOR i = y11 TO y12 IF x > 1 THEN IF moy2(x - 1, i) = 1 THEN m = m + 1 END IF IF moy2(x, i) = 1 THEN m = m + 1 IF x < 10 THEN IF moy2(x + 1, i) = 1 THEN m = m + 1 END IF NEXT IF m = 0 THEN FOR i = y TO y + b moy2(x, i) = 1 NEXT a = a + 1 END IF END IF IF hrv = 2 THEN IF x > 1 THEN x11 = x - 1 IF x = 1 THEN x11 = x IF x + b < 10 THEN x12 = x + b + 1 IF x + b = 10 THEN x12 = x + b FOR i = x11 TO x12 IF y > 1 THEN IF moy2(i, y - 1) = 1 THEN m = m + 1 END IF IF moy2(i, y) = 1 THEN m = m + 1 IF y < 10 THEN IF moy2(i, y + 1) = 1 THEN m = m + 1 END IF NEXT IF m = 0 THEN FOR i = x TO x + b moy2(i, y) = 1 NEXT a = a + 1 END IF END IF IF a < 11 THEN 2000 END SUB SUB cturn SHARED endgame, lsp, heat, xx, yy x = xx: y = yy 3000 IF heat = 1 THEN yy = y: xx = x IF x < 10 THEN IF moy1(x + 1, y) = 1 OR moy1(x + 1, y) = 0 THEN IF y < 10 THEN moy1(x + 1, y + 1) = 2 IF y > 1 THEN moy1(x + 1, y - 1) = 2 x = x + 1 GOTO 3001 END IF IF moy1(x + 1, y) = 3 THEN IF y < 10 THEN moy1(x + 2, y + 1) = 2 IF y > 1 THEN moy1(x + 2, y - 1) = 2 IF moy1(x + 2, y) = 3 THEN IF y < 10 THEN moy1(x + 3, y + 1) = 2 IF y > 1 THEN moy1(x + 3, y - 1) = 2 x = x + 3: GOTO 3001 END IF IF moy1(x + 2, y) = 1 THEN x = x + 2: GOTO 3001 END IF END IF END IF IF y < 10 THEN IF moy1(x, y + 1) = 1 OR moy1(x, y + 1) = 0 THEN IF x < 10 THEN moy1(x + 1, y + 1) = 2 IF x > 1 THEN moy1(x - 1, y + 1) = 2 y = y + 1 GOTO 3001 END IF IF moy1(x, y + 1) = 3 THEN IF x < 10 THEN moy1(x + 1, y + 2) = 2 IF x > 1 THEN moy1(x - 1, y + 2) = 2 IF moy1(x, y + 2) = 3 THEN IF x < 10 THEN moy1(x + 1, y + 3) = 2 IF x > 1 THEN moy1(x - 1, y + 3) = 2 y = y + 3: GOTO 3001 END IF IF moy1(x, y + 2) = 1 THEN y = y + 2: GOTO 3001 END IF END IF END IF IF x > 1 THEN IF moy1(x - 1, y) = 1 OR moy1(x - 1, y) = 0 THEN IF y < 10 THEN moy1(x - 1, y + 1) = 2 IF y > 1 THEN moy1(x - 1, y - 1) = 2 x = x - 1 GOTO 3001 END IF IF moy1(x - 1, y) = 3 THEN IF y < 10 THEN moy1(x - 2, y + 1) = 2 IF y > 1 THEN moy1(x - 2, y - 1) = 2 IF moy1(x - 2, y) = 3 THEN IF y < 10 THEN moy1(x - 3, y + 1) = 2 IF y > 1 THEN moy1(x - 3, y - 1) = 2 x = x - 3: GOTO 3001 END IF IF moy1(x - 2, y) = 1 THEN x = x - 2: GOTO 3001 END IF END IF END IF IF y > 1 THEN IF moy1(x, y - 1) = 1 OR moy1(x, y - 1) = 0 THEN IF x < 10 THEN moy1(x + 1, y - 1) = 2 IF x > 1 THEN moy1(x - 1, y - 1) = 2 y = y - 1 GOTO 3001 END IF IF moy1(x, y - 1) = 3 THEN IF x < 10 THEN moy1(x + 1, y - 2) = 2 IF x > 1 THEN moy1(x - 1, y - 2) = 2 IF moy1(x, y - 2) = 3 THEN IF x < 10 THEN moy1(x + 1, y - 3) = 2 IF x > 1 THEN moy1(x - 1, y - 3) = 2 y = y - 3: GOTO 3001 END IF IF moy1(x, y - 2) = 1 THEN y = y - 2: GOTO 3001 END IF END IF END IF END IF x = INT(RND * 10) + 1 y = INT(RND * 10) + 1 IF x = 11 OR y = 11 THEN 3000 IF moy1(x, y) = 2 OR moy1(x, y) = 3 THEN 3000 3001 COLOR 15, 0 LOCATE 18, 40: PRINT "COMPUTER" FOR nn = 1 TO 20000: NEXT COLOR 15, 0 LOCATE 21, 63: PRINT y IF x = 1 THEN LOCATE 21, 41: PRINT "A" END IF IF x = 2 THEN LOCATE 21, 41: PRINT "B" END IF IF x = 3 THEN LOCATE 21, 41: PRINT "C" END IF IF x = 4 THEN LOCATE 21, 41: PRINT "D" END IF IF x = 5 THEN LOCATE 21, 41: PRINT "E" END IF IF x = 6 THEN LOCATE 21, 41: PRINT "F" END IF IF x = 7 THEN LOCATE 21, 41: PRINT "G" END IF IF x = 8 THEN LOCATE 21, 41: PRINT "H" END IF IF x = 9 THEN LOCATE 21, 41: PRINT "I" END IF IF x = 10 THEN LOCATE 21, 41: PRINT "J" END IF IF moy1(x, y) = 1 THEN IF x < 10 THEN IF moy1(x + 1, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 IF x > 1 THEN IF moy1(x - 1, y) = 1 OR moy1(x - 1, y) = 3 THEN moy1(x, y) = 3 ELSE moy1(x, y) = 2 END IF ELSE moy1(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF IF moy1(x + 1, y) = 3 THEN IF moy1(x + 2, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 IF x > 1 THEN IF moy1(x - 1, y) = 1 THEN moy1(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF IF moy1(x + 1, y) = 3 THEN IF moy1(x + 2, y) = 3 THEN IF moy1(x + 3, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF END IF END IF IF x > 1 THEN IF moy1(x - 1, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 IF x < 10 THEN IF moy1(x + 1, y) = 1 OR moy1(x + 1, y) = 3 THEN moy1(x, y) = 3 ELSE moy1(x, y) = 2 END IF ELSE moy1(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF IF moy1(x - 1, y) = 3 THEN IF moy1(x - 2, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 IF x < 10 THEN IF moy1(x + 1, y) = 1 THEN moy1(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF IF moy1(x - 1, y) = 3 THEN IF moy1(x - 2, y) = 3 THEN IF moy1(x - 3, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF END IF END IF IF y < 10 THEN IF moy1(x, y + 1) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 IF y > 1 THEN IF moy1(x, y - 1) = 1 OR moy1(x, y - 1) = 3 THEN moy1(x, y) = 3 ELSE moy1(x, y) = 2 END IF ELSE moy1(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF IF moy1(x, y + 1) = 3 THEN IF moy1(x, y + 2) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 IF y > 1 THEN IF moy1(x, y - 1) = 1 THEN moy1(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF IF moy1(x, y + 1) = 3 THEN IF moy1(x, y + 2) = 3 THEN IF moy1(x, y + 3) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF END IF END IF IF y > 1 THEN IF moy1(x, y - 1) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 IF y < 10 THEN IF moy1(x, y + 1) = 1 OR moy1(x, y + 1) = 3 THEN moy1(x, y) = 3 ELSE moy1(x, y) = 2 END IF ELSE moy1(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF IF moy1(x, y - 1) = 3 THEN IF moy1(x, y - 2) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 IF y < 10 THEN IF moy1(x, y + 1) = 1 THEN moy1(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF IF moy1(x, y - 1) = 3 THEN IF moy1(x, y - 2) = 3 THEN IF moy1(x, y - 3) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "*" heat = 1 moy1(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF END IF END IF END IF COLOR 4, 11 LOCATE 18, 40: PRINT " KILLED ! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "o" moy1(x, y) = 2 '****************************************************************** IF x < 10 THEN IF moy1(x + 1, y) = 3 THEN IF moy1(x + 2, y) = 3 THEN IF x + 4 < 11 THEN IF y < 10 THEN moy1(x + 4, y + 1) = 2 IF y > 1 THEN moy1(x + 4, y - 1) = 2 moy1(x + 4, y) = 2 END IF IF y < 10 THEN moy1(x + 3, y + 1) = 2 IF y > 1 THEN moy1(x + 3, y - 1) = 2 moy1(x + 3, y) = 2 END IF IF y < 10 THEN moy1(x + 2, y + 1) = 2 IF y > 1 THEN moy1(x + 2, y - 1) = 2 moy1(x + 2, y) = 2 IF y < 10 AND x + 3 < 11 THEN moy1(x + 3, y + 1) = 2 IF y > 1 AND x + 3 < 11 THEN moy1(x + 3, y - 1) = 2 IF x + 3 < 11 THEN moy1(x + 3, y) = 2 END IF IF y > 1 THEN moy1(x + 1, y - 1) = 2 IF y < 10 THEN moy1(x + 1, y + 1) = 2 moy1(x + 1, y) = 2 END IF '****************************************************************** IF x > 1 THEN IF moy1(x - 1, y) = 3 THEN IF moy1(x - 2, y) = 3 THEN IF x - 4 > 0 THEN IF y < 10 THEN moy1(x - 4, y + 1) = 2 IF y > 1 THEN moy1(x - 4, y - 1) = 2 moy1(x - 4, y) = 2 END IF IF y < 10 THEN moy1(x - 3, y + 1) = 2 IF y > 1 THEN moy1(x - 3, y - 1) = 2 moy1(x - 3, y) = 2 END IF IF y < 10 THEN moy1(x - 2, y + 1) = 2 IF y > 1 THEN moy1(x - 2, y - 1) = 2 moy1(x - 2, y) = 2 IF y < 10 AND x - 3 > 0 THEN moy1(x - 3, y + 1) = 2 IF y > 1 AND x - 3 > 0 THEN moy1(x - 3, y - 1) = 2 IF x - 3 > 0 THEN moy1(x - 3, y) = 2 END IF IF y > 1 THEN moy1(x - 1, y - 1) = 2 IF y < 10 THEN moy1(x - 1, y + 1) = 2 moy1(x - 1, y) = 2 END IF '****************************************************************** IF y < 10 THEN IF moy1(x, y + 1) = 3 THEN IF moy1(x, y + 2) = 3 THEN IF y + 4 < 11 THEN IF x < 10 THEN moy1(x + 1, y + 4) = 2 IF x > 1 THEN moy1(x - 1, y + 4) = 2 moy1(x, y + 4) = 2 END IF IF x < 10 THEN moy1(x + 1, y + 3) = 2 IF x > 1 THEN moy1(x - 1, y + 3) = 2 moy1(x, y + 3) = 2 END IF IF x < 10 THEN moy1(x + 1, y + 2) = 2 IF x > 1 THEN moy1(x - 1, y + 2) = 2 moy1(x, y + 2) = 2 IF x < 10 AND y + 3 < 11 THEN moy1(x + 1, y + 3) = 2 IF x > 1 AND y + 3 < 11 THEN moy1(x - 1, y + 3) = 2 IF y + 3 < 11 THEN moy1(x, y + 3) = 2 END IF IF x > 1 THEN moy1(x - 1, y + 1) = 2 IF x < 10 THEN moy1(x + 1, y + 1) = 2 moy1(x, y + 1) = 2 END IF '****************************************************************** IF y > 1 THEN IF moy1(x, y - 1) = 3 THEN IF moy1(x, y - 2) = 3 THEN IF y - 4 > 0 THEN IF x < 10 THEN moy1(x + 1, y - 4) = 2 IF x > 1 THEN moy1(x - 1, y - 4) = 2 moy1(x, y - 4) = 2 END IF IF x < 10 THEN moy1(x + 1, y - 3) = 2 IF x > 1 THEN moy1(x - 1, y - 3) = 2 moy1(x, y - 3) = 2 END IF IF x < 10 THEN moy1(x + 1, y - 2) = 2 IF x > 1 THEN moy1(x - 1, y - 2) = 2 moy1(x, y - 2) = 2 IF x < 10 AND y - 3 > 1 THEN moy1(x + 1, y - 3) = 2 IF x > 1 AND y - 3 > 1 THEN moy1(x - 1, y - 3) = 2 IF y - 3 > 1 THEN moy1(x, y - 3) = 2 END IF IF x > 1 THEN moy1(x - 1, y - 1) = 2 IF x < 10 THEN moy1(x + 1, y - 1) = 2 moy1(x, y - 1) = 2 END IF '****************************************************************** heat = 0 lsp = lsp + 1 COLOR 15, 0 LOCATE 10, 42: PRINT lsp IF lsp = 10 THEN FOR iii = 1 TO 10 FOR iiii = 1 TO 10 COLOR 1, 11 IF moy2(iii, iiii) = 1 THEN LOCATE (iiii + 5), (iii + 24) * 2 + 1: PRINT "*" NEXT iiii NEXT iii DO WHILE INKEY$ = "": LOOP CALL loos endgame = 1 GOTO 3010 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 3000 END IF COLOR 15, 11 LOCATE 18, 40: PRINT " MISSED ! " LOCATE y + 5, (x + 4) * 2 + 1: PRINT "x" moy1(x, y) = 2 dd = 1 3010 DO WHILE INKEY$ = "": LOOP IF dd = 1 THEN LOCATE y + 5, (x + 4) * 2 + 1: PRINT "." END IF END SUB SUB loos COLOR 15, 0 CLS LOCATE 7, 20: PRINT "YOU LOSSE !!!" LOCATE 9, 25: PRINT "NICE GAME !!!" LOCATE 11, 30: PRINT "PLAY AGAIN SOON !!!" END SUB SUB mturn SHARED endgame, lsc 1000 COLOR 15, 0 LOCATE 18, 40: PRINT "YOU TURN !" LOCATE 21, 20: PRINT "PRESS LETTER FIRST : .THEN PRESS NUMBER : " DO WHILE exitt = 0 SELECT CASE INKEY$ CASE "a" x = 1: exitt = 1: LOCATE 21, 41: PRINT "A" CASE "b" x = 2: exitt = 1: LOCATE 21, 41: PRINT "B" CASE "c" x = 3: exitt = 1: LOCATE 21, 41: PRINT "C" CASE "d" x = 4: exitt = 1: LOCATE 21, 41: PRINT "D" CASE "e" x = 5: exitt = 1: LOCATE 21, 41: PRINT "E" CASE "f" x = 6: exitt = 1: LOCATE 21, 41: PRINT "F" CASE "g" x = 7: exitt = 1: LOCATE 21, 41: PRINT "G" CASE "h" x = 8: exitt = 1: LOCATE 21, 41: PRINT "H" CASE "i" x = 9: exitt = 1: LOCATE 21, 41: PRINT "I" CASE "j" x = 10: exitt = 1: LOCATE 21, 41: PRINT "J" END SELECT LOOP DO WHILE exitt2 = 0 SELECT CASE INKEY$ CASE "1" y = 1: exitt2 = 1: LOCATE 21, 64: PRINT "1" CASE "2" y = 2: exitt2 = 1: LOCATE 21, 64: PRINT "2" CASE "3" y = 3: exitt2 = 1: LOCATE 21, 64: PRINT "3" CASE "4" y = 4: exitt2 = 1: LOCATE 21, 64: PRINT "4" CASE "5" y = 5: exitt2 = 1: LOCATE 21, 64: PRINT "5" CASE "6" y = 6: exitt2 = 1: LOCATE 21, 64: PRINT "6" CASE "7" y = 7: exitt2 = 1: LOCATE 21, 64: PRINT "7" CASE "8" y = 8: exitt2 = 1: LOCATE 21, 64: PRINT "8" CASE "9" y = 9: exitt2 = 1: LOCATE 21, 64: PRINT "9" CASE "0" y = 10: exitt2 = 1: LOCATE 21, 64: PRINT "10" END SELECT LOOP IF moy2(x, y) = 1 THEN IF x < 10 THEN IF moy2(x + 1, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" IF x > 1 THEN IF moy2(x - 1, y) = 1 OR moy2(x - 1, y) = 3 THEN moy2(x, y) = 3 ELSE moy2(x, y) = 2 END IF ELSE moy2(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF IF moy2(x + 1, y) = 3 THEN IF moy2(x + 2, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 IF x > 1 THEN IF moy2(x - 1, y) = 1 THEN moy2(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF IF moy2(x + 1, y) = 3 THEN IF moy2(x + 2, y) = 3 THEN IF moy2(x + 3, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF END IF END IF IF x > 1 THEN IF moy2(x - 1, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" IF x < 10 THEN IF moy2(x + 1, y) = 1 OR moy2(x + 1, y) = 3 THEN moy2(x, y) = 3 ELSE moy2(x, y) = 2 END IF ELSE moy2(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF IF moy2(x - 1, y) = 3 THEN IF moy2(x - 2, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 IF x < 10 THEN IF moy2(x + 1, y) = 1 THEN moy2(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF IF moy2(x - 1, y) = 3 THEN IF moy2(x - 2, y) = 3 THEN IF moy2(x - 3, y) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF END IF END IF IF y < 10 THEN IF moy2(x, y + 1) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" IF y > 1 THEN IF moy2(x, y - 1) = 1 OR moy2(x, y - 1) = 3 THEN moy2(x, y) = 3 ELSE moy2(x, y) = 2 END IF ELSE moy2(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF IF moy2(x, y + 1) = 3 THEN IF moy2(x, y + 2) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 IF y > 1 THEN IF moy2(x, y - 1) = 1 THEN moy2(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF IF moy2(x, y + 1) = 3 THEN IF moy2(x, y + 2) = 3 THEN IF moy2(x, y + 3) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF END IF END IF IF y > 1 THEN IF moy2(x, y - 1) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" IF y < 10 THEN IF moy2(x, y + 1) = 1 OR moy2(x, y + 1) = 3 THEN moy2(x, y) = 3 ELSE moy2(x, y) = 2 END IF ELSE moy2(x, y) = 2 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF IF moy2(x, y - 1) = 3 THEN IF moy2(x, y - 2) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 IF y < 10 THEN IF moy2(x, y + 1) = 1 THEN moy2(x, y) = 3 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF IF moy2(x, y - 1) = 3 THEN IF moy2(x, y - 2) = 3 THEN IF moy2(x, y - 3) = 1 THEN COLOR 4, 11 LOCATE 18, 40: PRINT " HIT !!! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "*" moy2(x, y) = 2 DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF END IF END IF END IF COLOR 4, 11 LOCATE 18, 40: PRINT " KILLED ! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "o" moy2(x, y) = 2 lsc = lsc + 1 COLOR 15, 0 LOCATE 11, 42: PRINT lsc IF lsc = 10 THEN DO WHILE INKEY$ = "": LOOP CALL win endgame = 1 GOTO 1010 END IF DO WHILE INKEY$ = "": LOOP exitt = 0: exitt2 = 0: GOTO 1000 END IF IF moy2(x, y) = 2 OR moy2(x, y) = 3 THEN LOCATE 18, 40: PRINT "??????????" GOTO 1010 END IF COLOR 15, 11 LOCATE 18, 40: PRINT " MISSED ! " LOCATE y + 5, (x + 24) * 2 + 1: PRINT "x" moy2(x, y) = 2 1010 DO WHILE INKEY$ = "": LOOP END SUB SUB risunok SHARED ships COLOR 15, 0 LOCATE 3, 14: PRINT " YOUR SHIPS " LOCATE 3, 54: PRINT " ENEMY SHIPS " LOCATE 8, 34: PRINT " LOSSES :" LOCATE 10, 32: PRINT "YOURS :" LOCATE 11, 32: PRINT "ENEMIES :" LOCATE 18, 30: PRINT "STATUS : " COLOR 11, 13 LOCATE 1, 20: PRINT " SEA BATTLE by BEREZANSKY ANDREY ! " COLOR 7, 11 LOCATE 6, 10: PRINT " . . . . . . . . . . " LOCATE 7, 10: PRINT " . . . . . . . . . . " LOCATE 8, 10: PRINT " . . . . . . . . . . " LOCATE 9, 10: PRINT " . . . . . . . . . . " LOCATE 10, 10: PRINT " . . . . . . . . . . " LOCATE 11, 10: PRINT " . . . . . . . . . . " LOCATE 12, 10: PRINT " . . . . . . . . . . " LOCATE 13, 10: PRINT " . . . . . . . . . . " LOCATE 14, 10: PRINT " . . . . . . . . . . " LOCATE 15, 10: PRINT " . . . . . . . . . . " COLOR 1, 15 FOR y = 5 TO 14 IF y - 5 <> 0 THEN LOCATE y, 7: PRINT y - 5 NEXT LOCATE 15, 7: PRINT " 10" LOCATE 5, 10: PRINT " A B C D E F G H I J " COLOR 7, 11 LOCATE 6, 50: PRINT " . . . . . . . . . . " LOCATE 7, 50: PRINT " . . . . . . . . . . " LOCATE 8, 50: PRINT " . . . . . . . . . . " LOCATE 9, 50: PRINT " . . . . . . . . . . " LOCATE 10, 50: PRINT " . . . . . . . . . . " LOCATE 11, 50: PRINT " . . . . . . . . . . " LOCATE 12, 50: PRINT " . . . . . . . . . . " LOCATE 13, 50: PRINT " . . . . . . . . . . " LOCATE 14, 50: PRINT " . . . . . . . . . . " LOCATE 15, 50: PRINT " . . . . . . . . . . " COLOR 1, 4 FOR y = 5 TO 14 IF y - 5 <> 0 THEN LOCATE y, 47: PRINT y - 5 NEXT LOCATE 15, 47: PRINT " 10" LOCATE 5, 50: PRINT " A B C D E F G H I J " COLOR 7, 11 END SUB SUB shipgrp SHARED ships, yy, verhor, x1, y1 CALL risunok DIM moy(10, 10) verhor = 1 x1 = 1: y1 = 1 IF ships = 1 THEN yy = 3 IF ships = 2 THEN yy = 2 IF ships = 4 THEN yy = 1 IF ships = 7 THEN yy = 0 FOR iii = 0 TO yy moy(1, iii + 1) = 1 NEXT DO WHILE exitt = 0 FOR iii = 1 TO 10 FOR iiii = 1 TO 10 COLOR 1, 11 IF moy1(iii, iiii) = 1 THEN LOCATE (iiii + 5), (iii + 4) * 2 + 1: PRINT "*" COLOR 4, 11 IF moy(iii, iiii) = 1 THEN LOCATE (iiii + 5), (iii + 4) * 2 + 1: PRINT "*" NEXT iiii NEXT iii SELECT CASE INKEY$ CASE CHR$(0) + CHR$(80) IF verhor = 1 AND y1 + yy < 10 THEN y1 = y1 + 1 moy(x1, y1 - 1) = 0: moy(x1, y1 + yy) = 1 CALL risunok END IF IF verhor = 2 AND y1 < 10 THEN y1 = y1 + 1 FOR re = x1 TO x1 + yy moy(re, y1 - 1) = 0: moy(re, y1) = 1 NEXT CALL risunok END IF CASE CHR$(0) + CHR$(72) IF verhor = 1 AND y1 > 1 THEN y1 = y1 - 1 moy(x1, y1 + yy + 1) = 0: moy(x1, y1) = 1 CALL risunok END IF IF verhor = 2 AND y1 > 1 THEN y1 = y1 - 1 FOR re = x1 TO x1 + yy moy(re, y1 + 1) = 0: moy(re, y1) = 1 NEXT CALL risunok END IF CASE CHR$(0) + CHR$(77) IF verhor = 2 AND x1 + yy < 10 THEN x1 = x1 + 1 moy(x1 - 1, y1) = 0: moy(x1 + yy, y1) = 1 CALL risunok END IF IF verhor = 1 AND x1 < 10 THEN x1 = x1 + 1 FOR re = y1 TO y1 + yy moy(x1, re) = 1: moy(x1 - 1, re) = 0 NEXT CALL risunok END IF CASE CHR$(0) + CHR$(75) IF verhor = 2 AND x1 > 1 THEN x1 = x1 - 1 moy(x1 + 1 + yy, y1) = 0: moy(x1, y1) = 1 CALL risunok END IF IF verhor = 1 AND x1 > 1 THEN x1 = x1 - 1 FOR re = y1 TO y1 + yy moy(x1, re) = 1: moy(x1 + 1, re) = 0 NEXT CALL risunok END IF CASE " " IF verhor = 1 AND x1 + yy < 11 THEN FOR re = y1 + 1 TO y1 + yy moy(x1, re) = 0 NEXT FOR re = x1 + 1 TO x1 + yy moy(re, y1) = 1 NEXT CALL risunok verhor = 2 GOTO 100 END IF IF verhor = 2 AND y1 + yy < 11 THEN FOR re = y1 + 1 TO y1 + yy moy(x1, re) = 1 NEXT FOR re = x1 + 1 TO x1 + yy moy(re, y1) = 0 NEXT CALL risunok verhor = 1 END IF 100 CASE CHR$(13) mm = 0 IF verhor = 1 THEN IF y1 > 1 THEN y11 = y1 - 1 IF y1 = 1 THEN y11 = y1 IF y1 + yy = 10 THEN y12 = y1 + yy IF y1 + yy < 10 THEN y12 = y1 + yy + 1 FOR i = y11 TO y12 IF moy1(x1, i) <> 0 THEN mm = mm + 1 IF x1 > 1 THEN IF moy1(x1 - 1, i) <> 0 THEN mm = mm + 1 END IF IF x1 < 10 THEN IF moy1(x1 + 1, i) <> 0 THEN mm = mm + 1 END IF NEXT IF mm = 0 THEN FOR i = y1 TO y1 + yy moy1(x1, i) = 1 NEXT exitt = 1 END IF END IF IF verhor = 2 THEN IF x1 > 1 THEN x11 = x1 - 1 IF x1 = 1 THEN x11 = x1 IF x1 + yy = 10 THEN x12 = x1 + yy IF x1 + yy < 10 THEN x12 = x1 + yy + 1 FOR i = x11 TO x12 IF moy1(i, y1) <> 0 THEN mm = mm + 1 IF y1 > 1 THEN IF moy1(i, y1 - 1) <> 0 THEN mm = mm + 1 END IF IF y1 < 10 THEN IF moy1(i, y1 + 1) <> 0 THEN mm = mm + 1 END IF NEXT IF mm = 0 THEN FOR i = x1 TO x1 + yy moy1(i, y1) = 1 NEXT exitt = 1 END IF END IF END SELECT LOOP END SUB SUB win CLS COLOR 15, 0 LOCATE 7, 20: PRINT "YOU WIN !!!" LOCATE 9, 25: PRINT "WELL DONE !!!" LOCATE 11, 30: PRINT "PLAY AGAIN SOON !!!" END SUB