-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X`09`09`09IF (Sector = 60 ) and ( field = 1 ) then`20 X`09`09`09 Write_Ch(1,1,bell); X`09`09`09Case Random( 1,2 ) of X`09`09`091: Begin X`09`09`09`09IF shot_row > Player_col then`20 X`09`09`09`09 shot_row := shot_row + left; X`09`09`09`09IF shot_row < Player_col then`20 X`09`09`09`09 shot_row := shot_row + Right; X X`09`09`09Fire_part_1; X X`09`09`09End; `7B 1 `7D X X`09`09`092: Begin X`09`09`09`09IF (screen`5Bdown_count + 1,shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count + 1,shot_row + left`5D = star) X`09`09`09`09 then shot_row := shot_row + 1; X X`09`09`09`09IF (screen`5Bdown_count + 1,shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count+ 1,shot_row + right`5D = star) X`09`09`09`09 then shot_row := shot_row - 1; X X`09`09`09`09IF (screen`5Bdown_count + 1,shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count+1,shot_row+left`5D =Blank) And X`09`09`09`09(screen`5Bdown_count +1,shot_row+ right`5D = Blank) X`09`09`09`09then X`09`09`09`09Begin X`09`09`09`09`09Case Random( 1,2 ) of X`09`09`09`09`09`091: shot_row := shot_row - 1; X`09`09`09`09`09`092: shot_row := shot_row + 1; X`09`09`09`09`09End; `7Bcase`7D X`09`09`09`09End; X X`09`09`09`09IF (screen`5Bdown_count+ 2, shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count + 2,shot_row + left`5D = star) X`09`09`09`09 then shot_row := shot_row + 1; X`09`09`09 X`09`09`09`09IF (screen`5Bdown_count + 2,shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count +2,shot_row + right`5D = star) X`09`09`09`09 then shot_row := shot_row - 1; X`09`09`09 X`09`09`09`09IF (screen`5Bdown_count +2, shot_row`5D = star) And X`09`09`09`09(screen`5Bdown_count+2,shot_row+left`5D =Blank) And X`09`09`09`09(screen`5Bdown_count+2,shot_row + right`5D = Blank) X`09`09`09`09 then X`09`09`09`09Begin X`09`09`09`09`09Case Random( 1,2 ) of X`09`09`09`09`09`091: shot_row := shot_row - 1; X`09`09`09`09`09`092: shot_row := shot_row + 1; X`09`09`09`09`09End; `7Bcase`7D X X`09`09`09`09End; X X`09`09`09`09Fire_part_1; X X`09`09`09`09End; `7B 2 `7D X`09`09`09End; `7Bcase`7D X X`09`09End; `7B 4 `7D X X`09`09end;`7Bcase`7D X X`09End; `7B if not dead `7D X XEnd; `7B fire_a_shot `7D X X XPROCEDURE move_greebie; X`7B work out the next position of the greebie `7D X XBegin X`09IF greebie_pos > Player_col then`20 X`09begin X`09`09greebie_pos := greebie_pos + left; X`09`09IF greebie_pos > Player_col then`20 X`09`09 greebie_pos := greebie_pos - ext_move; X`09end; X X`09IF greebie_pos < Player_col then`20 X`09begin X`09`09greebie_pos := greebie_pos + Right; X`09`09IF greebie_pos < Player_col then`20 X`09`09 greebie_pos := greebie_pos + ext_move; X`09end; X X`09IF (screen`5B4, greebie_pos`5D = star) AND X`09 (screen`5B4,greebie_pos + left`5D = star) then X`09 greebie_pos := greebie_pos + 1; X X`09IF (screen`5B4, greebie_pos`5D = star) AND X`09 (screen`5B4,greebie_pos + Right `5D = star) then X`09 greebie_pos := greebie_pos - 1; X X`09IF (screen`5B4, greebie_pos`5D = star) AND X`09 (screen`5B4,greebie_pos + Right `5D = Blank) AND X`09 (screen`5B4, greebie_pos + Left`5D = Blank) then X`09Begin X `09`09Case Random( 1, 2) of X`09`09`091: greebie_pos := greebie_pos + 1; X`09`09`092: greebie_pos := greebie_pos - 1; X`09`09end; X`09end; X X IF greebie_pos < min_left then X greebie_pos := min_left; X X`09IF greebie_pos > max_right then X`09 greebie_pos := max_right; X`09write_ch(3,greebie_pos,greebie); X`09 Xend; `7B move_greebie `7D X XPROCEDURE display_dead; X`7B a little bit of flashy graphics `7D XVar X`09i : integer; X Xbegin X`09write_st(Ansi_mode); X`09for i:=1 to 10 do X`09Begin X`09`09if odd(i) then X`09`09 Begin X`09`09`09 write_st(White_100); X`09`09 `09 Break; X`09`09 End X`09`09else X`09`09 Begin X`09`09`09 write_st(Black_100); X`09`09 `09 Break; X`09`09`09 writeln(bell); X`09`09 End; X`09end; XEnd;`7B display_dead `7D X XPROCEDURE set_up; X`7B initialisation of variables etc.. `7D XVar X`09t`09: Integer; X XBegin X X`09seed := clock; X X`09write_st(Ansi_mode); X`09write_st(clear_100); X`09write_st(scroll_region); X`09write_st(Jump_100); X X`09for t := 1 to 22 do`20 X`09begin X`09`09writev(char_string,Esc,'`5B',t:1,';',0:1,'H'); X`09`09write_st(Char_string); X`09`09write_st(large_100); X`09Break; X`09end; X X`09Back_Thrust := False; X`09dead := false; X`09greebie_dead := false; X`09shot_going := false; X X`09Score := 0; X X`09Player_Row := 12; X X`09ext_move := 0; X X`09Time_out := 30; X X`09test_num := 970; X X`09field := 0; X `09 X`09greebie_pos := Random (3,38); X X`09Player_col := centre; X X writev(char_string,esc,'`5B',24:1,';',12:1,'H','SECTOR : V FIELD : SCORE :'); X X write_st(char_string); X`09write_st(vt52); X X`09break; X XEnd; `7B set_up `7D X XPROCEDURE change_int( temp : integer); XVar X`09i`09: integer; XBegin X`09For i := 1 to 7 do ch`5Bi`5D := blank; X`09i := 0; X`09While temp > 0 Do X`09Begin X`09`09i := i + 1; X`09`09ch `5B i `5D := chr((temp mod 10 ) + ord('0')); X`09`09temp := temp div 10; X`09End; X XEnd; `7B change_int `7D X XPROCEDURE Check_Previous_Score; X`7B Check to see if player wants to start further ahead. `7D X XBegin X`09IF Last_Score > 2440 then X`09Begin X`09`09write_st(clear_100); X`09`09write_st(Home_100); X`09`09At(1,1); X`09`09write_st(large_100); X`09`09At(1,1); X`09`09write_st(' Hi there HOT SHOT !!!'); X`09`09write_st(line); X`09`09write_st(line); X`09`09write_st(' Do you want to Begin anew ,'); X`09`09write_st(line); X`09`09write_st(' OR continue from sector 30 ?'); X`09`09write_st(line); X`09`09write_st(line); X`09`09write_st(' Press "B" to start Anew OR any character to start a Vt Sector 30.'); X`09`09Break; X`09`09Case TT_1_Char of X`09`09`09'b','B': Sector := 0; X`09`09`09Otherwise Sector := 30; X`09`09End; `7B case `7D X`09End; X XEnd; `7B Check previous Score `7D X XPROCEDURE increment_Sector; X`7B add 1 to Sector if fields is = to 20 `7D X XBegin X X`09Sector := Sector + 1; X`09field := 0; X`09test_num:= test_num - 3; X`09if Sector > 10 then ext_move := 1; X XEnd; `7B increment_Sector `7D X XBegin `7B ...main... `7D X X`09Read_Help_File; X`09Read_Data_File; X`09Check_Previous_score; X`09set_up; X X`09repeat X`09`09IF field = 20 then X`09`09 time_out := Time_out - 1; X X`09`09If time_out < 1 then time_out := 1; X X`09`09Sleep_set( 21, Time_out); X X`09`09Sleep_Start; X X`09`09Field := Field + 1; X X`09`09if field = 1 then`20 X`09`09begin X`09`09`09change_int(sector); X`09`09`09At(24,21); X`09`09`09write_3(ch`5B3`5D,ch`5B2`5D,ch`5B1`5D); X`09`09End; X X`09`09change_int(field); X`09`09at(24,44); X`09`09write_3(ch`5B3`5D,ch`5B2`5D,ch`5B1`5D); X X`09`09calculate_score; X X`09`09change_int(score); X`09`09at(24,67); X`09`09write_6(Ch`5B6`5D, Ch`5B5`5D, Ch`5B4`5D, Ch`5B3`5D, Ch`5B2`5D, Ch`5B1` V5D); X X`09`09Break; X X`09`09new_star_line; X X`09`09Move_Player; X X`09`09move_greebie; X X`09`09Fire_a_shot; X X`09`09check_dead; X X`09`09if field = 20 then`20 X`09`09 increment_Sector; X X`09`09write_ch(24,78,blank); X X`09`09Break; X X`09`09Sleep_Wait; X X`09until dead; X X`09if dead then display_dead; X X`09top_ten( Score ); X X`091: `7B the end of program `7D Xend. `7B ...main... `7D $ CALL UNPACK ASTEROIDS.PAS;1 325034616 $ create 'f' X`1B`5BH`1B`5BJ`1B(B`1B`5B0m X`1B`5B1;6H`1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B` V5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m V `1B`5B7m `1B`5B0m`20 X`1B`5B1;58H `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B2;6H `1B`5B0m `1B` V5B7m `1B`5B0m `1B`5B7m `1B`5B2;24H `1B`5B0m `1B`5B7m `1B`5B0m ` V1B`5B7m `1B`5B0m`20 X`1B`5B2;40H `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m ` V1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B V3;5H `1B`5B0m `1B`5B7m `1B`5B0m`20 X`1B`5B3;12H `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1 VB`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1 VB`5B7m `1B`5B0m `1B`5B7m`20 X`1B`5B3;62H `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B4;5H `1B` V5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m V `1B`5B7m `20 X`1B`5B4;40H`1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5 VB0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5 VB7m `20 X`1B`5B5;5H `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m V `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m V `1B`5B7m `1B`5B0m`20 X`1B`5B5;53H `1B`5B7m `1B`5B0m `1B`5B7m `1B`5B0m `1B`5B7m `1B V`5B6;1H`1B`5B0m`1B(0lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq X`1B`5B6;42Hqqqqk lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk`1B`5B7;1Hx `1B`5B7mO`1B(Bb Vject`1B`5B0m :- To get through the star X`1B`5B7;38H field `1B(0x x `1B`5B7mC`1B(Bontrols`1B`5B0m :- <- `1B`5B7m1`1 VB`5B0m `1B`5B7m2`1B`5B0m `1B`5B7m3`1B`5B0m -> `1B(0x X`1B`5B8;1Hx `1B(Bwithout the greebie shooting you. Hitting `1B(0x x V `1B(Bv`1B`5B8;79H`1B(0x X`1B`5B9;1Hx `1B(Bthe greebie missiles or the asteroids will `1B(0x x `1B`5B9 V;79Hx`1B`5B10;1Hx `1B(Bzap you. Bewar X`1B`5B10;18He ! The Greebies missiles `1B(0x x `1B`5B7m 0 `1B`5B0m ` V1B(B= Back Thust. `1B(0x X`1B`5B11;1Hx `1B(Bget tougher the longer you play . `1B(0x x`1B`5B1 V1;79Hx`1B`5B12;1Hx`1B`5B12;46Hx x Q `1B(Bto X`1B`5B12;55H Quit or E to Exit. `1B(0x`1B`5B13;1Hx `1B`5B7mW`1B(Bho is w Vhat`1B`5B0m :-`1B`5B13;46H`1B(0x mqqqqqqqqqqqqqqqqq X`1B`5B13;66Hqqqqqqqqqqqqqj`1B`5B14;1Hx `1B(B# Greebie - A horrible chap t Vhat wants `1B(0x lqqqqqqqqqqqqqqqq X`1B`5B14;65Hqqqqqqqqqqqqqqk`1B`5B15;1Hx`1B`5B15;17H`1B(Bto shoot You.`1B`5B1 V5;46H`1B(0x x`1B(B* * * * * * * * `20 X`1B`5B15;76H *`1B(0x`1B`5B16;1Hx `1B(B! Missile - What he wants to shoo Vt you `1B(0x x `1B(B* * # * * `20 X`1B`5B16;69H * * `1B(0x`1B`5B17;1Hx`1B`5B17;17H`1B(Bwith.`1B`5B17;46H`1 VB(0x x `1B(B* * * * * * `1B(0x X`1B`5B18;1Hx V Y`1B(Bou - The one who is trying to `1B(0x x`1B(B* V * !* * * * * `1B(0x X`1B`5B19;1Hx`1B`5B19;17H`1B(Blive.`1B`5B19;46H`1B(0x x `1B(B* * * * V *** * `1B(0x`1B`5B20;1Hx `1B(B* Asteroid X`1B`5B20;14H - Innocent bystander who kills `1B(0x x`1B(B* * *`1B`5B20;65H V*`1B`5B20;76H* *`1B(0x X`1B`5B21;1Hx`1B`5B21;17H`1B(Bon contact.`1B`5B21;46H`1B(0x x `1B(B** V* V * * * * `1B(0x X`1B`5B22;1Hmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj mqqqqqqqqqqqqqqqqq Vqqqqqqqqqqqqqj X`1B`5B23;1H`1B`5B7mC`1B(Breated by Graham Joyce And Stefan Spadoni.`1B`5B23; V54H`1B`5B0mHit Any key To Play`20 X`1B* $ CALL UNPACK ASTEROIDS.SCN;1 1896969179 $ create 'f' X Subroutine `09Top_Ten(This_Score) X X Implicit none XC X Parameter`20 X . `09Esc = 27, X .`09max_keep = 31 ! Max num Scores held + 1 X `20 X Byte X .`09Temp(12), X . Username(12,max_keep), X .`09Name(12,max_keep), X . Month_Username(12,12), X .`09Month_Name(12,12) X X Integer*4 X . month_of_Year(12) X X Integer*2 X . Date_Time(7) X `20 X Integer X .`09This_Score, X . Prev_Score, X .`09Errnum, X . Month_now, X . Month_top, X .`09Year_now, X .`09num_games, X . month_Score(12), X . Games(max_keep), X .`09Score(max_keep), X . Me, X .`09I, X .`09J, X .`09K, X . M X X logical*1 X .`09sorted X X`09 X Byte X .`09This_User(12) X X Integer X . Len_user X X Integer*2`20 X .`09Jpi_rec_Word(8) X X integer*4`20 X .`09Jpi_rec_Long(4) X X Equivalence (Jpi_rec_Word,Jpi_rec_Long) X X Data month_of_year/ X .`09`09`09'Jan ', X .`09`09`09'Feb ', X .`09`09`09'Mar ', X .`09`09`09'Apr ', X .`09`09`09'May ', X .`09`09`09'Jun ', X .`09`09`09'Jul ', X .`09`09`09'Aug ', X .`09`09`09'Sep ', X .`09`09`09'Oct ', X .`09`09`09'Nov ', X .`09`09`09'Dec '/ X XC Begin X X Type 100,Esc,Esc,Esc,Esc X100 Format(X,A1,'<',A1,'`5B1;24r',A1,'`5BH',A1,'`5B2JPlease Wait ...') X Jpi_rec_Word(1) = 12 X Jpi_rec_Word(2) = '202'X X Jpi_rec_Long(2) = %loc(This_USer) X Jpi_rec_Long(3) = %loc(len_user) X Jpi_rec_Long(4) = 0 X Call sys$getjpi(%val(0),%val(0),%val(0), X .`09`09Jpi_rec_Long, X .`09`09%val(0),%val(0),%val(0)) X X Call sys$numTim(date_time,%val(0)) X Year_now = date_Time(1) X Month_now = date_Time(2) X X `20 X1 Open(unit=4,file='Image_dir:Asteroids.acn',form='UNFORMATTED', X .`09recordtype='FIXED',Status='OLD',Recl=1024,IoStat=ErrNum) X If (Errnum.eq.30) Goto 50 X If (Errnum.gt.1) Goto 999 X read(4) Num_games,month_top, X . `09`09month_username,month_name,Month_Score X read(4) username,name,score,games X num_games = num_games + 1 X If (Month_top.ne.month_now) Then ! Clear Month X If (month_top.ne.0) Then`20 X`09 Do J = 1,12`20 X`09 month_username(J,month_top) = Username(J,1) X`09 month_name(J,month_top) = name(J,1) X`09 enddo X`09 month_Score(month_top) = Score(1) X `09endif X`09Do I = 1,max_keep X`09 Do J = 1,12`20 X`09 username(J,I) = ' ' X`09 name(J,I) = ' ' X`09 enddo X`09 Score(i) = 0 X `09 games(i) = 0 X`09enddo X`09Month_top = Month_now X endif`09 `20 X I = 1 X J = 0 X Score(max_keep) = 0 X do while ((J.lt.12).and.(Score(I).ne.0)) X `09J = 1 X `09do While (( Username(J,I).eq.This_User(J)).and.(J.lt.12)) X `09 J = J + 1 X `09enddo X `09I = I + 1 X enddo X If ( J.eq.12 ) Then ! if the same username`20 X `09 I = I - 1 X endif X Me = I X If (score(I).eq.0) Then`20 X `09 Do J = 1,12`20 X `09 Username(J,I) = this_user(J) X `09 name(J,I) = ' ' X enddo X `09 If ( This_Score.lt.0 ) This_Score = 10 X `09 Prev_Score = 0 X Score(I) = This_Score X `09 Games(I) = 1 X Else X Prev_Score = Score(I) X Score(I) = Max(Score(I),this_Score) +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-