• Aucun résultat trouvé

The movement points are defined by MM in line 80

Dans le document SECOND BOOK OF (Page 50-56)

Movement across friendly territory takes one point; across neutral or hostile territory, two points. Increasing MM will give your armies greater mobility. The three variables KA, KB, and KC affect the outcome of individual battles. KA deter mines how many bots are vaporized, KB controls the number injured, and KC affects how many are dazed. If you make the fractions smaller (1/24, for example), the battles end more quickly. The subroutine starting at line 2600 resolves current

battles.

Hex War

For mistake-proof program entry, use "The Automatic Proofreader/' Appendix B, to type in this program.

MM 10 IF PEEK(46)<>64 THEN GRAPHIC1:GRAPHIC0:FAST:

FORJ=0TO15:COLOR4,J+1:K=J*128:FORL=KTOK+127:

BANK14:J1=PEEK(53248+L):BANK0:POKE12288+L,Jl :NEXTL#J

FB 20 BANK15:POKE217,4:POKE2604,28:SLOW PD 30 DIMJ,K,HT,HB,CT,CB,J1,J2,A,B,C#D,E

PK 40 DIM ARMY(31,6,1),BTL(64,1,3),MAP(9,9,2),FQ(2 BQ 50 CN=12:DIM CIT(CN,1)

BC 60 A=RND(-Tl/97):P0$="{BLU}{OFF}g2 P§{DOWN}

{2 LEFT}g6lB*l£":Pl$=ll{YEL} {RVS}£B*1 {OFF}

{DOWN}{2 LEFT}TPUR}g2 Yl"

EP 70 PN=1:ME=31

CE 80 MM=3: REM MAX MOVES JG 90 KA=l/48:KB=l/48:KC=l/32

BX 100 BANK15:POKE217,4:POKE2604,28 ,

SM 110 FORJ=1TO4:READA

LJ

FQ 120 FORK=ATOA+7:READB:POKEK,B:NEXTK,J RA 130 DATA 12936,240,240,63,15,3,3,3,3

AS 140 DATA 12984,15,15,252,240,192,192,192,192 \j

PP 150 DATA 12840,3,3,3,3,15,63,240,240

BJ 160 DATA 12944,192,192,192,192,240,252,15,15

RG 170 FORJ=0TO63:READK:POKE3584+J,K:NEXT i ^ CC 180 DATA0,255,0,15,195,240,63,0

KM 190 DATA252,48,0,12,48,0,12,48 AE 200 DATA0,12,48,0,12,48,0,12

GD 210 DATA48,0,12,48,0,12,48,0

[

42

JA 220 DATA12,48,0,12,48,0,12,48 EG 230 DATA0,12,48,0,12,48,0,12

^ KB 240 DATA48,0,12,48,0,12,63,0

I ' BK 250 DATA252,15,195,240,0,255,0,0

PQ 260 FORJ=1TOCN:FORK=0TO1:READ CIT(J,K):NEXTK:MA rmf P(CIT(J,0),CIT(J,1),2)=1:NEXTJ: REM T&B OF

1 | {SPACE}CITIES

ER 270 DATA 8,4,0,4,8,0,0,8,4,0,4,8 JQ 280 DATA 5,5,3,3,6,3,2,5,5,2,3,6

XK 300 GOSUB600:GOSUB3200:GOSUB600:REM GAME JS 310 CHAR1,6,11:PRINT"{BLU}{RVS}{2 SPACES }L|<M§

{2 SPACES}X.BY§{ 2 SPACES}MN{4 SPACES} gG§gM3 {2 SPACES }NM{ 2 SPACES }OMT"2 SPACES}11

EP 320 CHAR1,6,12:PRINT"{PUR}TRVS}{2 SPACES}gG|&M§

{2 SPACES}LBPit2 SPACES}NM{4 SPACES}NM {2 SPACES}OBM§{2 SPACES}fG§M{2 SPACEST {HOME} I RED} I OFF]11;

SM 330 PRINTSPC(10);"PLEASE WAIT A MOMENT"

FJ 340 GOSUB1500 ME 400 DO

GR 410 POKE208,0

QX 420 GOSUB1900:GOSUB600:GOSUB1710:REM FIND BATTL ES

QG 430 COLOR4,7-2*PN:GOSUB800:REM JOYSTICK

CG 440 FAST:COLOR4,9:GOSUB2100:REM BATTLES AGAIN JJ 450 COLOR4,3:GOSUB2600:REM RESOLVE

EB 460 COLOR4,1:GOSUB2100:REM POST-BATTLE AA 470 COLOR4,16:GOSUB2200:REM SPLIT PRISONERS JP 480 GOSUB 2900:REM REINFORCEMENTS

HB 490 SLOW:COLOR4,8:GOSUB3400 HS 500 PN=1-PN

DS 510 LOOP

JA 600 COLOR4,2:COLOR0,2:COLOR5,16:SCNCLR:PRINT:PR INT:SPRITE1,0

CB 610 FORJ=1TO5:PRINTSPC(13-2*J);:FORK=1TOJ+3:PRI NT MER{ 2 SPACES } " ; :NEXTK:PRINT "ER"

CS 620 PRINTSPC(12-2*J);:F0RK=lT0J+4:PRINT"W f1"]

{2 SPACES }QM ; :NEXTK:PRINT:NEXTJ

'- -'

QX 630 FORJ=1TO5:PRINTSPC(J*2) ; :FORK=1TO10-J:PRINT

11 R{2 SPACES }E" ; :NEXTK:PRINT

r^ SS 640 PRINTSPC(J*2+1);:FORK=1TO9-J:PRINTMQW / C

t2 SPACES}11; :NEXTK:PRINTMQWH

PX 650 NEXTJ

^ CD 660 C$=MUI{DOWN}{2 LEFT}JKM:D$=M{RVS}gV3gC§

f\

{D0mT{2 LEFTjgFliDa71"

MJ 670 COLOR5,3:FORJ=1TO12:GOSUB710:NEXT

HQ 680 J=1:COLOR5,7:IFGN=1THENC$=D$:GOSUB710:J=2:C OLOR5,5:GOSUB710

n

n

43

RB 690 IFGN=2THENC$=D$:GOSUB710:J=3:COLOR5,5:GOSUB 710

SH 700 PRINT"{HOME}"?:RETURN

KB 710 K=CIT(J,0):L=CIT(J,l):X=(K-L)*2+19:Y=(12-(K +L))*2+3:CHAR1,X,Y,C$:RETURN

FF 800 IFNX(PN)<2THENRETURN

AX 805 HT=4:HB=4:GOSUB1000:SPRITE1,1,1,0

KE 810 MV=0:CT=0:CB=0:PK=0:REM PICKED UP OR NOT HS 820 K=0:FORJ=1TONX(PN)-1:IF(ARMY(J,0,PN)>0)AND(

ARMY(J,6,PN)<1)THENK=1:J=NX(PN)-1 KX 830 NEXTJ:IFK=0 THEN RETURN

SB 840 GETG$:IFG$=CHR$(13)THENRETURN

HD 850 J=JOY(2):IFJ=0THEN840:ELSE IF(JAND128)THEN1 100:ELSE IF(JAND1)=0THEN840

KK 860 J=(J-1)/2:IFJAND1THENB1=HB+J-2:T1=HT:ELSET1

=HT+1-J:B1=HB

HD 870 IF (TK0)OR(T1>8)THEN840 FP 880 IF (BK0)OR(B1>8)THEN840

KC 890 S1=T1+B1:IF(SK4)OR(S1>12)THEN840

EM 900 HB=B1:HT=T1:GOSUB1000:WINDOW1,1,8,4,1:QN=MA

P(HT,HB,0):IFQN=0THENPRINT"{2 HOME}";:GOTO8 40:ELSE Q1=MAP(HT,HB,1)-1

JF 910 COLOR5,7-2*Q1:PRINTUSING"{RVS}##";QN;:PRINT

"******{OFF}E53";

RH 920 FORJ=0TO3:PRINTUSING"####"7ARMY(QN,J,Q1);:N DD 930 PRINT"{2 HOME}M;:GOTO840EXT

PA 1000 SX=172+16*(HT-HB):SY=264-16*(HT+HB) KC 1010 M0VSPR1 SX SY

SA 1020 IF MAP(HT,HB,2)=1THENSPRITE1,1,3,0:RETURN KP 1030 SPRITE1,1,1,0:RETURN

CX 1100 IFJOY(2)O0THEN1100

FE 1110 IFPK=1THEN1200:REM PICKEDUP, CHECK IF OK FD 1120 IF((MAP(HT,HB,1)<>PN+1)OR(MAP(HT,HB,0)=0))

THENGOTO810:REM NO ONE HOME

XE 1130 AN=MAP(HT,HB,0):IFARMY(AN,6 ,PN) O0THEN810 : REM ARMY AN IS ENGAGED

SD 1140 PK=1:CT=HT:CB=HB:CS=ARMY(AN,0,PN):REM T&B, CURRENT STRENGTH

DP 1150 SOUND1,5000,10 MK 1160 GOTO840

XP 1200 J=((HT=CT)AND(HB=CB)) AQ 1210 IFJAND(MV=0)THEN810 RE 1220 IFJAND(MV>0)THEN1420

MH 1230 AS=ARMY(MAP(HT,HB,0),0,PN):IF((AS>ME)AND(C S>ME))OR((MAP(HT,HB,1)-1=1-PN)AND(AS>0)) T HEN840

FB 1240 DT=ABS(CT-HT):DB=ABS(CB-HB):TL=DB+DT:IF NO T((TL=1)OR((CT+CB=HT+HB)AND(DT=1)))THEN840 44

i r

H H

FS 1250 MG=MAP(HT,HB,0): IF MG=0THEN1300

AE 1260 FORJ=0TO3:ARMY(MG,J,PN)=ARMY(MG,J,PN)+ARMY (AN,J,PN):ARMY(AN,J,PN)=0:NEXTJ

SM 1270 ARMY(MG,6,PN)=1:MAP(CT,CB,0)=0 AD 1280 CS=ARMY(MG,0,PN):AN=MG:MV=MM+l RH 1290 GOTO 1380

FF 1300 N8=MAP(HT,HB,1)-1:MV=MV+1:IF(N8<>PN)THENMV

=MV+1

DK 1310 MAP(CT,CB,0)=0

SA 1320 MAP(HT,HB,0)=AN:MAP(HT,HB,1) = PN+1:ARMY(AN, 4,PN)=HT:ARMY(AN,5,PN)=HB:IF MV>=MMTHEN AR

BR 1340 IF(J2<0)OR(J2>8)THEN1350:ELSE IF(MAP(HT,J2 ,0)>0)THENIF(MAP(HT,J2,1)=2-PN)THENK=1:J=1 :GOTO1360

KE 1350 IF(J3<0)OR(J3>8)OR(JK0)OR(J1>8)THEN1360:E LSE IF (MAP (J1,J3,0)>0) THENIF (MAP (J1,J3,1) = 2-PN)THENK=l:J=l

HK 1360 NEXTJ: REM ZOC

AS 1370 IFK=1THEN ARMY(AN,6,PN)=1:MV=MM+1 EG 1380 A=PN:J=CT:K=CB:C=0:D=0:GOSUB1830

EK 1530 REM STRENGTH, T-POS, B-POS

JD 1540 DATA 64,2,8,64,3,7,64,5,6,64,6,6:REM BLUE QP 1550 DATA 64,2,2,64,3,2,64,5,1,64,6,0:REM VIOLE

T

JK 1600 REM SET RANDOM REINFORCEMENTS AS 1610 FORJ=0TO1:FORK=0TO20

EH 1700 REM ARMIES->MAP SC 1710 FORJ=0TO8:FORK=0TO8

45

u

FX 1720 A=MAP(J,K,1):IFATHENA=A-1:GOSUB1800 HH 1730 NEXTK,J

PH 1740 FORA=0TO1:E=13+A*12:F=A*22:DX=2-4*A:D=0 PF 1750 FORJ=0TO8:C=FQ(J,A):GOSUB1840

HF 1760 E=E+DX*2:IFJ>3THENF=F+DX:E=E-DX XC 1770 NEXTJ,A

CA 1780 RETURN

QC 1800 B=MAP(J,K,0) PH 1810 C=ARMY(B,0,A) BK 1820 D=ARMY(B,6,A)

FJ 1830 E=(J-K+10)*2-1:F=(13-J-K)*2+1: REM T&B TO {SPACE1X/Y

SC 1840 CHAR1,E,F:IFATHENPRINTP1$:ELSEPRINTP0$

MH 1850 IFC=0THENRETURN

PP 1860 COLOR5,(7-2*A):CHAR1,E,F+A

HR 1870 PRINTCHR$(18);RIGHT$(HEX$(C),2);CHR$(146) RD 1880 IFDTHENF=F+1-A:G=1024+E+F*40:POKEG,43:POKE

G+1,43:REM ++

XK 1890 RETURN

GC 1900 SW=0:E=NX(PN)-1:1FE <1THENRETU RN

XJ 1910 FORJ=1TOE-1:IFARMY(J,0,PN)<1THENBEGIN SE 1920 T=ARMY(J,4,PN):B=ARMY(J,5,PN):IFMAP(T,B,0)

=JTHENMAP(T,B,0 )=0

BP 1930 FORK=JTOE:FORL=0TO6:ARMY(K#L,PN)=ARMY(K+1, L,PN):ARMY(K+1,L,PN)=0:NEXTL

JQ 1940 T=ARMY(K,4,PN):B=ARMY(K#5,PN):MAP(T,B,0)=K PH 1950 NEXTK

MA 1960 NX(PN)=NX(PN)-1:J=E:SW=1:BEND FJ 1970 NEXTJ:IF SW THEN1900

MG 2000 FORJ=1TOE:ARMY(J,0,PN)=ARMY(J,0,PN)+ARMY(J ,2#PN)

SD 2010 ARMY(J,2,PN)=ARMY(J,3,PN):ARMY(J,3#PN)=0 QS 2020 ARMY(J,6,PN)=0

PP 2030 NEXTJ:K=NX(1-PN):FOR J=1TOK:ARMY(J#6#1-PN)

=0:NEXT XF 2040 GOSUB2400

DS 2050 IFBP>0 THEN FORJ=0TO1:FORK=1TOBP:A=BTL(K#J ,0)2ARMY(A,6,J)=ARMY(A,6,J)+1:NEXTK,J CA 2060 RETURN

KG 2100 GOSUB2400

BX 2110 A=NX(0):IFNX(l)>ATHENA=NX(l)

EX 2120 FORJ=0TO1:FORK=1TOA:ARMY(K,6,J) = 0:NEXITK,J GP 2130 GOSUB2050

SH 2140 RETURN

PB 2200 FORJ=0TO1:A=1-J:B=NX(J)-1 DD 2210 FORK=1TOB

EM 2220 IF ARMY(K,0,J)<1 THEN BEGIN

Lj

46

JC 2230 PQ(2,A) = FQ(2,A)+ARMY(K,2,J)+ARMY(K,3,J) :IF

FQ(2,A)>255 THEN C=FQ( 2,A) -255 :FQ( 3,A)=FQ (3,A)+C:FQ(2,A)=255

JX 2240 FQ(6,A)=FQ(6,A)+ARMY(K,1,J):IF FQ(6,A)>255 THEN C=FQ(6,A)-255:FQ(7#A)=FQ(7,A)+C:FQ(6 ,A)=255

JQ 2250 IF (MAP(ARMY(K,4,J),ARMY(K,5,J),0)=K)AND(M AP(ARMY(K,4,J),ARMY(K,5,J),1)=J+1) THEN MA P(ARMY(K,4,J),ARMY(K,5,J),0)=0

RB 2260 FORL=0TO6:ARMY(K,L,J)=0:NEXTL BB 2270 BEND

FR 2280 IF ARMY(K,6,J)<1 THEN BEGIN:REM EVACUATE I NJURED

AE 2290 FQ(4,J)=FQ(4.J)+ARMY(K,1,J): ARMY(K,1,J)=0 DJ 2300 IF FQ(4,J)>255 THEN C=FQ(4,J)-255:FQ(5,J)=

FQ(5,J)+C:FQ(4,J)=255 KA 2310 BEND

XP 2320 NEXTK,J .-RETURN SJ 2400 BP=0

KG 2410 FORJ=0TO8:Jl=(J-4)*(4-J>0):J2=8-(J>4)*(4-J ):FORK=J1TOJ2

JE 2420 A=MAP(J,K,0) HQ 2430 R=MAP(J#K,1)

BG 2440 IF (A=0)OR(R=0) THEN2490 KQ 2450 IF ARMY(A,0,R-1)<1 THEN2490 DK 2460 T=J+1:B=K:GOSUB2500

HK 2470 B=B-1:GOSUB2500 BP 2480 T=T-1:GOSUB2500 RH 2490 NEXTK#J:RETURN

RR 2500 IF(T<0)OR(B<0)OR(T>8)OR(B>8)THEN RETURN MA 2510 PA=MAP(T,B,0):IF PA=0 THEN RETURN

FG 2520 IF MAP(T,B,1)=R THEN RETURN FX 2530 IF ARMY(PA,0,2-R)<1 THEN RETURN

MA 2540 BP=BP+1:BTL(BP,R-1,0)=A:BTL(BP,2-R#0)=PA:R

ETURN

CF 2600 IFBP=0THENRETURN FC 2610 FORJ=1TOBP

XM 2620 FORK=0TO1:A=1-K QX 2630 AN=BTL(J,K,0)

BF 2640 AS=ARMY(AN,0,K) :HT=ARMY(AN#6 ,K) :CT=INT(AS/

HT)+1

GH 2650 BTL(J,A,1)=INT(CT*KA+1) JC 2660 BTL(J,A,2)=INT(CT*KB+1) MB 2670 BTL(J,A,3)=INT(CT*KC+1) XC 2680 NEXTK,J

MD 2700 FORJ=1TOBP:J0=BTL(J#0#0):J1=BTL(J#1#0) BR 2710 GOSUB3100

CG 2720 ARMY(J0#0,0)=ARMY(J0,0,0)-A*BTL(J,0,1) SK 2730 ARMY(J1,0,1)=ARMY(J1,0,1)-B*BTL(J,1,1)

47

======= U

MS 2740 GOSUB3100

s—

BC 2750 OA*BTL(J,0,2):ARMY(J0,0,0)=ARMY(J0,0,0)-C

:ARMY(J0,1,0)=ARMY(J0,1,0)+C ,

FJ 2760 OB*BTL(J,1,2) :ARMY( Jl #0 ,1 )=ARMY( Jl ,0 ,1)-C i *■■

:ARMY(Jl#1,1)=ARMY(Jl,1,1)+C QD 2770 GOSUB3100

AX 2780 C=A*BTL(J,0,3):ARMY(J0,0,0)=ARMY(J0,0,0)-C

I I

:ARMY(J0,3,0)=ARMY(J0,3,0)+C ^

FF 2790 C=B*BTL(J,1,3):ARMY(Jl,0,1)=ARMY(J1,0,1)-C :ARMY(Jl,3,1)=ARMY(Jl,3,1)+C

XP 2800 NEXTJ CB 2810 RETURN GQ 2900 A=1-PN:B=0

GG 2910 FORJ=0TO8:FORK=0TO8

PA 2920 IFMAP(J,K,1)=PN+1THENB=B+1 KD 2930 NEXTK,J

JB 2950 FQ(1,PN)=FQ(1,PN)+B: IF FQ(1,PN)>255 THEN {SPACE}B=FQ(1,PN)-2 55:FQ(2,PN)=FQ(2,PN)+B:

FQ(1,PN)=255 GQ 2960 T=4:B=PN*8

SJ 2970 IF MAP(T,B,0)<>0 THEN RETURN

JK 2980 IF MAP(T,B,1)=PN+1 THEN FQ(0,A)=0:FQ(l,A)=

0:GOTO3060

XS 2990 J=NX(A):IFJ>31THENRETURN HR 3000 J1=FQ(0,A) :IF JK1 THEN3060 EP 3010 NX(A)=NX(A)+1

XE 3020 MAP(T,B,0)=J:MAP(T,B,1)=A+1 BK 3030 ARMY(J,0,A)=J1

QR 3040 FORK=1TO3:ARMY(J,K,A)=0:NEXTK PM 3050 ARMY(J,4,A)=T:ARMY(J#5,A) = B

KH 3060 FORK=0TO19:FQ(K,A)=FQ(K+1,A):NEXTK PK 3070 FQ(20#A)=0

BA 3080 RETURN

FS 3100 A=0:FORM=1TO6:IFRND(1)<.5THENA=A+1 AH 3110 NEXTM:B=6-A:RETURN

PS 3200 WINDOW6,7,33,16,1

EJ 3210 PRINT"E7H2 M§B2 L§{RVS}B2 KlBJ3BHiBGl SCE

Dans le document SECOND BOOK OF (Page 50-56)

Documents relatifs