-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+ X missel1strike(15, missel1.column, alien`5B3`5D.column); X alien`5B3`5D.tag := false; X END X ELSE X missel1missed(15, missel1.column); X lowest : IF alien`5B4`5D.tag then X BEGIN X missel1strike(20, missel1.column, alien`5B4`5D.column); X alien`5B4`5D.tag := false; X END X ELSE X missel1missed(20, missel1.column); X missed : missel1missed(missel1.course, missel1.column); X END; XEND; X XPROCEDURE move_missel2; XBEGIN X missel2.tag := false; X CASE missel2.strikingcourse of X highest : IF alien`5B5`5D.tag then X BEGIN X missel2strike(5, missel2.column, alien`5B5`5D.column); X alien`5B5`5D.tag := false; X END X ELSE X missel2missed(5, missel2.column); X high : IF alien`5B6`5D.tag then X BEGIN X missel2strike(10, missel2.column, alien`5B6`5D.column); X alien`5B6`5D.tag := false; X END X ELSE X missel2missed(10, missel2.column); X low : IF alien`5B7`5D.tag then X BEGIN X missel2strike(15, missel2.column, alien`5B7`5D.column); X alien`5B7`5D.tag := false; X END X ELSE X missel2missed(15, missel2.column); X lowest : IF alien`5B8`5D.tag then X BEGIN X missel2strike(20, missel2.column, alien`5B8`5D.column); X alien`5B8`5D.tag := false; X END X ELSE X missel2missed(20, missel2.column); X missed : missel2missed(missel2.course, missel2.column); X END; XEND; X XPROCEDURE firemissel1; XBEGIN X CASE gun1.row of X 0,1,2,3,4 : missel1.strikingcourse := missed; X 5 : missel1.strikingcourse := highest; X 6, 7, 8, 9 : missel1.strikingcourse := missed; X 10 : missel1.strikingcourse := high; X 11,12,13,14: missel1.strikingcourse := missed; X 15 : missel1.strikingcourse := low; X 16,17,18,19: missel1.strikingcourse := missed; X 20 : missel1.strikingcourse := lowest; X 21,22,23,24: missel1.strikingcourse := missed; X END; X missel1.column := 33; X missel1.tag := true; X missel1.course := gun1.row; X move_missel1; XEND; X XPROCEDURE firemissel2; XBEGIN X CASE gun2.row of X 0,1,2,3,4 : missel2.strikingcourse := missed; X 5 : missel2.strikingcourse := highest; X 6, 7, 8, 9 : missel2.strikingcourse := missed; X 10 : missel2.strikingcourse := high; X 11,12,13,14: missel2.strikingcourse := missed; X 15 : missel2.strikingcourse := low; X 16,17,18,19: missel2.strikingcourse := missed; X 20 : missel2.strikingcourse := lowest; X 21,22,23,24: missel2.strikingcourse := missed; X END; X missel2.tag := true; X missel2.column := 47; X missel2.course := gun2.row; X move_missel2; XEND; X XPROCEDURE defendcommand; XBEGIN X CASE ORD(QIO_1_char_now) of X 49 : CASE gun1.move of X up : gun1.move := down; X speedup : gun1.move := up; X thrustup : gun1.move := speedup; X down : gun1.move := speeddown; X speeddown : gun1.move := thrustdown; X thrustdown : gun1.move := thrustdown; X stop : gun1.move := down; X END; X 50 : gun1.move := stop; X 51 : CASE gun2.move of X up : gun2.move := down; X speedup : gun2.move := up; X thrustup : gun2.move := speedup; X down : gun2.move := speeddown; X speeddown : gun2.move := thrustdown; X thrustdown : gun2.move := thrustdown; X stop : gun2.move := down; X END; X 52 : firemissel1; X 54 : firemissel2; X 55 : CASE gun1.move of X up : gun1.move := speedup; X speedup : gun1.move := thrustup; X thrustup : gun1.move := thrustup; X down : gun1.move := up; X speeddown : gun1.move := down; X thrustdown : gun1.move := speeddown; X stop : gun1.move := up; X END; X 56 : gun2.move := stop; X 57 : CASE gun2.move of X up : gun2.move := speedup; X speedup : gun2.move := thrustup; X thrustup : gun2.move := thrustup; X down : gun2.move := up; X speeddown : gun2.move := down; X thrustdown : gun2.move := speeddown; X stop : gun2.move := up; X END; X 81, 113 : quit := true; X otherwise; X END; XEND; X XPROCEDURE defendmove; XVAR X i : 0..6; X X PROCEDURE movegun1up ( n : integer ); X VAR X i : integer; X BEGIN X FOR i := 1 to n do X BEGIN X IF gun1.row = 3 then X gun1.move := stop X ELSE X BEGIN X posn (34,gun1.row - 1); X QIO_write ('<*'); X posn (34,gun1.row); X QIO_write (' '); X gun1.row := gun1.row - 1; X END; X defendcommand; X END; X END; X X PROCEDURE movegun1down ( n : integer ); X VAR X i : integer; X BEGIN X FOR i := 1 to n do X BEGIN X IF gun1.row = 22 then X gun1.move := stop X ELSE X BEGIN X posn (34,gun1.row + 1); X QIO_write ('<*'); X posn (34,gun1.row); X QIO_write (' '); X gun1.row := gun1.row + 1; X END; X defendcommand; X END; X END; X X PROCEDURE movegun2up ( n : integer ); X VAR X i : integer; X BEGIN X FOR i := 1 to n do X BEGIN X IF gun2.row = 3 then X gun2.move := stop X ELSE X BEGIN X posn (45,gun2.row - 1); X QIO_write ('*>'); X posn (45,gun2.row); X QIO_write (' '); X gun2.row := gun2.row - 1; X END; X defendcommand; X END; X END; X X PROCEDURE movegun2down ( n : integer ); X VAR X i : integer; X BEGIN X FOR i := 1 to n do X BEGIN X IF gun2.row = 22 then X gun2.move := stop X ELSE X BEGIN X posn (45,gun2.row + 1); X QIO_write ('*>'); X posn (45,gun2.row); X QIO_write (' '); X gun2.row := gun2.row + 1; X END; X defendcommand; X END; X END; X XBEGIN X CASE gun1.move of X up : movegun1up (1); X speedup : movegun1up (2); X thrustup : movegun1up (3); X down : movegun1down (1); X speeddown : movegun1down (2); X thrustdown : movegun1down (3); X stop :; X END; X CASE gun2.move of X up : movegun2up (1); X speedup : movegun2up (2); X thrustup : movegun2up (3); X down : movegun2down (1); X speeddown : movegun2down (2); X thrustdown : movegun2down (3); X stop :; X END XEND; X XPROCEDURE baseexploded; XBEGIN X show_graphedt ('Destroyer.die',wait:=false); X lives := lives - 1; X IF lives = 2 then X qio_writeln (VT100_graphics_off+get_posn(1,1)+'Laser <* <* Sco Vre : '+dec(Score,,5)+' Energy : '+dec(Energy,,4)+' Laser *> * V> ') X ELSE X IF lives = 1 then X qio_writeln (VT100_graphics_off+get_posn(1,1)+'Laser <* Sco Vre : '+dec(Score,,5)+' Energy : '+dec(Energy,,4)+' Laser *> V '); X IF lives > 0 then X BEGIN X show_graphedt('Destroyer.scn',wait:=false); X aliennumber := 0; X missel1.tag := false; X missel2.tag := false; X alien := zero; X gun1.move := stop; X gun2.move := stop; X gun1.row := 12; X gun2.row := 12; X first := false; X QIO_Purge; X END XEND; X XPROCEDURE alien_move; XVAR X i : integer; X X PROCEDURE movealien(column1, column2 : maxcolumn; course : maxrow); X BEGIN X posn (column2,course); X QIO_write ('#'); X posn (column1,course); X QIO_write (' ') X END; X XBEGIN X FOR i := 1 to 4 do X IF alien`5Bi`5D.tag then X IF alien`5Bi`5D.column = 35 then X baseexploded X ELSE X BEGIN X movealien(alien`5Bi`5D.column, alien`5Bi`5D.column + 1, 5*i); X alien`5Bi`5D.column := alien`5Bi`5D.column + 1 X END; X X FOR i := 5 to 8 do X IF alien`5Bi`5D.tag then X IF alien`5Bi`5D.column = 46 then X baseexploded X ELSE X BEGIN X movealien(alien`5Bi`5D.column, alien`5Bi`5D.column - 1, 5*(i-4)); X alien`5Bi`5D.column := alien`5Bi`5D.column - 1 X END; XEND; X XPROCEDURE initialised; XBEGIN X Reset_screen; X quit := false; X show_graphedt('Destroyer.hlp'); X lives := 3; X energy := 1000; X score := 0; X aliennumber := 0; X missel1.tag := false; X missel2.tag := false; X alien := zero; X gun1.move := stop; X gun2.move := stop; X gun1.row := 12; X gun2.row := 12; X first := false XEND; X XBEGIN X initialised; X show_screen; X while (lives > 0) and not quit do X BEGIN X sleep_start (50); X defendcommand; X defendmove; X defendcommand; X alien_fire; X alien_move; X IF score > 5000 then X alien_move; X IF score > 12000 then X alien_move; X sleep_wait; X IF energy < 0 then X BEGIN X baseexploded; X lives := 0; X END X END; X top_ten(score); XEND. $ CALL UNPACK DESTROYER.PAS;1 370181695 $ create 'f' X`1B`5B2;1H`1B(B`1B`5B0m X`1B`5B2;1H`1B(0lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq Vqqqqqqqqqqqqqqqqqk X`1B`5B3;1Hx`1B`5B3;79Hx`1B`5B4;1Hx`1B`5B4;79Hx`1B`5B5;1Hx`1B`5B5;79Hx`1B`5B6 V;1Hx`1B`5B6;79Hx`1B`5B7;1Hx`1B`5B7;79Hx X`1B`5B8;1Hx`1B`5B8;79Hx`1B`5B9;1Hx`1B`5B9;79Hx`1B`5B10;1Hx`1B`5B10;79Hx`1B`5 VB11;1Hx`1B`5B11;79Hx`1B`5B12;1Hx`1B`5B12;79Hx X`1B`5B13;1Hx`1B`5B13;79Hx`1B`5B14;1Hx`1B`5B14;79Hx`1B`5B15;1Hx`1B`5B15;79Hx` V1B`5B16;1Hx`1B`5B16;79Hx`1B`5B17;1Hx`1B`5B17;79Hx X`1B`5B18;1Hx`1B`5B18;79Hx`1B`5B19;1Hx`1B`5B19;79Hx`1B`5B20;1Hx`1B`5B20;79Hx` V1B`5B21;1Hx`1B`5B21;79Hx`1B`5B22;1Hx`1B`5B22;79Hx X`1B`5B23;1Hmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq Vqqqqqqqqqqqqqj`1B`5B1;1H X`1B* X`1B`5B2;36Hwqqqqqqqw`1B`5B3;36Hx x`1B`5B4;36Hx x`1B`5B5;36Hx V x`1B`5B6;36Hx x X`1B`5B7;36Hx x`1B`5B8;36Hx x`1B`5B9;36Hx x`1B`5B10;36Hx V x`1B`5B11;36Hx x X`1B`5B12;36Hx x`1B`5B13;36Hx x`1B`5B14;36Hx x`1B`5B15;36Hx V x`1B`5B16;36Hx x X`1B`5B17;36Hx x`1B`5B18;36Hx x`1B`5B19;36Hx x`1B`5B20;36Hx V x`1B`5B21;36Hx x X`1B`5B22;36Hx x`1B`5B23;36Hvqqqqqqqv`1B`5B1;1H X`1B* X`1B`5B3;38Hn n n`1B`5B5;38Hn n n`1B`5B7;38Hn n n`1B`5B9;38Hn n n`1B`5B11;38H Vn n n`1B`5B13;38Hn n n`1B`5B15;38Hn n n X`1B`5B17;38Hn n n`1B`5B19;38Hn n n`1B`5B21;38Hn n n`1B* X`1B`5B2;38Hwqwqw`1B`5B4;38Hx x x`1B`5B6;38Hx x x`1B`5B8;38Hx x x`1B`5B10;38H Vx x x`1B`5B12;38Hx x x`1B`5B14;38Hx x x X`1B`5B16;38Hx x x`1B`5B18;38Hx x x`1B`5B20;38Hx x x`1B`5B22;38Hx x x`1B`5B23 V;38Hvqvqv`1B`5B1;1H X`1B* X`1B`5B3;36Htqnqnqnqu`1B`5B5;36Htqnqnqnqu`1B`5B7;36Htqnqnqnqu`1B`5B9;36Htqnqn Vqnqu`1B`5B11;36Htqnqnqnqu X`1B`5B13;36Htqnqnqnqu`1B`5B15;36Htqnqnqnqu`1B`5B17;36Htqnqnqnqu`1B`5B19;36Ht Vqnqnqnqu`1B`5B21;36Htqnqnqnqu X`1B* X`1B`5B1;1H X`1B`5B3;38H`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B5;38H `1B`5B0m Vq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B7;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m V `1B`5B9;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m`20 X`1B`5B11;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B13;38H `1B`5B0mq`1B`5 VB7m `1B`5B0mq`1B`5B7m `1B`5B15;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5 VB17;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m`20 X`1B`5B19;38H `1B`5B0mq`1B`5B7m `1B`5B0mq`1B`5B7m `1B`5B21;38H `1B`5B0mq`1B`5 VB7m `1B`5B0mq`1B`5B7m `1B* X`1B`5B4;36H`1B`5B0mt x x x u`1B`5B6;36Ht x x x u`1B`5B8;36Ht x x x u`1B`5B10 V;36Ht x x x u`1B`5B12;36Ht x x x u X`1B`5B14;36Ht x x x u`1B`5B16;36Ht x x x u`1B`5B18;36Ht x x x u`1B`5B20;36Ht V x x x u`1B`5B22;36Ht x x x u X`1B`5B1;1H X`1B* X`1B`5B1;7H `1B`5B1;72H `1B* X`1B`5B3;7H`1B(B<*`1B`5B3;72H*>`1B`5B12;36H`1B(0x x x x x`1B* X`1B`5B3;7H `1B(B<*`1B`5B3;71H*> `1B* X`1B`5B3;8H <*`1B`5B3;70H*> `1B* X`1B`5B3;9H <*`1B`5B3;69H*> `1B* X`1B`5B3;10H <*`1B`5B3;68H*> `1B* X`1B`5B3;11H <*`1B`5B3;67H*> `1B* X`1B`5B3;12H <*`1B`5B3;66H*> `1B* X`1B`5B3;13H <*`1B`5B3;65H*> `1B* X`1B`5B3;14H <*`1B`5B3;64H*> `1B* X`1B`5B3;15H <*`1B`5B3;63H*> `1B* X`1B`5B3;16H <*`1B`5B3;62H*> `1B* X`1B`5B3;17H <*`1B`5B3;61H*> `1B* X`1B`5B3;18H <*`1B`5B3;60H*> `1B* X`1B`5B3;19H <*`1B`5B3;59H*> `1B* X`1B`5B3;20H <*`1B`5B3;58H*> `1B* X`1B`5B3;21H <*`1B`5B3;57H*> `1B* X`1B`5B3;22H <*`1B`5B3;56H*> `1B* X`1B`5B3;23H <*`1B`5B3;55H*> `1B* X`1B`5B3;24H <*`1B`5B3;54H*> `1B* X`1B`5B3;25H <*`1B`5B3;53H*> `1B* X`1B`5B3;26H <*`1B`5B3;52H*> `1B* X`1B`5B3;27H <*`1B`5B3;51H*> `1B* X`1B`5B3;28H <*`1B`5B3;50H*> `1B* X`1B`5B3;29H <*`1B`5B3;49H*> `1B* X`1B`5B3;30H <*`1B`5B3;48H*> `1B* X`1B`5B3;31H <*`1B`5B3;47H*> `1B* X`1B`5B3;32H <*`1B`5B3;46H*> `1B* X`1B`5B3;33H <*`1B`5B3;45H*> `1B* X`1B* X`1B`5B3;34H `1B`5B3;45H `1B`5B4;34H<*`1B`5B4;45H*>`1B* X`1B`5B4;34H `1B`5B4;45H `1B`5B5;34H<*`1B`5B5;45H*>`1B* X`1B`5B5;34H `1B`5B5;45H `1B`5B6;34H<*`1B`5B6;45H*>`1B* X`1B`5B6;34H `1B`5B6;45H `1B`5B7;34H<*`1B`5B7;45H*>`1B* X`1B`5B7;34H `1B`5B7;45H `1B`5B8;34H<*`1B`5B8;45H*>`1B* X`1B`5B9;46H `1B* X`1B`5B8;34H `1B`5B8;45H `1B`5B9;34H<*`1B`5B9;45H*>`1B* X`1B`5B9;34H `1B`5B9;45H `1B`5B10;34H<*`1B`5B10;45H*>`1B* X`1B`5B10;34H `1B`5B10;45H `1B`5B11;34H<*`1B`5B11;45H*>`1B* X`1B`5B11;34H `1B`5B11;45H `1B`5B12;34H<*`1B`5B12;45H*>`1B* X`1B`5B12;34H `1B`5B12;45H `1B`5B13;34H<*`1B`5B13;45H*>`1B* X`1B`5B13;34H `1B`5B13;45H `1B`5B14;34H<*`1B`5B14;45H*>`1B* X`1B`5B14;34H `1B`5B14;45H `1B`5B15;34H<*`1B`5B15;45H*>`1B* X`1B`5B15;34H `1B`5B15;45H `1B`5B16;34H<*`1B`5B16;45H*>`1B* +-+-+-+-+-+-+-+- END OF PART 2 +-+-+-+-+-+-+-+-