home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / GAMES / STARSHIP.ARC / STARSHIP.PAS < prev   
Pascal/Delphi Source File  |  1989-09-27  |  6KB  |  192 lines

  1. program starship;
  2. {a turbo pascal source file by harry ingham}
  3. const
  4.    maxcargo=36;{most allowable cargo types}
  5.    forsalenum=5;{cargoes avail. at each port}
  6.    forsaleplus=10;
  7.    holdnum=20; {number of partitions}
  8.    complement=20; {starting crew}
  9.    probestart=2;
  10.    boatstart=1;
  11.    hullstart=3;
  12.    speedstart=10;
  13.    laserstart=2;
  14.    creditstart=2E5;
  15.    spacestart=200;
  16.    moralestart=100;
  17.    chance=10;
  18.    danger=10;
  19.    starmax=10;{number of stars}
  20.  
  21. type
  22.    cargotype= record
  23.       cargoname: string[16];
  24.       rfactor,pfactor,ifactor,nifactor,afactor,nafactor: integer;
  25.       unitprice: real;
  26.       weight: byte;
  27.       end;
  28.    cargo= record
  29.       category: byte;
  30.       aunitnumber: byte;
  31.       acargoname: string[16];
  32.       aprice: real;
  33.       aweight: integer;
  34.       arfactor,apfactor,aifactor,anifactor,aafactor,anafactor: integer;
  35.       percent: real;
  36.       end;
  37.  
  38.    startrade=record
  39.       starname: string[15];
  40.       r,p,i,ni,a,na: boolean;
  41.       end;
  42.  
  43. var
  44.    cargorange: array[1..maxcargo] of cargotype;
  45.    thiscargo: cargo;
  46.    availnow: array[1..forsaleplus] of cargo;
  47.    holdnow: array[1..holdnum] of cargo;
  48.    chnfile: file;
  49.    thiscargotype: cargotype;
  50.    filename: string[14]; {used for other jobs too}
  51.    index,jndex,kndex,mndex,cargonum,star,thistar,realstar,
  52.      triplength,gamelength: byte;{the 'indices' are used for all work}
  53.    speed,tspeed,cspeed,hull,thull,chull,probes,boats,laser,tlaser,claser,
  54.       crew: byte;      {ship vars}
  55.    drivecrew, lasercrew, hullcrew, space,morale,moralebounce: integer;
  56.    num,trial,inp: integer;{input and calc}
  57.    yorn: char;
  58.    galaxytrade: array[1..starmax] of startrade;
  59.    distance: array[1..starmax] of byte;  {arrays 1..10 are indexed to stars}
  60.    angle: array[1..starmax] of integer;
  61.    been: array[1..starmax] of boolean;
  62.    t,dt,credits,realvar,salary: real;{time& money. realvar is all-purpose}
  63.    name: string[25];
  64.    stringvar:string[16];
  65.    alienmatch: array[0..4] of byte;
  66.    probehere,boathere,navy,messageflag,autodoc,assignment,roll,
  67.    prize: boolean;
  68. (*--------------------------------------------------*)
  69. var
  70.    OrigEpower:byte;
  71.    Epower: integer;
  72.    action,battle,newship,nomessage,moraleflag:boolean;
  73.    traderflag,quitter:boolean;
  74.  
  75.    cargofile: file of cargotype;{these two are unique to this program}
  76.    starfile: file of startrade;
  77.  
  78.  
  79. procedure instructions;
  80. begin
  81. writeln;
  82. writeln('Since you have an honest face, you are lent ',creditstart:6:0,' credits,');
  83. writeln('plus one hundered thousand a year to lease the ',name,'.');
  84. writeln('She has just been finished, and is in orbit around Sol. All holds are empty.');
  85. writeln;
  86. writeln('The good ship ',name,' will now embark on a ',t:3:3,'-year trading journey,');
  87. writeln('hoping to avoid bandits, mines, and strange local customs long enough');
  88. writeln('to make her merchant-captain (you) filthy rich. Space bandits are the');
  89. writeln('worst hazzard. Most have a speed of about 10. Rumor says that bandits');
  90. writeln('are often more willing to negotiate after a couple of laser hits.');
  91. writeln('Your loyal crew will go on strike if they think your profits are');
  92. writeln('high compared to their salaries.');
  93. writeln('The merchantman ',name,' has 20 holds and can carry 200 tons of cargo');
  94. writeln('Her fuel capacity is large enough to make any commercial trip.');
  95. writeln;
  96. writeln('When you ask for star data, there will be letters after each star name.');
  97. writeln('They describe the star''s economic status--R for rich, P for poor,');
  98. writeln('A for agricultural, NA for non-agricultural, I for industrial, and');
  99. writeln('NI for non-industrial. Naturally these conditions effect prices.');
  100. writeln('But the availability of each type of cargo is random.');
  101. writeln('type <carriage return> to begin....');
  102. readln;
  103. end;{instructions}
  104.  
  105. procedure initiate;
  106. begin
  107. quitter:=false;
  108. newship:=false;
  109. traderflag:=false;
  110. for index:=1 to starmax do been[index]:=false;
  111. credits:=creditstart;
  112. space:=spacestart;
  113. morale:=moralestart;
  114. moralebounce:=0;
  115. tspeed:=speedstart;
  116. speed:=tspeed;
  117. cspeed:=speed;
  118. thull:=hullstart;
  119. hull:=thull;
  120. chull:=hull;
  121. probes:=probestart;
  122. boats:=boatstart;
  123. tlaser:=laserstart;
  124. laser:=tlaser;
  125. claser:=laser;
  126. crew:=complement;
  127. drivecrew:=8;
  128. lasercrew:=6;
  129. hullcrew:=6;
  130. autodoc:=false;
  131. assignment:=false;
  132. battle:=false;
  133. t:=4;{defalut}
  134. for index:=1 to holdnum do holdnow[index].category:=0;{empty hold}
  135. randomize;
  136. salary:=5E4;
  137. filename:='cargo.dat';  {default data files}
  138. assign(cargofile,filename);
  139. filename:='star.dat';
  140. assign(starfile,filename);
  141. writeln('what length game would you like? (2 is a short game, 15 takes all day)');
  142. readln(t);
  143. if (t<>int(t)) or (t>255) or (t<1) then
  144.    begin
  145.    writeln('Whole numbers between 1 and 255 only. Game length?');
  146.    readln(t);
  147.    end;
  148. gamelength:=trunc(t);
  149. writeln('what will you name your ship?');
  150. readln(name);
  151. writeln('do you have a special cargo file on disc that you want to use?');
  152. readln(yorn);
  153. if upcase(yorn)='Y' then begin
  154.    writeln('what is the name of the file?');
  155.    readln(filename);
  156.    assign(cargofile,filename);
  157.    end;
  158. writeln('do you have a special star file you want to use?');
  159. readln(yorn);
  160. if upcase(yorn)='Y' then begin
  161.    writeln('what is the name of the file?');
  162.    readln(filename);
  163.    assign(starfile,filename);
  164.    end;{ifthen}
  165. index:=0;      {now read those data files}
  166. reset(cargofile);
  167.   while (eof(cargofile)=false) and (index<maxcargo) do
  168.   begin
  169.   index:=index+1;
  170.   read(cargofile,thiscargotype);
  171.   cargorange[index]:=thiscargotype;
  172.   end;{whiledo}
  173. writeln('Do you need instructions?');
  174. readln(yorn);
  175. if upcase(yorn)='Y' then instructions;
  176. cargonum:=index;
  177. close(cargofile);
  178. reset(starfile);
  179. for index:=1 to starmax do read(starfile,galaxytrade[index]);
  180. close(starfile);
  181. thistar:=5;   {begins game at star#5}
  182. star:=5;
  183. distance[5]:=0;
  184. boathere:=false;
  185. probehere:=false;
  186. end;{initiate}
  187.  
  188. begin
  189. initiate;
  190. assign(chnfile,'starchn.chn');
  191. chain(chnfile);
  192. end.