DECLARE SUB Details (s!) DECLARE SUB modul (xa!, xb!, t!) DECLARE SUB Build (s!) DECLARE SUB Load (s!, fina$) DECLARE SUB Save (s!) DECLARE SUB Preview (s!, u!) DECLARE SUB Fly (s!) RANDOMIZE TIMER SCREEN 12 DIM SHARED r r = 20 DIM SHARED t(12, 9, 10), n, m, power, lasers, works, control, move, storage, er AS STRING FOR d = 1 TO 10 t(6, 5, d) = 7 NEXT d a = 0: b = 0 n = r * 1.4 m = r * 1.4 DIM it(160, 100) Load 1, "Bomber" Load 2, "Q!" Load 3, "Vampire" Load 4, "Quirk" Load 5, "N 219" Load 6, "F-Wing" Load 7, "Vamp" Load 8, "Saks" Load 9, "N 999" first = 1 DO: y$ = INKEY$ IF first = 1 THEN y$ = "0" first = 0 SELECT CASE UCASE$(y$) CASE "" CASE "L": Load s, "": Preview s, 2 CASE "S": Save s CASE "B": r = 20: Build s: Preview s, 2 CASE "F": Fly s: Preview s, 2 CASE "D": Details s: Preview s, 2 CASE " ": Preview s, 2 CASE ELSE: s = VAL(y$) + 1: IF (s = 1 AND y$ = "0") OR s > 1 THEN Preview s, 2 END SELECT LOOP UNTIL INP(&H60) = 129 99 SYSTEM SUB Build (s) CLS FOR a = 0 TO 10 FOR b = 0 TO 7 modul a + 1, b + 1, t(a + 1, b + 1, s) NEXT b, a DO: y$ = INKEY$ CIRCLE (xa, xb), 5, 0 CIRCLE (xa + n * 2, xb), 5, 0 CIRCLE (xa, xb + m * 2), 5, 0 CIRCLE (xa + n * 2, xb + m * 2), 5, 0 SELECT CASE y$ CASE CHR$(0) + "M": a = a + 1 CASE CHR$(0) + "K": a = a - 1 CASE CHR$(0) + "P": b = b + 1 CASE CHR$(0) + "H": b = b - 1 CASE CHR$(9) i = i + 1 IF i > 7 THEN i = 1 modul 1, 1, i CASE CHR$(13) IF t(a + 2, b + 1, s) > 0 OR t(a, b + 1, s) > 0 OR t(a + 1, b + 2, s) > 0 OR t(a + 1, b, s) > 0 THEN t(a + 1, b + 1, s) = i modul a + 1, b + 1, i END IF CASE CHR$(8) t(a + 1, b + 1, s) = 0 modul a + 1, b + 1, 0 END SELECT IF a < 0 THEN a = 0 IF a > 10 THEN a = 10 IF b < 0 THEN b = 0 IF b > 7 THEN b = 7 xa = a * n * 2 xb = b * m * 2 CIRCLE (xa, xb), 5, 10 CIRCLE (xa + n * 2, xb), 5, 10 CIRCLE (xa, xb + m * 2), 5, 10 CIRCLE (xa + n * 2, xb + m * 2), 5, 10 LOOP UNTIL y$ = " " END SUB SUB Details (s) CLS LOCATE 4, 1 er = "": nmc = 0: cc = 0 power = 0: move = 0: works = 0: lasers = 0 control = 0: storage = 0 FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 1 THEN cc = cc + 2 NEXT b, a FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 3 THEN IF cc > 0 THEN cc = cc - 1: control = control + 6 ELSE nmc = nmc + 1 END IF NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 2 + .5)) + " more crew pods.": nmc = 0 IF cc > 0 THEN control = control + cc FOR a = 0 TO 10 FOR b = 0 TO 7 SELECT CASE t(a + 1, b + 1, s) CASE 2: IF control > 0 THEN control = control - 1: power = power + 2 ELSE nmc = nmc + 1 CASE 4: IF control > 0 THEN control = control - 1: move = move + 1 ELSE nmc = nmc + 1 CASE 5: IF control > 0 THEN control = control - 1: works = works + 1 ELSE nmc = nmc + 1 CASE 6: IF control > 0 THEN control = control - 1: lasers = lasers + 1 ELSE nmc = nmc + 1 CASE 7: storage = storage + 1 END SELECT NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 6 + .5)) + " more computer units.": nmc = 0 PRINT er PRINT "Reactor output:"; power; "KN" PRINT "ACCU storage space:"; INT(storage * 5); "BATT" IF power > 0 THEN PRINT " - Fill-up in:"; INT(storage / power * 50) / 5; "second(s)" PRINT "Engine power:"; move ^ 3; "KN" lasercontrol = control IF lasercontrol > 45 THEN lasercontrol = 45: laserplus = 45 + control ELSE laserplus = 0 PRINT "Laser power:"; lasers ^ 3 + laserplus; "KN" PRINT "Work stations abilities:"; works ^ 3; "Particles/use" torp = (works ^ 3) / 64 IF torp < 1 AND torp > 0 THEN PRINT " - 1 /"; 1 / torp; "Torpedos/second" IF torp >= 1 AND torp = INT(torp) THEN PRINT " - "; torp; "Torpedos/second" IF torp >= 1 AND torp < INT(torp) THEN PRINT " - "; INT(torp); "(-) Torpedos/second" IF torp >= 1 AND torp > INT(torp) THEN PRINT " - "; INT(torp); "(+) Torpedos/second" PRINT "Main ship controlers:"; control DIM plug(7, 7) FOR b = 0 TO 7 FOR a = 0 TO 10 FOR modd = 1 TO 7 IF t(a + 2, b + 1, s) = modd THEN plug(t(a + 1, b + 1, s), modd) = plug(t(a + 1, b + 1, s), modd) + 1 IF t(a, b + 1, s) = modd THEN plug(t(a + 1, b + 1, s), modd) = plug(t(a + 1, b + 1, s), modd) + 1 IF t(a + 1, b + 2, s) = modd THEN plug(t(a + 1, b + 1, s), modd) = plug(t(a + 1, b + 1, s), modd) + 1 IF t(a + 1, b, s) = modd THEN plug(t(a + 1, b + 1, s), modd) = plug(t(a + 1, b + 1, s), modd) + 1 NEXT modd, a, b PRINT menuver = plug(1, 3) + plug(2, 4) * 2 + plug(3, 4) * 3 PRINT "Theoretical menuverability:"; menuver workspeed = plug(1, 3) * 3 + plug(1, 5) + plug(2, 7) + plug(3, 5) * 2 + plug(3, 2) + plug(6, 5) * 5 PRINT "Theoretical work speed:"; workspeed comfort = plug(1, 3) * 3 + plug(1, 7) * 2 + plug(1, 5) + plug(2, 7) + plug(3, 5) * 2 + plug(6, 5) * 2 PRINT PRINT "Comfort:"; comfort SELECT CASE comfort CASE 0 TO 15: Rank$ = CHR$(10) + " - Bad design" CASE 16 TO 30: Rank$ = CHR$(10) + " - Typical design" CASE 31 TO 50: Rank$ = CHR$(10) + " - Good design" CASE IS > 50: Rank$ = CHR$(10) + " - Perfect design" END SELECT SELECT CASE menuver CASE 0 TO 15: Rank$ = Rank$ + CHR$(10) + " - Unmenuverable" CASE 16 TO 20: Rank$ = Rank$ + CHR$(10) + " - Somehow movable" CASE 20 TO 30: Rank$ = Rank$ + CHR$(10) + " - Normaly menuverable" CASE 30 TO 50: Rank$ = Rank$ + CHR$(10) + " - Very flexible" CASE IS > 50: Rank$ = Rank$ + CHR$(10) + " - Ultra flexible" END SELECT SELECT CASE workspeed CASE 0 TO 15: Rank$ = Rank$ + CHR$(10) + " - Not a work ship" CASE 15 TO 30: Rank$ = Rank$ + CHR$(10) + " - Hard to work in" CASE 30 TO 50: Rank$ = Rank$ + CHR$(10) + " - A normal workplace" CASE IS > 50: Rank$ = Rank$ + CHR$(10) + " - Your favorite office" END SELECT PRINT PRINT "Ship rank: "; Rank$ IF power > 0 THEN fillup = INT(storage / power * 50) / 5 'power, lasers, works, control, move, storage r = 2 FOR modd = 7 TO 1 STEP -1 FOR z = 0 TO 10000: NEXT z FOR b = 0 TO 7 FOR a = 0 TO 10 OUT &H63, 1 IF t(a + 1, b + 1, s) = modd THEN r = 2: modul a + 1, b + 1, modd: OUT &H63, 2 r = 10: modul a + 12, b + 10, modd PSET (a + 480, b + 100), modd + 8 END IF NEXT a, b, modd ss = 1 sss = s DO: y$ = INKEY$ SELECT CASE y$ CASE "+" PALETTE LOCATE 4, 1: PRINT STRING$(80, 32) modd = modd + 1 CASE "-" PALETTE LOCATE 4, 1: PRINT STRING$(80, 32) modd = modd - 1 END SELECT IF modd > 7 THEN modd = 1 IF modd < 1 THEN modd = 7 LOCATE 4, 1 COLOR modd + 8 SELECT CASE modd CASE 1: PRINT "Crew pods "; CASE 2: PRINT "Reactors "; CASE 3: PRINT "Computer units "; CASE 4: PRINT "Engines "; CASE 5: PRINT "Work pods "; CASE 6: PRINT "Laser units "; CASE 7: PRINT "Storage + wires "; END SELECT FOR t = 1 TO 7 IF t <> modd THEN COLOR t + 8: PRINT STRING$(plug(modd, t), ">"); NEXT t s = s + ss IF s < 10 THEN ss = 1 IF s > 63 THEN ss = -1: s = 63 PALETTE modd, 2 ^ 16 * s + 257 * s LOOP UNTIL y$ = " " PALETTE: COLOR 15 s = sss END SUB SUB Fly (s) 'izracuni er = "": nmc = 0: cc = 0 power = 0: move = 0: works = 0: lasers = 0 control = 0: storage = 0 FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 1 THEN cc = cc + 2 NEXT b, a FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 3 THEN IF cc > 0 THEN cc = cc - 1: control = control + 6 ELSE nmc = nmc + 1 END IF NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 2 + .5)) + " more crew pods.": nmc = 0 IF cc > 0 THEN control = control + cc FOR a = 0 TO 10 FOR b = 0 TO 7 SELECT CASE t(a + 1, b + 1, s) CASE 2: IF control > 0 THEN control = control - 1: power = power + 2 ELSE nmc = nmc + 1 CASE 4: IF control > 0 THEN control = control - 1: move = move + 1 ELSE nmc = nmc + 1 CASE 5: IF control > 0 THEN control = control - 1: works = works + 1 ELSE nmc = nmc + 1 CASE 6: IF control > 0 THEN control = control - 1: lasers = lasers + 1 ELSE nmc = nmc + 1 CASE 7: storage = storage + 1 END SELECT NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 6 + .5)) + " more computer units.": nmc = 0 IF power > 0 THEN fillup = INT(storage / power * 50) / 5 IF storage > 0 AND control > 0 THEN moverate = INT(INT(move / storage * 20 * fillup) / control * 50) / 5 IF storage > 0 AND control > 0 THEN firerate = INT(INT(lasers / storage * 20 * fillup) / control * 50) / 5 IF storage > 0 AND control > 0 THEN workrate = INT(INT(works / storage * 20 * fillup) / control * 50) / 5 CLS 'okvirji LINE (0, 0)-(639, 479), 8, B LINE (1, 1)-(638, 478), 7, B LINE (2, 2)-(480, 477), 8, B LINE (481, 1)-(637, 477), 7, BF LINE (485, 7)-(495, 450), 8, B LINE (497, 6)-(507, 450), 8, B LINE (200, 150)-(280, 230), 7, BF ra = 235: a = ra: b = 460: batt = 0: speed = 50 DIM za(10), zb(10), s(10) 'zvezde FOR x = 1 TO 10 za(x) = RND * 480 zb(x) = RND * 480 NEXT x DO: y = INP(&H60) 'zvezde FOR x = 1 TO 10 PSET (za(x), zb(x)), s(x) zb(x) = zb(x) + speed / (10 + 2 * x) IF zb(x) > 480 THEN zb(x) = 3: za(x) = RND * 480 + 3 s(x) = POINT(za(x), zb(x)) PSET (za(x), zb(x)), 14 + (x MOD 2) NEXT x 'crtice FOR n = 4 TO 24 STEP 2 LINE (485, 450 + n)-(495, 450 + n), 2 - 8 * (INT(RND * fillup / 2) > 0) LINE (497, 450 + n)-(507, 450 + n), 4 - 8 * (INT(RND * (26 - control)) <= 0) LINE (509, 450 + n)-(519, 450 + n), 6 - 8 * (INT(RND * (46 - control)) <= 0) LINE (521, 450 + n)-(531, 450 + n), 5 - 8 * (INT(RND * works) > 0) NEXT n 'tipke xb = b: xspeed = speed: nic = 0 SELECT CASE y CASE 200: speed = speed + (move ^ 3) / 50 CASE 208: speed = speed - (move ^ 3) / 50 CASE 77: ra = ra + (move ^ 3) / 50 CASE 75: ra = ra - (move ^ 3) / 50 CASE ELSE: nic = 1 END SELECT xa = a: a = a + (ra - a) / 10 IF speed < 0 THEN speed = 0: nic = 1 IF speed > 1000 THEN speed = 1000: nic = 1 'akumulatorji IF TIMER >= x THEN x = TIMER + 1 batt = batt + (20 / fillup) * (x - TIMER) / 10 IF batt > 10 THEN batt = 10 IF y <> 128 + 28 AND y <> 200 AND y <> 208 AND y > 128 THEN y = 128 + 15 END IF 'delo IF y = 128 + 15 AND batt > works / 10 AND work < 44100 THEN work = work + works ^ 3 batt = batt - works / 2 IF work > 44100 THEN work = 44100 END IF 'laserji lasercontrol = control IF lasercontrol > 45 THEN lasercontrol = 45: laserplus = 45 - control ELSE laserplus = 0 IF y = 128 + 28 AND batt >= lasers AND INT(RND * (46 - lasercontrol)) = 0 THEN batt = batt - lasers FOR v = 0 TO 7 IF POINT(5 + INT(a), v + INT(b)) <> 0 THEN EXIT FOR NEXT v vn = (lasers ^ 3) / 10 - laserplus FOR n = v + INT(b) - 1 TO 3 STEP -1 IF POINT(5 + INT(a), n) = 0 THEN PSET (5 + INT(a), n), 15 ELSE IF vn > 0 THEN vn = vn - 1 PSET (5 + INT(a), n), 15 ELSE EXIT FOR END IF END IF NEXT n FOR m = v + INT(b) TO 3 STEP -1 IF POINT(5 + INT(a), m) = 15 THEN PSET (5 + INT(a), m), 0 NEXT m END IF 'ladjica ustavi se IF a > 469 THEN a = 469 IF b > 469 THEN b = 469 IF a < 4 THEN a = 4 IF b < 4 THEN b = 4 'ladjica izbrisi se LINE (xa - 1, xb - 1)-(xa + 11, xb + 8), 0, BF IF nic = 0 THEN IF batt > move / 10 AND INT(RND * (26 - control)) <= 0 THEN batt = batt - move / 10 ELSE ra = xa: rb = xb speed = xspeed END IF END IF 'ladjica narisi se FOR c = 0 TO 10 FOR d = 0 TO 7 PSET (c + INT(a), d + INT(b)), t(c + 1, d + 1, s) - 8 * (t(c + 1, d + 1, s) > 0) NEXT d, c 'stolpci battt = battt + (batt - battt) / 10 speedd = speedd + (speed - speedd) / 10 workk = workk + (work - workk) / 10 LINE (486, 7)-(494, 449 - battt * 44.1), 0, BF LINE (486, 449)-(494, 448 - battt * 44.1), 10, BF LINE (498, 7)-(506, 449 - speedd * .441), 0, BF LINE (498, 449)-(506, 448 - speedd * .441), 12, BF LINE (510, 7)-(518, 449 - workk / 100), 0, BF LINE (510, 449)-(518, 448 - workk / 100), 5, BF LINE (509, 6)-(519, 450), 8, B LINE (497, 6)-(507, 450), 8, B LINE (485, 6)-(495, 450), 8, B LOOP UNTIL INKEY$ = " " CLS END SUB SUB Load (s, fina$) DIM e AS STRING * 1 IF fina$ = "" THEN INPUT "Ship name(max. 8 letters):", n$ ELSE n$ = fina$ IF LEN(n$) < 1 THEN FOR a = 0 TO 10 FOR b = 0 TO 7 t(a + 1, b + 1, s) = 0 NEXT b, a t(6, 5, s) = 7 ELSE OPEN "c:\jure\q\shp\" + n$ + ".shp" FOR RANDOM AS #1 LEN = 1 FOR a = 0 TO 10 FOR b = 0 TO 7 GET #1, , e: t(a + 1, b + 1, s) = ASC(e) NEXT b, a CLOSE #1 END IF END SUB SUB modul (xa, xb, t) n = r * 1.4 m = r * 1.4 s = r / 5 a = xa * n * 2 - n b = xb * m * 2 - m IF t <> 0 THEN LINE (a - n, b - s)-(a + n, b + s), t + 8, BF LINE (a - s, b - m)-(a + s, b + m), t + 8, BF LINE (a - n, b - s)-(a + n, b - s), 7 LINE (a - s, b - m)-(a - s, b + m), 7 LINE (a - n, b + s)-(a + n, b + s), 7 LINE (a + s, b - m)-(a + s, b + m), 7 FOR x = 0 TO r CIRCLE (a, b), x, t + 8 CIRCLE (a + 1, b), x, t + 8 NEXT x CIRCLE (a, b), r, t CIRCLE (a + 1, b), r, t ELSE LINE (a - n, b - s)-(a + n, b + s), 0, BF LINE (a - s, b - m)-(a + s, b + m), 0, BF LINE (a - n, b - s)-(a + n, b - s), 0 LINE (a - s, b - m)-(a - s, b + m), 0 LINE (a - n, b + s)-(a + n, b + s), 0 LINE (a + s, b - m)-(a + s, b + m), 0 FOR x = 0 TO r CIRCLE (a, b), x, 0 CIRCLE (a + 1, b), x, 0 NEXT x END IF END SUB SUB Preview (s, u) CLS LOCATE 3, 1 er = "": nmc = 0: cc = 0 power = 0: move = 0: works = 0: lasers = 0 control = 0: storage = 0 FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 1 THEN cc = cc + 2 NEXT b, a FOR a = 0 TO 10 FOR b = 0 TO 7 IF t(a + 1, b + 1, s) = 3 THEN IF cc > 0 THEN cc = cc - 1: control = control + 6 ELSE nmc = nmc + 1 END IF NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 2 + .5)) + " more crew pods.": nmc = 0 IF cc > 0 THEN control = control + cc FOR a = 0 TO 10 FOR b = 0 TO 7 SELECT CASE t(a + 1, b + 1, s) CASE 2: IF control > 0 THEN control = control - 1: power = power + 2 ELSE nmc = nmc + 1 CASE 4: IF control > 0 THEN control = control - 1: move = move + 1 ELSE nmc = nmc + 1 CASE 5: IF control > 0 THEN control = control - 1: works = works + 1 ELSE nmc = nmc + 1 CASE 6: IF control > 0 THEN control = control - 1: lasers = lasers + 1 ELSE nmc = nmc + 1 CASE 7: storage = storage + 1 END SELECT NEXT b, a IF nmc > 0 THEN er = "Need" + STR$(INT(nmc / 6 + .5)) + " more computer units.": nmc = 0 PRINT er PRINT "Reactor output:"; power; "KN" PRINT "ACCU storage space:"; INT(storage * 5); "BATT" PRINT "Engine power:"; move ^ 3; "KN" lasercontrol = control IF lasercontrol > 45 THEN lasercontrol = 45: laserplus = 45 + control ELSE laserplus = 0 PRINT "Laser power:"; lasers ^ 3 + laserplus; "KN" PRINT "Work stations abilities:"; works ^ 3; "Particles/use" PRINT "Main ship controlers:"; control IF power > 0 THEN fillup = INT(storage / power * 50) / 5 'power, lasers, works, control, move, storage rr = r: r = u FOR b = 0 TO 7 FOR a = 0 TO 10 modul a + 1, b + 1, t(a + 1, b + 1, s) NEXT a, b END SUB SUB Save (s) DIM e AS STRING * 1 INPUT "Ship name(max. 8 letters):", n$ OPEN "c:\jure\q\shp\" + n$ + ".shp" FOR RANDOM AS #1 LEN = 1 FOR a = 0 TO 10 FOR b = 0 TO 7 e = CHR$(t(a + 1, b + 1, s)): PUT #1, , e NEXT b, a CLOSE #1 END SUB