War in the East

Products: War in the East
Date: 1983
Type: Program
Platform(s): TS 2068
Tags: Game, Strategy

This is a two-player strategic wargame simulating Operation Barbarossa, the German invasion of the Soviet Union beginning in July 1941. The game loads a machine-code block from tape (168 bytes at address 65368) along with a pre-drawn map screen, then manages up to 19 German units and 30 Soviet units across a 30-turn campaign representing turns from summer 1941 through the winter. Unit types include Panzers (P), Guards (G), Infantry (I), Tanks (T), Rifles (R), Cavalry (C), and Bombers (B), each with different movement allowances that are reduced to 1 during winter turns 12–13. Terrain effects are encoded in the string array `a$` using special characters (`\q` for rivers, `\::` for impassable terrain), which penalize movement and modify combat ratios. Victory is determined by how many consecutive turns the German player controls the Moscow map square, tracked through variables `v1`, `v2`, and `v3`, with outcomes ranging from a decisive Soviet victory to a decisive German one.


Program Analysis

Program Structure

The program is organized into a series of functional blocks accessed via GO TO and GO SUB. The main game loop runs from line 19 to 1200, iterating over 30 turns using the variable t. Within each turn the sequence is: draw/update German units (lines 4090), handle German player input and movement (lines 100529), resolve German counter-attacks (lines 70007752), spawn new Soviet reinforcements (lines 10001120), move Soviet AI units (lines 20005220), resolve Soviet–German combat (lines 60006612), and finally check the Moscow control condition (lines 11201200).

Data Initialization and Tape Loading

Lines 810 load assets from tape: a 168-byte machine-code block at address 65368 (likely a custom character set or sound routine), followed by a predrawn map stored as a SCREEN$ save. Line 5 uses ON ERR GO TO 150 to trap tape-loading errors and fall through gracefully to the input routine, a common defensive technique. The RANDOMIZE at line 11 seeds the random number generator at the start of each game without a fixed value, ensuring varied play.

Unit Representation

German units are stored in parallel arrays: g(i) holds unit type, x(i) and y(i) hold screen coordinates for up to 19 units. Soviet units use r(j), c(j), and d(j) for up to 30 units. A separate occupancy array b(), indexed with a +2/+1 offset, tracks whether each map cell is empty (0), Soviet-occupied (1), or German-occupied (2). The character codes used to display each unit type are summarized below:

Display charGerman codeSoviet codeUnit type
Pg(i)=9Panzer
Gg(i)=6Guards
Ig(i)=1r(j)=4Infantry / Soviet Infantry
Tg(i)=3r(j)=8Tank
Rg(i)=2r(j)=1Rifle
Cr(j)=2Cavalry
Br(j)=3Bomber

Movement System

The German player selects a unit (cycling with key 9) and moves it with keys 5 (west), 6 (south), 7 (north), and 8 (east). Each unit has a movement allowance m stored at line 130: most units get 2 moves per turn, but Panzers (g(i)=9) and Tanks (g(i)=3) get 3. During winter turns 12–13, all movement is reduced to 1 regardless of type. Crossing river terrain (character \q) costs an extra movement point, implemented by incrementing n at lines such as 218 and 318. Impassable terrain (\::, representing mountains or dense forest) blocks movement entirely.

Terrain Encoding

The map string array a$, loaded from the predrawn SCREEN$, encodes terrain using specific characters. The subroutine at line 600 restores the terrain character under a German unit when it moves away, and simultaneously determines the INK color used to redraw it — white/plain for open ground, green for forest, blue for rivers, and so on. The Soviet equivalent is the subroutine at line 9000, which performs the same function for Soviet unit positions using c(j)/d(j).

Combat Resolution

Combat is resolved twice per turn: first in the German counter-attack phase (lines 70007752) where German units adjacent to Soviet units may attack, and then in the Soviet combat phase (lines 60006612) where Soviet units adjacent to Germans fight back. Both phases compute a ratio of attacker strength to defender strength, modify it for supply-line position (y(i)>q doubles the ratio favoring the attacker beyond the front), and add a 1d6 die roll. Winter (turns >13) gives Soviets a +1 bonus and Germans a –1 penalty. The possible outcomes by die roll are:

  1. roll > 10 — attacker eliminates defender, advances into square
  2. roll > 8 — both units degraded, defender retreats
  3. roll > 5 — defender retreats, attacker advances
  4. roll > 3 — attacker retreats (repulsed)
  5. roll > 1 — attacker retreats with possible encirclement check
  6. roll ≤ 1 — attacker eliminated

Encirclement is checked at several points: if a unit is surrounded on both its north/south or east/west sides by enemy units (checked in the b() array), it is destroyed outright regardless of the die roll.

Soviet AI

The Soviet AI in lines 21005220 is a simple pathfinding routine. For each Soviet unit, it compares its position (c(j), d(j)) to the nearest German unit (x(j), y(j)) and selects one of four movement subroutines at lines 4000, 4020, 4080, and 4100 based on relative position. Subroutine 5000 handles east–west movement; 5200 handles north–south. The variable z1 selects the direction of travel within each subroutine (0 = left/up, 1 = right/down), and z5 is set to 5 to signal a successful move, preventing further move attempts that turn.

Victory Condition

Moscow’s map square is hardcoded at board position (7,26) in the b() array. Lines 11201190 check each turn whether that cell or any adjacent cell contains a German unit. If so, v1 is set to 1 and v2 (consecutive turn counter) increments; if not, v2 resets. The high-water mark is stored in v3, which only ever increments by 1 per turn. Reaching v3>=4 triggers an immediate German decisive victory at line 9500. The end-screen at lines 95009560 reports the result in five levels and notably misspells “strategic” as “stratigic” in both the Soviet and German victory messages.

Notable Techniques and Anomalies

  • The b() occupancy array uses a fixed +2 row / +1 column offset throughout; this is an artifact of the array being 1-indexed while screen coordinates are 0-based, requiring careful manual adjustment in every access.
  • Line 2106 checks if any Soviet unit has reached column 8 or less (d(j)<8), which represents Soviet forces entering Germany from the east — the instant-loss condition for the German player.
  • The SOUND statement at lines 6117 and 7087 uses a multi-channel call (SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0) for a combat audio effect.
  • Line 1016 assigns both i=2 and k=4 for turn 21 but the variable i is also used as the German unit loop counter; this is safe only because the reinforcement block at 10701089 uses its own FOR i loop, shadowing the outer variable.
  • The save routine at lines 30003003 is triggered by key 1 only on turn >1 (line 161), and saves the BASIC program, the machine-code block, and the map screen to tape in sequence before stopping — a full mid-game save facility.
  • Line 9990 contains a bare INVERSE 1 with no following code or RETURN; it is never reached in normal play and appears to be a leftover fragment.
  • Line 2151 references g(j) (the German unit type array indexed by the Soviet loop counter j), which is almost certainly a bug — it should likely read g(i) or be removed, since the intent appears to be resetting a position variable for an empty slot.

Content

Appears On

Related Products

You command the German invasion of Russia to take Moscow. As commander of the German forces you must launch a...

Related Articles

Related Content

Image Gallery

Source Code

    1 REM War in the East - Invasion of Russia July 1941 \*1984 by Mark L Stueber  
    2 PRINT AT 10,8;"WAR IN THE EAST"
    3 PRINT AT 12,1;"INVASION OF RUSSIA JULY 1941"
    4 PRINT AT 14,5;"\*1984 by Mark L Stueber"
    5 ON ERR GO TO 150
    7 FLASH 1: INK 2: PRINT AT 2,7;"LEAVE TAPE RUNNING": FLASH 0
    8 LOAD "graphic" CODE 65368,168
    9 LET v1=0: LET v2=0: LET v3=0
   10 LOAD "map"SCREEN$ 
   11 RANDOMIZE 
   12 PAPER 6
   19 IF t>1 THEN GO TO 21
   20 FOR t=1 TO 30
   21 BORDER 0
   22 LET q=INT (t/2)+q1
   23 IF q>31 THEN LET q=31
   25 INVERSE 0: OVER 1: PRINT INK 1; FLASH 1;AT 21,q;" ": OVER 0: FLASH 0
   26 PRINT FLASH 0; INK 1; OVER 1;AT 21,q-1;" ": OVER 0
   27 IF t=12 THEN PRINT AT 0,4;"MT"
   28 IF t=14 THEN PRINT AT 0,4;"  "
   29 IF t=14 THEN OVER 1: INK 2: PRINT AT 0,4;"Winter": OVER 0
   30 IF t=1 THEN PRINT INVERSE 0; INK 2; OVER 1;AT 0,12;"MF=": OVER 0
   31 PRINT INK 0;AT 0,15;v3
   39 IF t>2 THEN GO TO 100
   40 FOR i=1 TO 19
   42 IF g(i)>0 THEN GO TO 46
   43 LET b(x(i)+2,y(i)+1)=0
   44 NEXT i: GO TO 70
   46 INVERSE 1: INK 0
   48 IF g(i)=9 THEN LET b$="P"
   50 IF g(i)=6 THEN LET b$="G"
   52 IF g(i)=1 THEN LET b$="I"
   54 IF g(i)=3 THEN LET b$="T"
   56 IF g(i)=2 THEN LET b$="R"
   60 PRINT AT x(i),y(i);b$
   62 LET b(x(i)+2,y(i)+1)=2
   64 NEXT i
   70 FOR h=1 TO 30
   72 INVERSE 1: INK 2
   74 IF r(h)>0 THEN GO TO 78: NEXT h: GO TO 100
   75 LET b(c(h)+2,d(h)+1)=0
   76 NEXT h: GO TO 100
   78 IF r(h)=8 THEN LET c$="T"
   80 IF r(h)=3 THEN LET c$="B"
   82 IF r(h)=1 THEN LET c$="R"
   84 IF r(h)=2 THEN LET c$="C"
   86 IF r(h)=4 THEN LET c$="I"
   88 PRINT AT c(h),d(h);c$
   89 LET b(c(h)+2,d(h)+1)=1
   90 NEXT h
  100 INK 0
  101 PRINT AT 0,0;t
  102 BORDER 0
  105 FOR i=1 TO 19
  110 IF g(i)>0 THEN GO TO 120
  115 NEXT i: GO TO 7000
  120 IF g(i)=9 THEN LET b$="P"
  125 IF g(i)=6 THEN LET b$="G"
  126 IF g(i)=3 THEN LET b$="T"
  127 IF g(i)=1 THEN LET b$="I"
  128 IF g(i)=2 THEN LET b$="R"
  130 LET m=2: IF g(i)=3 OR g(i)=9 THEN LET m=3
  131 IF t=12 OR t=13 THEN LET m=1
  132 FOR n=1 TO m
  133 LET b(x(i)+2,y(i)+1)=2
  134 IF b(x(i)+1,y(i))=1 OR b(x(i)+1,y(i)+1)=1 OR b(x(i)+3,y(i)+1)=1 OR b(x(i)+2,y(i))=1 OR b(x(i)+2,y(i)+2)=1 OR b(x(i)+1,y(i)+2)=1 OR b(x(i)+3,y(i)+2)=1 OR b(x(i)+3,y(i))=1 THEN NEXT i: GO TO 7000
  142 FOR j=1 TO 3
  144 GO SUB 600
  145 PAUSE 8
  146 INVERSE 1: PRINT INK 0;AT x(i),y(i);b$
  147 PAUSE 7
  148 NEXT j
  150 INPUT k
  160 IF k=4 THEN GO TO 142
  161 IF k=1 AND t>1 THEN GO TO 3000
  162 IF k=9 THEN NEXT i
  164 IF k=9 THEN GO TO 7000
  166 IF k=5 THEN GO TO 200
  167 IF k=6 THEN GO TO 300
  168 IF k=7 THEN GO TO 400
  169 IF k=8 THEN GO TO 500
  170 GO TO 150
  200 IF y(i)<=1 OR b(x(i)+2,y(i))>0 THEN GO TO 9900
  205 IF b(x(i)+2,y(i))<>0 THEN GO TO 9900
  206 IF t>13 THEN GO TO 212
  210 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+1,y(i))="\q" THEN GO TO 9900
  211 IF (m=2 AND n>1) AND a$(x(i)+1,y(i))="\q" THEN GO TO 9900
  212 IF a$(x(i)+1,y(i))="\::" THEN GO TO 9900
  215 GO SUB 600
  217 INVERSE 1: INK 0
  218 IF t<14 AND a$(x(i)+1,y(i))="\q" THEN LET n=n+1
  219 LET y(i)=y(i)-1
  220 PRINT AT x(i),y(i);b$
  221 BEEP .2,-7
  222 LET b(x(i)+2,y(i)+2)=0
  224 LET b(x(i)+2,y(i)+1)=2
  230 NEXT n: NEXT i: GO TO 7000
  300 IF x(i)>=21 OR b(x(i)+3,y(i)+1)>0 THEN GO TO 9900
  301 IF t>13 THEN GO TO 304
  302 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+2,y(i)+1)="\q" THEN GO TO 9900
  303 IF (m=2 AND n>1) AND a$(x(i)+2,y(i)+1)="\q" THEN GO TO 9900
  304 IF a$(x(i)+2,y(i)+1)="\::" THEN GO TO 9900
  305 IF b(x(i)+3,y(i)+1)<>0 THEN GO TO 9900
  308 GO SUB 600
  317 INVERSE 1: INK 0
  318 IF t<14 AND a$(x(i)+2,y(i)+1)="\q" THEN LET n=n+1
  319 LET x(i)=x(i)+1
  320 PRINT AT x(i),y(i);b$
  321 BEEP .2,-7
  322 LET b(x(i)+1,y(i)+1)=0
  324 LET b(x(i)+2,y(i)+1)=2
  329 NEXT n: NEXT i: GO TO 7000
  400 IF x(i)<=0 OR b(x(i)+1,y(i)+1)>0 THEN GO TO 9900
  401 IF t>13 THEN GO TO 404
  402 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i),y(i)+1)="\q" THEN GO TO 9900
  403 IF (m=2 AND n>1) AND a$(x(i),y(i)+1)="\q" THEN GO TO 9900
  404 IF a$(x(i),y(i)+1)="\::" THEN GO TO 9900
  405 IF b(x(i)+1,y(i)+1)<>0 THEN GO TO 9900
  408 GO SUB 600
  417 INVERSE 1: INK 0
  418 IF t<14 AND a$(x(i),y(i)+1)="\q" THEN LET n=n+1
  419 LET x(i)=x(i)-1
  420 PRINT AT x(i),y(i);b$
  421 BEEP .2,-7
  422 LET b(x(i)+3,y(i)+1)=0
  424 LET b(x(i)+2,y(i)+1)=2
  429 NEXT n: NEXT i: GO TO 7000
  500 IF y(i)>=31 OR b(x(i)+2,y(i)+2)>0 THEN GO TO 9900
  501 IF t>13 THEN GO TO 504
  502 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+1,y(i)+2)="\q" THEN GO TO 9900
  503 IF (m=2 AND n>1) AND a$(x(i)+1,y(i)+2)="\q" THEN GO TO 9900
  504 IF a$(x(i)+1,y(i)+2)="\::" THEN GO TO 9900
  505 IF b(x(i)+2,y(i)+2)<>0 THEN GO TO 9900
  508 GO SUB 600
  517 INVERSE 1: INK 0
  518 IF t<14 AND a$(x(i)+1,y(i)+2)="\q" THEN LET n=n+1
  519 LET y(i)=y(i)+1
  520 PRINT AT x(i),y(i);b$
  521 BEEP .2,-7
  522 LET b(x(i)+2,y(i))=0
  524 LET b(x(i)+2,y(i)+1)=2
  529 NEXT n: NEXT i: GO TO 7000
  600 INVERSE 0: INK 6
  609 IF a$(x(i)+1,y(i)+1)<>" " THEN INK 1
  610 IF a$(x(i)+1,y(i)+1)="\p" THEN INK 4
  611 IF a$(x(i)+1,y(i)+1)=" " THEN INK 6
  615 IF a$(x(i)+1,y(i)+1)="\q" THEN INK 1
  617 IF a$(x(i)+1,y(i)+1)="\r" THEN INK 3
  619 IF a$(x(i)+1,y(i)+1)="\s" THEN INK 0
  625 PRINT AT x(i),y(i);a$(x(i)+1,y(i)+1)
  630 RETURN 
 1000 LET m=0: LET h=0
 1001 BORDER 4
 1003 IF t=3 OR t=17 OR t=21 THEN LET h=2
 1006 IF (t=9 OR t=15) THEN LET m=1
 1009 IF m>0 OR h>0 THEN GO TO 1070
 1010 LET m=0: LET h=0: LET o=0: LET i=0: LET k=0
 1011 IF t=8 THEN LET o=2
 1014 IF t=5 OR t=9 THEN LET m=1
 1015 IF (t=5 OR t=9 OR t=13 OR t=15) THEN LET i=3
 1016 IF t=21 THEN LET i=2: LET k=4
 1017 IF (t=2 OR t=3 OR t=5 OR t=7 OR t=11 OR t=1 OR t=6 OR t=8) THEN LET h=2
 1018 IF m>0 OR i>0 OR h>0 OR k>0 OR i>0 THEN GO TO 1090
 1019 GO TO 1120
 1070 FOR i=1 TO 19
 1071 IF g(i)=9 THEN LET b$="P"
 1080 IF g(i)=6 THEN LET b$="G"
 1081 INVERSE 1: INK 0
 1082 IF g(i)>0 THEN NEXT i: GO TO 1010
 1084 IF h>0 THEN LET g(i)=6: LET x(i)=10: LET y(i)=4: LET h=h-1: PRINT AT x(i),y(i);"G": LET b(x(i)+2,y(i)+1)=2: NEXT i
 1086 IF m>0 THEN LET g(i)=9: LET x(i)=10: LET y(i)=4: LET m=m-1: PRINT AT x(i),y(i);"P": LET b(x(i)+2,y(i)+1)=2: NEXT i
 1089 GO TO 1010
 1090 FOR j=1 TO 30
 1101 INVERSE 1: INK 2
 1102 IF r(j)=0 THEN GO TO 1104
 1103 NEXT j: GO TO 1120
 1104 IF k>0 THEN LET r(j)=8: LET d(j)=29: LET c$="T": LET c(j)=INT (RND*15): LET k=k-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
 1108 IF i>0 THEN LET r(j)=4: LET d(j)=29: LET c(j)=INT (RND*5)+2: LET c$="I": LET i=i-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
 1109 IF o>0 THEN LET r(j)=3: LET d(j)=29: LET c(j)=INT (RND*5)+3: LET c$="B": LET o=o-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
 1110 IF h>0 THEN LET r(j)=1: LET d(j)=29: LET c$="R": IF x(j)=0 THEN LET x(j)=2: LET c(j)=x(j)-2: LET h=h-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
 1111 IF m>0 THEN LET r(j)=2: LET d(j)=29: LET c$="C": LET c(j)=INT (RND*17): LET m=m-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
 1120 IF b(7,26)=2 THEN LET v1=1: GO TO 1186
 1121 IF b(7,26)=0 AND ((b(6,26)=2 OR b(8,26)=2 OR b(7,25)=2 OR b(7,27)=2 OR b(6,25)=2 OR b(8,25)=2 OR b(6,27)=2 OR b(8,27)=2)) THEN LET v1=1
 1122 IF b(7,26)=0 AND ((b(6,26)=1 OR b(8,26)=1 OR b(7,25)=1 OR b(7,27)=1 OR b(6,25)=1 OR b(8,25)=1 OR b(6,27)=1 OR b(8,27)=1)) THEN LET v1=0
 1186 IF v1=1 THEN LET v2=v2+1
 1187 IF v1=0 THEN LET v2=0
 1188 IF v2>v3 THEN LET v3=v3+1
 1190 LET v1=0
 1195 IF v3>=4 THEN GO TO 9500
 1200 NEXT t: GO TO 9500
 2000 LET r2=20
 2001 BORDER 2
 2002 FOR j=1 TO 19
 2004 IF r(j)=0 THEN GO TO 2010
 2006 NEXT j: GO TO 2100
 2010 IF r(r2)>0 THEN GO TO 2020
 2012 IF r2>29 THEN GO TO 2100
 2014 LET r2=r2+1
 2017 GO TO 2010
 2020 LET r(j)=r(r2): LET c(j)=c(r2): LET d(j)=d(r2): LET r(r2)=0
 2022 NEXT j: GO TO 2100
 2100 FOR j=1 TO 30
 2102 LET n=0
 2104 IF r(j)=0 THEN NEXT j: GO TO 6000
 2106 IF d(j)<8 AND r(j)>0 THEN PRINT INVERSE 0; INK 2;"You lose- Russians entered Germany": STOP 
 2108 LET m=2: IF r(j)=3 OR r(j)=8 THEN LET m=3
 2110 IF r(j)=2 THEN LET m=1
 2150 LET z5=0
 2151 IF g(j)=0 THEN LET x(j)=10: LET y(j)=3
 2152 IF b(c(j)+2,d(j))=2 OR b(c(j)+2,d(j)+2)=2 OR b(c(j)+3,d(j)+1)=2 OR b(c(j)+3,d(j))=2 OR b(c(j)+3,d(j)+2)=2 OR b(c(j)+1,d(j)+1)=2 OR b(c(j)+1,d(j))=2 OR b(c(j)+1,d(j)+2)=2 THEN NEXT j: GO TO 6000
 2154 LET z1=0
 2155 IF r(j)=1 THEN LET c$="R"
 2156 IF r(j)=2 THEN LET c$="C"
 2159 IF r(j)=3 THEN LET c$="B"
 2160 IF r(j)=4 THEN LET c$="I"
 2162 IF r(j)=8 THEN LET c$="T"
 2165 IF x(j)>c(j)+4 THEN GO TO 4100
 2167 IF x(j)<c(j)-4 THEN GO TO 4020
 2169 IF y(j)<d(j)-4 THEN GO TO 4000
 2171 IF x(j)<c(j) THEN GO TO 4020
 2173 IF y(j)<d(j) THEN GO TO 4000
 2175 IF x(j)>c(j) THEN GO TO 4100
 2177 IF y(j)>d(j) THEN GO TO 4080
 2179 IF x(j)=c(j) AND y(j)=d(j) THEN GO TO 4080
 3000 SAVE "war" LINE 1
 3001 SAVE "graphic"CODE 65368,168
 3002 SAVE "map"SCREEN$ 
 3003 STOP 
 4000 LET z1=0: GO SUB 5000
 4012 IF z5=5 THEN GO TO 2150
 4013 LET z1=1: GO SUB 5200
 4014 IF z5=5 THEN GO TO 2150
 4015 LET z1=0: GO SUB 5200
 4017 LET z1=0
 4018 IF z5=5 THEN GO TO 2150
 4019 NEXT j: GO TO 6000
 4020 GO SUB 5200
 4021 IF z5=5 THEN GO TO 2150
 4022 LET z1=1
 4024 GO SUB 5000
 4026 LET z1=0
 4027 IF z5=5 THEN GO TO 2150
 4028 GO SUB 5000
 4029 GO TO 4018
 4080 LET z1=1: GO SUB 5000
 4081 LET z1=0
 4082 IF z5=5 THEN GO TO 2150
 4084 GO SUB 5200
 4086 IF z5=5 THEN GO TO 2150
 4088 LET z1=1: GO SUB 5200
 4089 GO TO 4017
 4100 LET z1=1: GO SUB 5200
 4102 LET z1=0
 4104 IF z5=5 THEN GO TO 2150
 4106 GO TO 4022
 5000 LET n=n+1
 5002 IF n>m THEN RETURN 
 5008 IF z1=0 AND b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN 
 5009 IF z1=1 AND b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN 
 5020 RETURN 
 5200 LET n=n+1
 5202 IF n>m THEN RETURN 
 5210 IF z1=0 AND b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: BEEP .1,0: LET c(j)=c(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN 
 5212 IF z1=1 AND b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET c(j)=c(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN 
 5220 RETURN 
 6000 FOR j=1 TO 30
 6001 BORDER 3
 6002 IF r(j)=0 THEN NEXT j: GO TO 1000
 6010 IF b(c(j)+2,d(j))=2 OR b(c(j)+3,d(j))=2 OR b(c(j)+1,d(j))=2 OR b(c(j)+3,d(j)+1)=2 OR b(c(j)+1,d(j)+1)=2 OR b(c(j)+3,d(j)+2)=2 OR b(c(j)+2,d(j)+2)=2 OR b(c(j)+1,d(j)+2)=2 THEN GO TO 6020
 6015 NEXT j: GO TO 1000
 6020 FOR i=1 TO 19
 6021 IF g(i)=0 THEN NEXT i: NEXT j: GO TO 1000
 6025 IF (c(j)=x(i) AND d(j)=y(i)-1) OR (c(j)=x(i) AND d(j)=y(i)+1) OR (c(j)=x(i)-1 AND d(j)=y(i)) OR (c(j)=x(i)+1 AND d(j)=y(i)) OR (c(j)=x(i)+1 AND d(j)=y(i)+1) OR (c(j)=x(i)-1 AND d(j)=y(i)-1) OR (c(j)=x(i)+1 AND d(j)=y(i)-1) OR (c(j)=x(i)-1 AND d(j)=y(i)+1) THEN GO TO 6100
 6090 NEXT i
 6091 IF b(c(j)+2,d(j)+2)=2 THEN LET b(c(j)+2,d(j)+2)=0
 6092 IF b(c(j)+2,d(j))=2 THEN LET b(c(j)+2,d(j))=0
 6093 IF b(c(j)+1,d(j))=2 THEN LET b(c(j)+1,d(j))=0
 6094 IF b(c(j)+3,d(j))=2 THEN LET b(c(j)+3,d(j))=0
 6095 IF b(c(j)+3,d(j)+1)=2 THEN LET b(c(j)+3,d(j)+1)=0
 6096 IF b(c(j)+1,d(j)+1)=2 THEN LET b(c(j)+1,d(j)+1)=0
 6097 IF b(c(j)+1,d(j)+2)=2 THEN LET b(c(j)+1,d(j)+2)=0
 6098 IF b(c(j)+3,d(j)+2)=2 THEN LET b(c(j)+3,d(j)+2)=0
 6099 NEXT j: GO TO 1000
 6100 LET ratio=r(j)/g(i)
 6101 IF g(i)=9 THEN LET b$="P"
 6102 IF r(j)=1 THEN LET c$="R"
 6103 IF r(j)=2 THEN LET c$="C"
 6104 IF r(j)=3 THEN LET c$="B"
 6105 IF r(j)=4 THEN LET c$="I"
 6106 IF g(i)=2 THEN LET b$="R"
 6107 IF g(i)=3 THEN LET b$="T"
 6108 IF g(i)=6 THEN LET b$="G"
 6109 IF g(i)=1 THEN LET b$="I"
 6110 IF t=12 OR t=13 THEN LET ratio=ratio*2
 6111 IF r(j)=8 THEN LET c$="T"
 6112 IF y(i)>q THEN LET ratio=ratio*2
 6114 IF ratio<.5 THEN NEXT j: GO TO 1000
 6116 LET roll=INT (RND*6)+1+ratio
 6117 SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0
 6118 IF t>13 THEN LET roll=roll+1
 6120 IF roll>10 THEN GO TO 6200
 6122 IF roll>8 THEN GO TO 6300
 6124 IF roll>5 THEN GO TO 6400
 6126 IF roll>3 THEN GO TO 6500
 6128 IF roll>1 THEN GO TO 6600
 6150 LET r(j)=0: LET b(x(i)+2,y(i)+1)=0: GO SUB 600
 6155 LET x(i)=c(j): LET y(i)=d(j)
 6160 LET b(x(i)+2,y(i)+1)=2
 6165 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
 6170 NEXT j: GO TO 1000
 6200 LET g(i)=0: GO SUB 9000
 6204 LET b(c(j)+2,d(j)+1)=0
 6208 LET c(j)=x(i): LET d(j)=y(i)
 6210 LET b(c(j)+2,d(j)+1)=1
 6214 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT j: GO TO 1000
 6300 IF g(i)<6 THEN LET g(i)=0
 6302 IF g(i)=6 THEN LET g(i)=1
 6303 IF g(i)=9 THEN LET g(i)=3
 6304 IF g(i)=1 THEN LET b$="I"
 6305 LET b(x(i)+2,y(i)+1)=0
 6306 GO SUB 600
 6307 IF g(i)=3 THEN LET b$="T"
 6310 IF r(j)<4 THEN LET r(j)=0
 6312 IF r(j)=4 THEN LET r(j)=1
 6314 IF r(j)=8 THEN LET r(j)=3
 6316 IF r(j)=3 THEN LET c$="B"
 6318 IF r(j)=1 THEN LET c$="R"
 6319 LET b(c(j)+2,d(j)+1)=0
 6320 GO SUB 9000
 6322 IF r(j)=0 AND g(i)=0 THEN NEXT j: GO TO 1000
 6350 IF g(i)>0 AND (b(x(i)+2,y(i)+2)=1 AND b(x(i)+2,y(i))=1) THEN LET g(i)=0: GO SUB 600
 6351 IF g(i)>0 AND (b(x(i)+1,y(i)+1)=1 AND b(x(i)+3,y(i)+1)=1) THEN LET g(i)=0: GO SUB 600
 6352 GO SUB 600: GO SUB 9000
 6355 LET b(x(i)+2,y(i)+1)=0: LET b(c(j)+2,d(j)+1)=0
 6358 IF r(j)>0 THEN LET b(x(i)+2,y(i)+1)=1: LET c(j)=x(i): LET d(j)=y(i)
 6360 IF r(j)>0 THEN PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
 6362 IF g(i)=0 THEN NEXT j: GO TO 1000
 6370 IF b(x(i)+2,y(i))=0 THEN LET b(x(i)+2,y(i))=2: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6371 IF b(x(i)+3,y(i))=0 THEN LET b(x(i)+3,y(i))=2: LET x(i)=x(i)+1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6372 IF b(x(i)+1,y(i))=0 THEN LET b(x(i)+1,y(i))=2: LET x(i)=x(i)-1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6373 IF b(x(i)+1,y(i)+1)=0 THEN LET b(x(i)+1,y(i)+1)=2: LET x(i)=x(i)-1: LET y(i)=y(i): PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6374 IF b(x(i)+3,y(i)+1)=0 THEN LET b(x(i)+3,y(i)+1)=2: LET x(i)=x(i)+1: LET y(i)=y(i): PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6375 IF b(x(i)+3,y(i)+2)=0 THEN LET b(x(i)+3,y(i)+2)=2: LET x(i)=x(i)+1: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6376 IF b(x(i)+1,y(i)+2)=0 THEN LET b(x(i)+1,y(i)+2)=2: LET x(i)=x(i)-1: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6377 IF b(x(i)+2,y(i)+2)=0 THEN LET b(x(i)+2,y(i)+2)=2: LET x(i)=x(i): LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
 6388 LET g(i)=0: NEXT j: GO TO 1000
 6400 GO TO 6350
 6452 GO SUB 600: GO SUB 9000
 6500 IF b(x(i)+2,y(i))=1 AND b(x(i)+2,y(i)+2)=1 THEN LET g(i)=0: GO SUB 600
 6502 IF b(x(i)+3,y(i)+1)=1 AND b(x(i)+1,y(i)+1)=1 THEN LET g(i)=0: GO SUB 600
 6503 GO SUB 600
 6504 LET b(c(j)+2,d(j)+1)=0: LET b(x(i)+2,y(i)+1)=0: GO SUB 9000
 6505 IF b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6507 IF b(c(j)+3,d(j)+2)=0 THEN LET b(c(j)+3,d(j)+2)=1: LET c(j)=c(j)+1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6508 IF b(c(j)+1,d(j)+2)=0 THEN LET b(c(j)+1,d(j)+2)=1: LET c(j)=c(j)-1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6509 IF b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: LET c(j)=c(j)+1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6510 IF b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET c(j)=c(j)-1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6511 IF b(c(j)+3,d(j))=0 THEN LET b(c(j)+3,d(j))=1: LET c(j)=c(j)+1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6512 IF b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: LET c(j)=c(j): LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6513 IF b(c(j)+1,d(j))=0 THEN LET b(c(j)+1,d(j))=1: LET c(j)=c(j)-1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
 6520 LET r(j)=0
 6550 IF roll<=3 THEN GO TO 6552
 6551 IF g(i)>0 THEN GO TO 6370
 6552 NEXT j: GO TO 1000
 6600 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0
 6603 IF b(c(j)+3,d(j)+1)=2 AND b(c(j)+1,d(j)+1)=2 THEN LET r(j)=0
 6604 GO SUB 9000: GO SUB 600: LET b(c(j)+2,d(j)+1)=2
 6605 LET b(x(i)+2,y(i)+1)=0: LET x(i)=c(j): LET y(i)=d(j)
 6610 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: IF r(j)>0 THEN GO TO 6505
 6612 NEXT j: GO TO 1000
 7000 BORDER 3
 7005 FOR i=1 TO 19
 7010 IF g(i)=0 THEN NEXT i: GO TO 2000
 7015 IF b(x(i)+2,y(i))=1 OR b(x(i)+2,y(i)+2)=1 OR b(x(i)+1,y(i))=1 OR b(x(i)+1,y(i)+1)=1 OR b(x(i)+1,y(i)+2)=1 OR b(x(i)+3,y(i)+1)=1 OR b(x(i)+3,y(i)+2)=1 OR b(x(i)+3,y(i))=1 THEN GO TO 7020
 7017 NEXT i: GO TO 2000
 7020 FOR j=1 TO 30
 7025 IF r(j)=0 THEN NEXT j: NEXT i: GO TO 2000
 7030 IF (x(i)=c(j) AND y(i)=d(j)+1) OR (x(i)=c(j) AND y(i)=d(j)-1) OR (x(i)=c(j)+1 AND y(i)=d(j)) OR (x(i)=c(j)-1 AND y(i)=d(j)) OR (x(i)=c(j)+1 AND y(i)=d(j)+1) OR (x(i)=c(j)-1 AND y(i)=d(j)-1) OR (x(i)=c(j)+1 AND y(i)=d(j)-1) OR (x(i)=c(j)-1 AND y(i)=d(j)+1) THEN GO TO 7040
 7031 NEXT j
 7032 IF b(x(i)+3,y(i)+2)=1 THEN LET b(x(i)+3,y(i)+2)=0
 7033 IF b(x(i)+1,y(i)+2)=1 THEN LET b(x(i)+1,y(i)+2)=0
 7034 IF b(x(i)+1,y(i)+1)=1 THEN LET b(x(i)+1,y(i)+1)=0
 7035 IF b(x(i)+3,y(i)+1)=1 THEN LET b(x(i)+3,y(i)+1)=0
 7036 IF b(x(i)+2,y(i)+2)=1 THEN LET b(x(i)+2,y(i)+2)=0
 7037 IF b(x(i)+3,y(i))=1 THEN LET b(x(i)+3,y(i))=0
 7038 IF b(x(i)+1,y(i))=1 THEN LET b(x(i)+1,y(i))=0
 7039 NEXT i: GO TO 2000
 7040 IF g(i)=9 THEN LET b$="P"
 7042 IF g(i)=6 THEN LET b$="G"
 7044 IF g(i)=1 THEN LET b$="I"
 7046 IF g(i)=2 THEN LET b$="R"
 7047 IF g(i)=3 THEN LET b$="T"
 7050 IF r(j)=1 THEN LET c$="R"
 7052 IF r(j)=2 THEN LET c$="C"
 7054 IF r(j)=3 THEN LET c$="B"
 7056 IF r(j)=4 THEN LET c$="I"
 7058 IF r(j)=8 THEN LET c$="T"
 7070 LET ratio=g(i)/r(j)
 7073 IF y(i)>q THEN LET ratio=ratio/2
 7075 IF t=12 OR t=13 THEN LET ratio=ratio/2
 7077 IF ratio<.5 THEN NEXT i: GO TO 2000
 7080 LET roll=(INT (RND*6)+1)+ratio
 7082 IF t>11 THEN LET roll=roll-1
 7085 IF t<14 AND a$(x(i)+1,y(i)+1)="\q" THEN LET roll=roll-1
 7086 FOR l=1 TO 2
 7087 SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0
 7088 PAUSE 7
 7089 NEXT l
 7090 IF roll>10 THEN GO TO 7300
 7092 IF roll>8 THEN GO TO 7400
 7094 IF roll>5 THEN GO TO 7500
 7096 IF roll>3 THEN GO TO 7600
 7098 IF roll>1 THEN GO TO 7700
 7099 LET g(i)=0: GO SUB 600
 7100 LET b(c(j)+2,d(j)+1)=0: LET b(x(i)+2,y(i)+1)=1: GO SUB 9000
 7110 LET c(j)=x(i): LET d(j)=y(i)
 7120 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
 7130 NEXT i: GO TO 2000
 7300 LET r(j)=0
 7305 LET b(x(i)+2,y(i)+1)=0
 7310 GO SUB 600: LET x(i)=c(j): LET y(i)=d(j)
 7384 LET b(x(i)+2,y(i)+1)=2
 7388 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
 7390 NEXT i: GO TO 2000
 7400 IF r(j)<4 THEN LET r(j)=0
 7402 IF r(j)=4 THEN LET r(j)=1
 7404 IF r(j)=8 THEN LET r(j)=3
 7405 IF g(i)<6 THEN LET g(i)=0
 7406 IF g(i)=9 THEN LET g(i)=3
 7408 IF g(i)=6 THEN LET g(i)=1
 7410 IF g(i)=3 THEN LET b$="T"
 7412 IF g(i)=1 THEN LET b$="I"
 7414 IF r(j)=1 THEN LET c$="R"
 7416 IF r(j)=3 THEN LET c$="B"
 7418 LET b(x(i)+2,y(i)+1)=0
 7420 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: GO SUB 9000
 7422 IF b(c(j)+2,d(j)+2)=2 AND b(c(j)+2,d(j))=2 THEN LET r(j)=0: GO SUB 9000
 7424 GO SUB 600: GO SUB 9000
 7425 LET b(c(j)+2,d(j)+1)=0
 7426 LET x(i)=c(j): LET y(i)=d(j): GO SUB 600
 7428 IF g(i)>0 THEN LET b(x(i)+2,y(i)+1)=2
 7430 IF g(i)>0 THEN PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
 7431 IF g(i)=0 AND r(j)=0 THEN GO SUB 9000
 7432 IF r(j)=0 THEN NEXT i: GO TO 2000
 7434 IF b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7436 IF b(c(j)+3,d(j)+2)=0 THEN LET b(c(j)+3,d(j)+2)=1: LET c(j)=c(j)+1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7438 IF b(c(j)+1,d(j)+2)=0 THEN LET b(c(j)+1,d(j)+2)=1: LET c(j)=c(j)-1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7439 IF b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET c(j)=c(j)-1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7440 IF b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: LET c(j)=c(j)+1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7442 IF b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: LET c(j)=c(j): LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7444 IF b(c(j)+3,d(j))=0 THEN LET b(c(j)+3,d(j))=1: LET c(j)=c(j)+1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7446 IF b(c(j)+1,d(j))=0 THEN LET b(c(j)+1,d(j))=1: LET c(j)=c(j)-1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
 7448 LET r(j)=0: NEXT i: GO TO 2000
 7500 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0: GO SUB 9000
 7502 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: GO SUB 9000
 7504 GO SUB 600: LET b(x(i)+2,y(i)+1)=0
 7506 LET x(i)=c(j): LET y(i)=d(j): LET b(x(i)+2,y(i)+1)=2
 7508 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
 7510 IF r(j)>0 THEN GO TO 7434
 7512 NEXT i: GO TO 2000
 7600 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
 7602 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
 7603 GO SUB 9000
 7604 LET b(c(j)+2,d(j)+1)=0
 7605 LET b(x(i)+2,y(i)+1)=0
 7610 IF b(x(i)+2,y(i))=0 THEN GO SUB 600: LET b(x(i)+2,y(i))=2: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7612 IF b(x(i)+3,y(i))=0 THEN GO SUB 600: LET b(x(i)+3,y(i))=2: LET x(i)=x(i)+1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7613 IF b(x(i)+1,y(i))=0 THEN GO SUB 600: LET b(x(i)+1,y(i))=2: LET x(i)=x(i)-1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7614 IF b(x(i)+1,y(i)+1)=0 THEN GO SUB 600: LET b(x(i)+1,y(i)+1)=2: LET x(i)=x(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7615 IF b(x(i)+3,y(i)+1)=0 THEN GO SUB 600: LET b(x(i)+3,y(i)+1)=2: LET x(i)=x(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7616 IF b(x(i)+3,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+3,y(i)+2)=2: LET y(i)=y(i)+1: LET x(i)=x(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7617 IF b(x(i)+1,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+1,y(i)+2)=2: LET y(i)=y(i)+1: LET x(i)=x(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7618 IF b(x(i)+2,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+2,y(i)+2)=2: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
 7620 LET g(i)=0
 7630 IF roll<=3 THEN GO TO 7750
 7632 IF r(j)>0 THEN GO TO 7434
 7634 NEXT i: GO TO 2000
 7700 IF b(x(i)+2,y(i))=1 AND b(x(i)+2,y(i)+2)=1 THEN LET g(i)=0
 7702 IF b(x(i)+1,y(i)+1)=1 AND b(x(i)+3,y(i)+1)=1 THEN LET g(i)=0
 7703 LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
 7704 LET c(j)=x(i): LET d(j)=y(i)
 7715 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
 7719 LET b(c(j)+2,d(j)+1)=1
 7720 IF g(i)>0 THEN GO TO 7610
 7725 NEXT i: GO TO 2000
 7750 LET b(c(j)+2,d(j)+1)=1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
 7752 NEXT i: GO TO 2000
 9000 INVERSE 0: INK 6
 9009 IF a$(c(j)+1,d(j)+1)<>" " THEN INK 1
 9010 IF a$(c(j)+1,d(j)+1)="\p" THEN INK 4
 9011 IF a$(c(j)+1,d(j)+1)=" " THEN INK 6
 9015 IF a$(c(j)+1,d(j)+1)="\q" THEN INK 1
 9017 IF a$(c(j)+1,d(j)+1)="\r" THEN INK 3
 9019 IF a$(c(j)+1,d(j)+1)="\s" THEN INK 0
 9025 PRINT AT c(j),d(j);a$(c(j)+1,d(j)+1)
 9030 RETURN 
 9500 INVERSE 0: INK 0: PAPER 7
 9505 PRINT AT 7,8;"GAME OVER"
 9510 IF v3=0 THEN PRINT AT 10,3;"Stratigic Russian Victory -  Moscow never fell"
 9520 IF v3=1 THEN PRINT AT 10,3;"Russian Marginal Victory  -  Moscow fell for only one consecutive turn"
 9530 IF v3=2 THEN PRINT AT 10,3;"German marginal victory - Moscow fell for 2 consecutive turns"
 9540 IF v3=3 THEN PRINT AT 10,0;"German stratigic Victory -    Moscow fell for 3 consecutive turns"
 9550 IF v3=4 THEN PRINT AT 10,0;"German decisive Victory - Moscow fell for 4 consecutive turns"
 9560 STOP 
 9900 INVERSE 0: INK 0
 9910 FOR k=1 TO 3
 9920 PRINT AT x(i),y(i);"X"
 9930 PAUSE 8
 9940 PRINT AT x(i),y(i);" "
 9950 PAUSE 8
 9960 NEXT k
 9970 PRINT AT x(i),y(i);b$
 9980 GO TO 142
 9990 INVERSE 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top