170 instructions
180 variables
190 screens
200 game
210 DEFine PROCedure instructions
220 PAPER 0:MODE 8
230 WINDOW 512,256,0,0:CLS:CSIZE 3,1
240 AT 2,9:PRINT "European War":CSIZE 2,0
250 PRINT \\"The object of the game is to take over all of the countries in Europe."
252 PRINT \\"Each country has a letter code as shown on the map."
254 PRINT \\"Apart from each player, the computer will also take one country."
260 END DEFine 
270 DEFine PROCedure variables
280 DIM troops(20),country$(20,15),who(20),route$(20,20),map_p(20),x_p(240),y_p(240)
282 RESTORE 282:p=0
284 FOR c=1 TO 20
286 READ route$(c),country$(c),x_p(p),y_p(p),x_p(p+1),y_p(p+1)
288 p=p+2:map_p(c)=p:troops(c)=RND(999)
290 FOR area=0 TO c=2
292 READ x_p(p)
296 FOR r=p+1 TO p+x_p(p):READ x_p(r),y_p(r)
298 p=r+1
300 END FOR area
305 END FOR c
310 player=0:key$="ABCDEFGHIJKLNPRSTUWY"
320 number_of_players
330 END DEFine 
340 DEFine PROCedure status
350 CLS #4
360 FOR c=1 TO 20:stats c
370 END DEFine 
380 DEFine FuNction count(n)
390 LOCal total
400 total=0
410 FOR c=1 TO 20:IF yours(c,n) THEN add total,1
420 RETurn total
430 END DEFine 
460 DEFine PROCedure add(var,amount):var=var+amount:END DEFine 
490 DEFine FuNction mine(a$)
500 LOCal temp
505 PRINT #0,a$;
510 REPeat in:temp=where:IF yours(temp,player) THEN EXIT in:ELSE BEEP 999,99
515 PRINT #0,!country$(temp):RETurn temp
520 END DEFine 
570 DEFine FuNction theirs(a$)
575 LOCal temp
577 PRINT #0,a$;
580 REPeat in:temp=where:IF yours(temp,player) THEN BEEP 999,99:ELSE EXIT in
585 PRINT #0,!country$(temp):RETurn temp
590 END DEFine 
650 DEFine PROCedure number_of_players
660 PRINT #0,"       PRESS ANY KEY TO CONTINUE":PAUSE
670 CLS
680 FOR c=1 TO 20:display c
690 PRINT #0,"Press a letter for each new player or 'ESC' after the last one"
700 players=0
710 REPeat loop
720 a$=INKEY$(-1)
730 IF a$=CHR$(27) OR players>=18 THEN EXIT loop
740 a=a$ INSTR key$:IF a AND who(a)=0 THEN BEEP 999,5:add players,1:who(a)=players:display a:ELSE BEEP 999,250
750 END REPeat loop
760 r=18
780 REPeat comp:IF who(r)=0 THEN who(r)=players+1:display r:EXIT comp:ELSE r=RND(20)
810 END DEFine 
820 DEFine PROCedure game
830 REPeat forever:CLS #0:tern
840 END DEFine 
880 DEFine PROCedure tern
890 chosen=0
900 add player,1:IF player>players+1 THEN player=1
910 PRINT #0,\\'Player no'!player
920 cnt=count(player)
930 IF cnt=0 THEN PRINT #0,"Wiped out":RETurn 
940 IF cnt=20 THEN PRINT #0,'GAME OVER':RECOL 7,6,5,4,3,2,1,0:STOP
950 more_troops
960 IF player>players THEN computer:RETurn 
990 REPeat place
1000 PRINT #0,'You have'!extra!'more troops to place'
1010 IF single THEN EXIT place
1020 land=mine("Place in")
1030 INPUT #0,'Number of troops'!no$:CLS #0
1040 no="0"&no$
1050 IF no<=extra THEN add troops(land),no:stats land:add extra,-no
1060 IF extra=0 THEN EXIT place
1070 END REPeat place
1080 action
1090 END DEFine 
1150 DEFine FuNction yours(c,y):RETurn who(c)=y:END DEFine 
1180 DEFine PROCedure screens
1190 PAPER 0
1200 OPEN #3,scr_448x10a32x6:OPEN #4,scr_90x200a420x16:INK #4,7
1210 FOR ch=0 TO 4:CLS #ch
1220 WINDOW 420,200,0,16
1230 europe:status
1240 END DEFine 
1260 DEFine FuNction where
1270 REPeat trap:k=INKEY$(-1) INSTR key$:IF k THEN RETurn k
1280 END DEFine 
1340 DEFine FuNction connected(a,b)
1350 IF route$(a,b)>0 THEN RETurn 1
1360 PRINT #0,"These countries are not connected":BEEP 9999,99:RETurn 0
1370 END DEFine 
1400 DEFine FuNction num$(n):RETurn FILL$(" ",5-LEN(n))&n:END DEFine 
1430 DEFine PROCedure display(place)
1440 AT place,15:PAPER who(place):PRINT key$(place)!country$(place)
1450 END DEFine 
1480 DEFine PROCedure action
1490 BEEP 999,5:IF player>players THEN RETurn 
1500 REPeat act
1510 PRINT #3,"F1-Quit  F2-Attack  F3-Fight  F4-Move"
1520 k=CODE(INKEY$(-1)):BEEP 99,8:CLS #3
1530 SELect ON k
1540 =232:EXIT act
1550 =236:attack
1560 =240:fight
1570 =244:transfer
1580 END SELect 
1590 END REPeat act
1600 END DEFine 
1630 DEFine PROCedure attack
1640 CLS #0:PRINT #0
1650 deff=theirs("Attacking"):att=mine("   From")
1660 chosen=1:fight
1670 END DEFine 
1730 DEFine PROCedure fight
1740 IF NOT chosen THEN PRINT #0,\\"No countries selected"\\"Press F2 to start attack":BEEP 999,250:RETurn 
1750 IF NOT connected(att,deff) THEN RETurn 
1760 FOR kill=1 TO RND(20 TO 50)
1770 IF RND(2) THEN dead=att:ELSE dead=deff
1780 add troops(dead),-RND(9)-1:BEEP 99,99+dead
1790 IF troops(dead)<1 THEN troops(dead)=0:captured:RETurn 
1800 stats dead
1810 END FOR kill
1820 AT #0,1,25:PRINT #0,num$(troops(deff)):AT #0,2,25:PRINT #0,num$(troops(att))
1830 END DEFine 
1840 DEFine PROCedure captured
1850 CLS #0:stats dead
1860 PRINT #0,country$(dead)!"has surrendered"
1870 chosen=0
1880 IF dead=att THEN live=deff:ELSE live=att
1890 who(dead)=who(live)
1900 PRINT #0,"Transferring to"!country$(dead)\"   From"!country$(live);
1910 IF player<players+1 THEN INPUT #0,!t$:t="0"&t$:ELSE t=troops(live) DIV 2
1920 add troops(dead),t:stats dead:chart dead:add troops(live),-t:stats live
1930 END DEFine 
1940 DEFine PROCedure transfer
1950 CLS #0:PRINT #0
1960 dest=mine("Transferring to"):from=mine("   From")
1970 IF NOT connected(from,dest) THEN RETurn 
1980 INPUT #0,"Number of troops"!no$:no="0"&no$:IF no>=troops(from) THEN RETurn 
1990 add troops(dest),no:stats dest:add troops(from),-no:stats from
2000 END DEFine 
2070 DEFine PROCedure stats(z)
2080 AT #4,z-1,0:colours who(z):PRINT #4,key$(z);num$(troops(z))
2090 END DEFine 
2120 DEFine FuNction single
2130 IF count(player)<>1 THEN RETurn 0
2140 FOR c=1 TO 20:IF yours(c,player) THEN EXIT c
2150 PRINT #0,"Placing in"!country$(c)\\
2160 add troops(c),extra:stats c:extra=0
2170 RETurn 1
2180 END DEFine 
2250 DEFine PROCedure chart(c)
2260 INK who(c):FILL 1:fil=1:map c
2270 INK 7:FILL 0:fil=0:map c
2280 OVER -1:PRINT key$(c):OVER 0
2290 END DEFine 
2350 DEFine PROCedure more_troops
2360 extra=RND(300*count(player))
2370 END DEFine 
2380 DEFine PROCedure computer
2390 PRINT #0,"You have"!extra!"troops to place"
2400 REPeat reinforce
2410 IF single THEN EXIT reinforce
2420 FOR c=1 TO 20
2430 IF yours(c,player) THEN 
2440 FOR n=1 TO 20
2450 IF extra<1 THEN EXIT reinforce
2460 IF route$(c,n) AND NOT yours(n,player) THEN 
2470 IF extra>100 THEN num=100:ELSE num=extra
2480 PRINT #0,num$(num)!"troops to"!country$(c)
2490 add extra,-num:add troops(c),num:stats c
2500 END IF 
2510 END FOR n
2520 END IF 
2530 END FOR c
2540 END REPeat reinforce
2550 FOR c=1 TO 20
2560 IF yours(c,player) THEN 
2570 FOR n=1 TO 20
2580 IF route$(c,n) THEN 
2590 REPeat invade
2600 IF yours(n,player) OR troops(c)<4*troops(n) OR troops(c)<200 THEN EXIT invade
2610 CLS #0:PRINT #0,\"Attacking"!country$(n)\"   From"!country$(c)
2620 att=c:deff=n:chosen=1:fight
2630 END REPeat invade
2640 END IF 
2650 END FOR n
2660 END IF 
2670 END FOR c
2680 END DEFine 
2750 DEFine PROCedure colours(q)
2760 PAPER #4,q
2770 SELect ON q
2780 =5,6,7,13,14,15:INK #4,0
2790 =REMAINDER :INK #4,7
2800 END SELect 
2810 END DEFine 
2820 DATA "20110001100000000011","AUSTRIA",14,49,0,4
2825 DATA 8,10,47,13,47,13,49,17,49,17,48,16,46,10,46,10,47
2830 DATA "02003300033030000000","BRITAIN",-2,54,0,3
2835 DATA 9,-6,50,-3,54,-5,55,-4,58,-2,58,-2,56,1,53,0,51,-6,50
2837 DATA 5,-10,51,-9,55,-6,55,-7,52,-10,51
2840 DATA "10210001000001000100","CZECHOSLAVAKIA",18,50,0,3
2845 DATA 8,13,49,12,50,15,51,22,49,22,48,17,48,17,49,13,49
2850 DATA "10120100011001000010","GERMANY",9,52,0,0
2855 DATA 14,7,47,8,49,6,50,6,51,7,54,10,57,11,55,14,54,15,51,12,50,13,49,13,47,10,47,7,47
2860 DATA "03002100300000000000","SPAIN",-5,42,0,4
2865 DATA 7,-9,37,-8,44,-2,44,3,43,-2,37,-6,36,-9,37
2870 DATA "03011200110000000010","FRANCE",2,48,0,0
2875 DATA 11,-2,44,-2,46,-5,49,2,50,6,50,8,49,7,47,6,46,8,44,3,43,-2,44
2880 DATA "00000020300100001001","GREECE",21,39,5,3
2885 DATA 8,20,40,23,41,26,42,25,41,22,40,24,38,22,35,20,40
2890 DATA "10100002000000100101","HUNGARY",18,48,4,4
2895 DATA 7,16,46,17,48,22,48,23,48,21,45,18,45,16,46
2900 DATA "10003130200000000011","ITALY",10,46,2,3
2905 DATA 11,8,44,6,46,10,46,13,46,14,45,12,44,18,40,15,37,15,40,10,44,8,44
2910 DATA "03010100021000000000","BELGIUM",4,52,0,3
2915 DATA 5,2,50,4,51,6,51,6,50,2,50
2920 DATA "03010000012030030000","HOLLAND",5,53,0,0
2925 DATA 5,4,51,5,53,7,54,6,51,4,51
2930 DATA "00000010000200101001","BULGARIA",24,44,0,2
2935 DATA 6,23,41,23,44,29,44,28,42,26,42,23,41
2940 DATA "03000000003020010000","NORWAY",8,62,0,0
2945 DATA 7,6,58,6,62,20,70,21,69,15,66,11,59,6,58
2950 DATA "00110000000002030100","POLAND",19,54,0,5
2955 DATA 7,15,51,14,54,20,55,23,55,24,50,22,49,15,51
2960 DATA "00000001000100203101","ROMANIA",25,47,0,2
2965 DATA 7,23,44,21,45,23,48,27,48,30,45,29,44,23,44
2970 DATA "00000000003013020100","SWEDEN",13,60,5,0
2975 DATA 8,11,59,15,66,21,69,24,66,17,61,16,56,13,55,11,59
2980 DATA "00000010000100302100","TURKEY",31,40,0,0
2985 DATA 8,25,41,26,42,28,42,42,42,45,37,36,36,27,37,25,41
2990 DATA "00100001000001111200","U.S.S.R",30,55,0,0
2995 DATA 23,42,42,37,44,34,44,31,45,30,45,27,48,23,48,22,48,22,49,24,50,23,55,20,55
2997 DATA 22,59,28,59,28,60,22,60,22,62,25,65,24,66,20,70,50,70,45,37,42,42
3000 DATA "10010100100000000020","SWITZERLAND",8,48,0,4
3005 DATA 5,6,46,7,47,10,47,10,46,6,46
3010 DATA "10000011100100100002","YUGOSLAVIA",19,45,0,4
3015 DATA 10,14,45,13,46,16,46,18,45,21,45,23,44,23,41,20,40,19,42,14,45
3020 DEFine PROCedure map(c)
3030 p=map_p(c)
3040 CURSOR x_p(p-2),y_p(p-2),x_p(p-1),y_p(p-1)
3050 FOR area=0 TO c=2
3060 FILL fil:LINE x_p(p+1),y_p(p+1)
3070 FOR i=p+2 TO p+x_p(p):LINE TO x_p(i),y_p(i)
3080 p=i+1
3090 END FOR area
3100 END DEFine 
3260 DEFine PROCedure europe
3270 SCALE 30,-10,35:PAPER 1,5:CLS
3280 INK 5:LINE -3,55 TO 6,59,1,53 TO 5,53,0,51 TO 3,51,0,51 TO 0,49,-6,50 TO -7,44
3290 LINE 0,40 TO 14,42,18,40 TO 21,38,29,45 TO 31,42,17,54 TO 16,56,6,58 TO 6,53
3300 ARC 6,53 TO 12,59,-1:LINE 35,40 TO 35,45,22,59 TO 17,61
3310 FOR c=2,5,6,10,11,4,19,9,1,3,14,8,20,7,15,12,17,13,16,18:chart c
3320 END DEFine 
