home *** CD-ROM | disk | FTP | other *** search
- program Kaiser; (* Version 4.1 *)
-
- (*
- Umsetzung des Programmes KAISER vom guten alten ATARI 800 XL, dort in
- ATARI BASIC geschrieben.
-
- Beginn: 26.12.1989
-
- Fortführung: ziemlich ununterbrochen bis Mitte April 1990
-
- 02.06.1990 ab jetzt genaue Daten
- 23.06.1990
- 25.07.1990
- 03.08.1990
- 12.08.1990 (Start neue Grafikroutinen)
- *)
-
- uses crt,dos,screen,kausgabe;
-
- {$DEFINE notime}
- const TestSpiel = false; (* Standard: false *)
- Rundenzeit = 5500; (* 1/100 Sekunden, die man Zeit hat für eine Runde. *
- * Braucht man länger, lebt man kürzer ... *)
- TimeOut = 50; (* Zeit, nach deren Verstreichen die Zufallsroutine des *
- * Grafikaufbaus abbricht. *)
- MaxSpieler = 9;
- MaxTitel = 9;
- Titel: array [false..true,1..MaxTitel] of Titelstring =
- (('Frau','Baronin','Landgräfin','Markgräfin','Fürstin','Herzogin',
- 'Großherzogin','Königin','Kaiserin'),
- ('Herr','Baron','Landgraf','Markgraf','Fürst','Herzog',
- 'Großherzog','König','Kaiser'));
- Reich: array [1..MaxTitel] of ReichString =
- ('Preußen', 'Hessen', 'Bayern', 'Böhmen', 'Sachsen',
- 'Mähren', 'Tirol', 'der Pfalz','Flandern');
- Ernteguete: array [1..5] of string[26] = (
- 'Dürre Hungersnot droht',
- 'Regen Schlechte Ernte',
- ' Gewöhnliche Ernte ',
- 'Gutes Wetter Reiche Ernte',
- 'Tolles Wetter Rekordernte');
- spiel_m: menue_typ = (xs:30;ys:20;xl:20;yl:2;at:att_spiel_m);
- spiel_m_tx: array[1..2] of string[21] =
- (' ^Altes Spiel laden ','^Neues Spiel beginnen');
- justiz_m: menue_typ = (xs:60;ys:19;xl:10;yl:4;at:att_justiz_m);
- justiz_m_tx: array[1..4] of string[11] =
- ('^Sehr fair ',
- '^Bescheiden',
- '^Hart ',
- '^Gierig ');
- justiztext: array[1..4] of string[10] =
- ('Sehr fair ',
- 'Bescheiden',
- 'Hart ',
- 'Gierig ');
- Mass = ' Maß';
- Taler = ' Taler';
- prz = ' % ';
- Schlecht = 'Wegen schlechter ';
- politik = 'politik';
- SpeicherHoehe = 15;
- korn_m: menue_typ = (xs:53;ys:18;xl:20;yl:5;at:att_korn_m);
- korn_m_tx: array[1..5] of string[21] =
- (' Korn kaufen ',
- ' Korn verkaufen ',
- ' Land kaufen ',
- ' Land verkaufen ',
- ' Zur Kornverteilung ');
- zuteil_m: menue_typ = (xs:56;ys:19;xl:19;yl:4;at:att_zuteil_m);
- zuteil_m_tx: array[1..4] of string[20] =
- (' Das Ma^ximum ',
- ' Das Mi^nimum ',
- ' Das ^Benötigte ',
- 'Eine bestimmte ^Zahl');
- einn_m: menue_typ = (xs:19;ys:17;xl:22;yl:5;at:att_einn_m);
- einn_m_tx: array[1..5] of string[23] =
- (' ^Zoll ändern ',
- '^Mehrwertsteuer ändern',
- '^Einkommensteuer ändern',
- ' ^Justiz ändern ',
- ' ^Weiter ');
- einkauf_m: menue_typ = (xs:23;ys:14;xl:34;yl:9;at:att_einkauf_m);
- einkauf_m_tx: array[1..9] of string[35] =
- ('Markt kaufen .......... 1000 Taler',
- 'Mühle kaufen .......... 2000 Taler',
- 'Palastteil kaufen ..... 5000 Taler',
- 'Kathedralenteil kaufen 9000 Taler',
- ' ^Militär ',
- ' ^Spielstand anzeigen ',
- ' ^Karte malen ',
- ' Zug beenden ',
- 'Spielstand speichern & Zug beenden');
- militaer_m: menue_typ = (xs:29;ys:18;xl:22;yl:5;at:att_militaer_m);
- militaer_m_tx: array[1..5] of string[23] =
- (' Soldaten rekrutieren ',
- ' Söldner anwerben ',
- ' Manöver veranstalten ',
- ' Krieg führen ',
- 'Zu den Staatseinkäufen');
- rekrut_m: menue_typ = (xs:22;ys:18;xl:37;yl:4;at:att_rekrut_m);
- rekrut_m_tx: array[1..4] of string[38] =
- ('Eine Schwadron Kavallerie: ',
- 'Eine Batterie Artillerie: ',
- 'Eine Kompanie Infanterie: ',
- ' Keine weiteren Truppen');
- Stadt: array[0..3,0..4] of byte =
- ((lo, hz, hz, hz, ro),
- (sk, leer,leer,leer,toro),
- (sk, leer,leer,leer,toru),
- (lu, hz, hz, hz, ru));
- Palace: array[1..16] of Bauwerktyp =
- ((0,3,ZweiFenster),
- (1,3,ZweiFenster),
- (2,3,Tuerlinks),
- (3,3,Tuerrechts),
- (4,3,ZweiFenster),
- (5,3,ZweiFenster),
- (1,2,ZweiFenster),
- (4,2,ZweiFenster),
- (1,1,Kuppel),
- (4,1,Kuppel),
- (0,2,Spitzen),
- (2,2,Spitzen),
- (3,2,Spitzen),
- (5,2,Spitzen),
- (1,0,Fahne),
- (4,0,Fahne));
- Cathedral: array[1..14] of Bauwerktyp =
- ((0,3,Tuerrechts),
- (1,3,ZweiFenster),
- (2,3,ZweiFenster),
- (3,3,ZweiFenster),
- (4,3,Tuerlinks),
- (0,2,Kuppelfenster),
- (2,2,ZweiFenster),
- (4,2,Kuppelfenster),
- (2,1,Kuppelfenster),
- (1,2,Kreuz),
- (3,2,Kreuz),
- (0,1,Kreuz),
- (4,1,Kreuz),
- (2,0,Kreuz));
-
- type RekrutArt = (Soldat, Soeldner);
- intarray = array [1..MaxSpieler] of integer;
- bytearray = array [1..MaxSpieler] of byte;
-
- var Anzahl_Spieler, (* A3 *)
- AmZug: (* A2 *) byte;
- Zeit: (* ZEIT *) word;
-
- Name: (* NAME$ *) array [1..MaxSpieler] of NamenString;
- Maennlich: (* A7 *) array [1..MaxSpieler] of boolean;
- VarGSTL, (* GSTL *)
- Tod, (* TOD *)
- EnthobenBis: (* B8 *) array [1..MaxSpieler] of word;
- Rang, (* RANG *)
- Land, (* A9 *)
- Geld, (* A8 *)
- Korn: (* KORN *) array [1..MaxSpieler] of longint;
- Punkte, (* STND *)
- Maerkte, (* B3 *)
- Muehlen, (* B4 *)
- Palast, (* B5 *)
- Kathedrale, (* B6 *)
- Justiz, (* B2 *)
- Zoll, (* ZOLL *)
- MwSt, (* MWST *)
- EkSt: (* EKST *) bytearray;
- VarWSFT, (* WSFT *)
- Haeuser, (* H *)
- VarKFA: (* KFA *) array [1..MaxSpieler] of real;
- Soldpflichtig, (* SOL *)
- Miliz, (* MIL *)
- Einwohner, (* B1 *)
- Artillerie, (* OFF *)
- Infanterie, (* DEF *)
- Reiter, (* REI *)
- Soldaten: (* B7 *) intarray;
-
- feind_m: menue_typ;
- feind_m_tx: array[1..maxspieler] of string[41];
-
-
- procedure Speichern;
-
- var Spieler: byte;
- Zeichen: char;
-
- (* Zeile 10000- *)
- begin
- Miliz[AmZug] := ( Maerkte[AmZug] div 5) * 2;
- rewrite(j);
- writeln(j, Anzahl_Spieler );
- writeln(j, AmZug );
- writeln(j, Zeit );
- for Spieler := 1 to Anzahl_Spieler do begin
- writeln(j, Name[Spieler] );
- writeln(j, Land[Spieler] );
- writeln(j, Geld[Spieler] );
- writeln(j, Rang[Spieler] );
- writeln(j, Einwohner[Spieler] );
- writeln(j, Korn[Spieler] );
- writeln(j, Zoll[Spieler] );
- writeln(j, MwSt[Spieler] );
- writeln(j, EkSt[Spieler] );
- writeln(j, Justiz[Spieler] );
- writeln(j, Tod[Spieler] );
- writeln(j, Maerkte[Spieler] );
- writeln(j, Muehlen[Spieler] );
- writeln(j, Palast[Spieler] );
- writeln(j, Kathedrale[Spieler]);
- writeln(j, Soldaten[Spieler] );
- writeln(j, VarGSTL[Spieler] );
- writeln(j, Punkte[Spieler] );
- writeln(j, int( VarWSFT[Spieler] ));
- writeln(j, Haeuser[Spieler] );
- writeln(j, Miliz[Spieler] );
- writeln(j, abs( Artillerie[Spieler]) );
- writeln(j, abs( Infanterie[Spieler]) );
- writeln(j, abs( Reiter[Spieler]) );
- writeln(j, EnthobenBis[Spieler] );
- writeln(j, int( VarKFA[Spieler] * 100) / 100);
- writeln(j, Soldpflichtig[Spieler] );
- if Maennlich[Spieler] then
- writeln(j, 'M')
- else
- writeln(j, 'W')
- end;
- close(j)
- end;
-
- function Laden: boolean;
-
- var Spieler: byte;
- Zeichen: char;
-
- (* Zeile 10900- *)
- begin
- reset(j);
- readln(j, Anzahl_Spieler );
- readln(j, AmZug );
- readln(j, Zeit );
- for Spieler := 1 to Anzahl_Spieler do begin
- readln(j, Name[Spieler] );
- readln(j, Land[Spieler] );
- readln(j, Geld[Spieler] );
- readln(j, Rang[Spieler] );
- readln(j, Einwohner[Spieler] );
- readln(j, Korn[Spieler] );
- readln(j, Zoll[Spieler] );
- readln(j, MwSt[Spieler] );
- readln(j, EkSt[Spieler] );
- readln(j, Justiz[Spieler] );
- readln(j, Tod[Spieler] );
- readln(j, Maerkte[Spieler] );
- readln(j, Muehlen[Spieler] );
- readln(j, Palast[Spieler] );
- readln(j, Kathedrale[Spieler]);
- readln(j, Soldaten[Spieler] );
- readln(j, VarGSTL[Spieler] );
- readln(j, Punkte[Spieler] );
- readln(j, VarWSFT[Spieler] );
- readln(j, Haeuser[Spieler] );
- readln(j, Miliz[Spieler] );
- readln(j, Artillerie[Spieler] );
- readln(j, Infanterie[Spieler] );
- readln(j, Reiter[Spieler] );
- readln(j, EnthobenBis[Spieler] );
- readln(j, VarKFA[Spieler] );
- readln(j, Soldpflichtig[Spieler] );
- readln(j, Zeichen);
- if Zeichen = 'M' then
- Maennlich[Spieler] := true
- else
- Maennlich[Spieler] := false
- end;
- close(j);
- Laden := IOResult = 0
- end;
-
-
-
-
- procedure Neues_oder_altes_Spiel;
-
- var Spieler: 1..MaxSpieler;
- Taste: char;
- Auswahl: byte;
- OK: boolean;
- SaveSpiel: PathStr;
-
- procedure Grundwerte;
-
- (* Zeile 110- *)
-
- var Spieler: 1..MaxSpieler;
-
- begin
- AmZug := 0;
- Zeit := 1700;
- for Spieler := 1 to Anzahl_Spieler do begin
- Land[Spieler] := 10000;
- if TestSpiel then
- Geld[Spieler] := 1000000
- else
- Geld[Spieler] := 15000;
- Rang[Spieler] := 1;
- Einwohner[Spieler] := 2000;
- Korn[Spieler] := 10000;
- Zoll[Spieler] := 25;
- MwSt[Spieler] := 10;
- EkSt[Spieler] := 5;
- Justiz[Spieler] := 2;
- Tod[Spieler] := 1760;
- Maerkte[Spieler] := 0;
- Muehlen[Spieler] := 0;
- Palast[Spieler] := 0;
- Kathedrale[Spieler] := 0;
- Soldaten[Spieler] := 20;
- Punkte[Spieler] := 4;
- VarGSTL[Spieler] := 5;
- VarWSFT[Spieler] := 25;
- Haeuser[Spieler] := 1;
- EnthobenBis[Spieler] := 1700;
- VarKFA[Spieler] := 1;
- Artillerie[Spieler] := 0;
- Infanterie[Spieler] := 1;
- Miliz[Spieler] := 1;
- Reiter[Spieler] := 0;
- Soldpflichtig[Spieler] := 0;
- end
- end;
-
- procedure CLS;
- begin
- Clear(1,78,3,23,ord(crt_screen^[0,0,1]))
- end;
-
-
- procedure NeuesSpiel;
- var Spieler: byte;
- begin
- OK := false;
- repeat
- Anzahl_Spieler := Eingabe(1, 'Wieviele Spieler wollen mitspielen ?');
- if Anzahl_Spieler = 0 then Exit
- until Anzahl_Spieler in [1..MaxSpieler];
- for Spieler := 1 to Anzahl_Spieler do begin
- CLS;
- wrm(10,40,att[att_tit_back],'Wie heißt der Herrscher von '+Reich[Spieler]+' ?');
- Name[Spieler] := EingCapStr(20);
- if Name[Spieler] = '' then Exit;
- CLS;
- wrm(10,40,att[att_tit_back],'Ist '+Name[Spieler]+' von '+Reich[Spieler] +
- ' männlich oder weiblich (M/W) ?');
- repeat
- Taste := UpperCase(Readkey);
- if Taste = #27 then Exit;
- if Taste = #0 then begin
- taste:=readkey;
- taste:=#0
- end
- until Taste in ['M','W'];
- Maennlich[Spieler] := (Taste = 'M')
- end;
- Grundwerte;
- repeat
- CLS;
- wrm(10,40,att[att_tit_back],'Unter welchem Namen soll das Spiel gespeichert werden ?');
- SaveSpiel := EingFilename;
- if SaveSpiel = '' then Exit;
- SaveSpiel := SaveSpiel + Extension;
- wrm(13,40,att[att_tit_schr],SaveSpiel);
- assign(j, SaveSpiel);
- reset(j);
- close(j);
- if IOResult = 0 then begin
- wrm(16,40,att[att_tit_back],'Ein gespeichertes Spiel dieses Namens existiert schon.');
- wrm(17,40,att[att_tit_back],'Soll es überschrieben werden (J/N) ?');
- OK := ja
- end
- else
- OK := true
- until OK
- end;
-
-
- begin (* Neues oder altes Spiel ? *)
-
- (* Zeile 35- *)
-
- repeat
- TitelSchirm;
- repeat
- auswahl:=2;
- waehlen (@spiel_m,auswahl);
- until auswahl<>0;
- if Auswahl=2 then begin
- NeuesSpiel;
- if OK then Speichern
- end
- else begin
- SaveSpiel := FileSelect('*' + Extension, SavePath);
- if SaveSpiel <> '' then begin
- assign(j, SaveSpiel);
- OK := Laden end
- else
- OK := false
- end
- until OK
- end;
-
-
- procedure Spiel;
- (* Der Hauptteil des Programms *)
-
- var Faul, (* FAUL *)
- Ernte: (* C5 *) byte;
- Noetig, (* NOETIG *)
- VarI, (* I *)
- VarJ, (* J *)
- KornGekauft, (* C6 *)
- Landpreis, (* C7 *)
- Kornpreis, (* C8 *)
- VarFR, (* FR *)
- VarFR2: (* FR2 *) real;
- Menge, (* MENGE *)
- KavallPreis, (* KP *)
- ArtillPreis, (* AP *)
- InfantPreis: (* IP *) longint;
-
- Startzeit, Endzeit: longint;
-
- Bankrott, SchlechtePolitik, KaiserF, EndeF, Save, KriegGefuehrt: boolean;
-
-
-
- function GanzerName(Spieler: byte): MaxString;
- begin
- GanzerName := Titel[Maennlich[Spieler],Rang[Spieler]] +
- ' ' + Name[Spieler] +
- ' von ' + Reich[Spieler]
- end;
-
-
- procedure NameUndJahr (att: byte);
- begin
- Rahmen (att);
- wr(1,2,att,GanzerName(AmZug));
- wr(1,51,att,'Wir schreiben das Jahr '+Strg(Zeit));
- end;
-
-
- procedure GrNameUndJahr;
- var s: maxstring;
- begin
- OpenGraph;
- rectangle(0,0,XWeite, 13);
- OutText(1,3,GanzerName(AmZug));
- s:='Wir schreiben das Jahr '+Strg(Zeit);
- OutText((xweite shr 3)-length(s)-1,3,s)
- end;
-
-
- procedure AnzahlMilitaer;
- (* Zeile 11111 *)
- begin
- Miliz[AmZug] := round( int( Maerkte[AmZug] / 5) * 2);
- if Miliz[AmZug] > round( int( Muehlen[AmZug] / 3) * 2) then
- Miliz[AmZug] := round( int( Muehlen[AmZug] / 3) * 2);
- Soldaten[AmZug] := (Reiter[AmZug] + Artillerie[AmZug] + Infanterie[AmZug] +
- Miliz[AmZug]) * 20;
- if Soldpflichtig[AmZug] > Soldaten[AmZug] then
- Soldpflichtig[AmZug] := Soldaten[AmZug] - Miliz[AmZug];
- if Soldpflichtig[AmZug] < 0 then
- Soldpflichtig[AmZug] := 0;
- if Soldaten[AmZug] < 20 then begin
- Soldaten[AmZug] := 20;
- Infanterie[AmZug] := 1;
- Reiter[AmZug] := 0;
- Artillerie[AmZug] := 0
- end
- end;
-
-
- procedure BerechneErnte;
-
- procedure BerechneNoetig;
-
- (* Zeile 3000- *)
- begin
- Noetig := round( abs( int( Punkte[AmZug] * 100 + VarGSTL[AmZug] * 40 +
- VarWSFT[AmZug] * 30 + Einwohner[AmZug] * 5 +
- Soldaten[AmZug] * 10)));
- if VarJ < 1 then
- VarFR := 2
- else begin
- VarFR := Noetig / VarJ;
- if VarFR > 2 then
- VarFR := 2
- end;
- if VarFR < 0.8 then
- VarFR := 0.8;
- Landpreis := int( 10 * Landpreis * VarFR) / 10
- end;
-
-
- (* Zeile 1003- *)
- begin (* Berechne Ernte *)
- Ernte := random(5) + 1;
- KornGekauft := 0;
- VarFR2 := Land[AmZug];
- VarFR := (Einwohner[AmZug] - Muehlen[AmZug] * 100) * 5;
- if VarFR < 0 then
- VarFR := 0;
- If VarFR < VarFR2 then
- VarFR2 := VarFR;
- repeat
- VarFR := Korn[AmZug] * 2;
- if VarFR < VarFR2 then
- VarFR2 := VarFR;
- VarFR := Ernte - 0.5;
- VarJ := VarFR2 * VarFR;
- Korn[AmZug] := Korn[AmZug] + round( int( VarJ ));
- Landpreis := (3 * Ernte + 12 + random(12)) / 10;
- StartZeit := MomentZeit;
- BerechneNoetig;
- Faul := random(50) + 1;
- Korn[AmZug] := round( int( Korn[AmZug] * (1 - Faul/100 )));
- Kornpreis := int((( 6 - Ernte) * 3 + (random(10) + 2)) *8 * VarFR)
- until Kornpreis >= 1
- end;
-
- procedure KornUndLand;
-
- var Auswahl,Y: byte;
-
- procedure Bildschirm; (* Korn und Land *)
-
- var Y: byte;
-
- procedure SpeicherFuellen;
-
- var WieVoll: (* B *) real;
- Hoehe, Zaehler,x: byte;
-
- (* Zeile 1080- *)
- begin
- box(all_single_box,3,6,20,1+SpeicherHoehe,att[att_speicher],att[att_speicher]);
- wr(6,2,att[att_speicher],'▄▄▄▄▄▄▄▄████████▄▄▄▄▄▄▄▄');
- WieVoll := abs( Korn[AmZug] * 0.8 / Noetig);
- if WieVoll > 1 then
- WieVoll := 1;
- Hoehe := round( Int( WieVoll * Speicherhoehe));
- if Hoehe > 0 then
- for Zaehler := 7+Speicherhoehe downto 7+Speicherhoehe-Hoehe do
- for x:=4 to 23 do
- crt_screen^[Zaehler,x,0] := '█';
- wr(4,3,att[att_speicher],'Sie haben '+Strg(round( int( WieVoll * 100)))+
- '% des benötigten Kornes.')
- end;
-
- (* Zeile 1014- *)
- begin (* Bildschirm Korn und Land *)
- NameUndJahr (att[att_korn_b]);
- wr(4,48,att[att_speicher],Strg(Faul)+'% Ihrer Ernte sind verfault.');
- wr(6,50,att[att_korn_s],Ernteguete[Ernte]);
- wr(8,49,att[att_korn_s],'Kornreserve: '+StrgR(Korn[AmZug],8)+Mass);
- wr(9,49,att[att_korn_s],'Nötiges Korn: '+StrgR(round(Noetig),8)+Mass);
- wr(10,49,att[att_korn_s],'Kornpreis: '+StrgR(round(Kornpreis),8)+Taler);
- wr(12,49,att[att_korn_s],'Landpreis: '+StrgR(round(Landpreis*10),8)+Taler);
- wr(13,49,att[att_korn_s],'Landbesitz: '+StrgR(Land[AmZug],8)+' Hektar');
- wr(15,49,att[att_korn_s],'Vermögen: '+StrgR(Geld[AmZug],8)+Taler);
- SpeicherFuellen
- end;
-
-
- procedure KornKaufen;
-
- var Zahl : longint;
- (* Zeile 1110- *)
- begin
- Zahl := Eingabe(6, 'Wieviel Korn wollen Sie kaufen ?');
- VarFR2 := Noetig * 3;
- If KornGekauft + Zahl > VarFR2 then begin
- Hinweis('Vorräte erschöpft !!!');
- Zahl := round( VarFR2 - KornGekauft)
- end;
- KornGekauft := KornGekauft + Zahl;
- Korn[AmZug] := Korn[AmZug] + Zahl;
- Geld[AmZug] := Geld[AmZug] - round( Zahl * Kornpreis / 1000 )
- end;
-
- procedure KornVerkaufen;
-
- var Zahl: longint;
- (* Zeile 1120- *)
- begin
- Zahl := Eingabe(6, 'Wieviel Korn wollen Sie verkaufen ?');
- if Zahl <= Korn[AmZug] then begin
- KornGekauft := Korngekauft - Zahl;
- Korn[AmZug] := Korn[AmZug] - Zahl;
- Geld[AmZug] := Geld[AmZug] + round( Kornpreis * Zahl / 1111)
- end
- end;
-
-
- procedure Landkaufen;
-
- var Zahl: longint;
- (* Zeile 1130- *)
- begin
- Zahl := Eingabe(5, 'Wieviel Hektar Land wollen Sie kaufen ?');
- Land[AmZug] := Land[AmZug] + Zahl;
- Geld[AmZug] := Geld[AmZug] - round( Zahl * Landpreis)
- end;
-
-
- procedure LandVerkaufen;
-
- var Zahl: longint;
- (* Zeile 1140- *)
- begin
- Zahl := Eingabe(5,'Wieviel Hektar Land wollen Sie verkaufen ?');
- if Zahl <= Land[AmZug] then begin
- Land[AmZug] := Land[AmZug] - Zahl;
- Geld[AmZug] := Geld[AmZug] + round( Zahl * Landpreis * 0.9)
- end
- end;
-
-
- procedure Kornzuteilung;
- var x,y: byte;
- s1,s2: string[5];
- Fertig: boolean;
- begin
- Bildschirm;
- box(all_single_box,27,17,25,5,att[att_zuteil_b],att[att_zuteil_b]);
- wrm(18,40,att[att_zuteil_b],'Sie müssen Ihrem Volk');
- wrm(19,40,att[att_zuteil_b],'20 - 80% Ihrer Reserven');
- wrm(20,40,att[att_zuteil_b],'zuteilen.');
- s1:=strg(korn[amzug] div 5); s2:=strg((korn[amzug]*8) div 10);
- x:=40-(8+length(s1)+length(s2)) div 2;
- wr(22,x,att[att_zuteil_b],'(');
- wr(22,x+1,att[att_zuteil_s],s1);
- wr(22,x+2+length(s1),att[att_zuteil_b],'-');
- wr(22,x+4+length(s1),att[att_zuteil_s],s2);
- wr(22,x+5+length(s1)+length(s2),att[att_zuteil_b],'Maß)');
- auswahl:=4;
- Fertig := false;
- repeat
- repeat
- if auswahl=0 then auswahl:=4;
- waehlen (@zuteil_m,auswahl);
- until auswahl<>0;
- case auswahl of
- 1: Menge := (Korn[AmZug] * 8) div 10;
- 2: Menge := Korn[AmZug] div 5;
- 3: Menge := round(Noetig);
- 4: Menge := Eingabe(6,'Wieviel Korn wollen Sie Ihrem Volk zuteilen?')
- end;
- if Menge > (Korn[AmZug] * 8) div 10 then
- Hinweis('Das ist zu viel !!!')
- else
- if Menge < Korn[AmZug] div 5 then
- Hinweis('Das ist zu wenig !!!')
- else
- Fertig := True
- until Fertig;
- Korn[AmZug] := Korn[AmZug] - Menge;
- VarFR := Menge / Noetig - 1;
- end;
-
-
-
-
- begin (* Korn und Land *)
- auswahl:=1;
- repeat
- Bildschirm;
- waehlen (@korn_m,auswahl);
- case Auswahl of
- 1: KornKaufen;
- 2: KornVerkaufen;
- 3: Landkaufen;
- 4: LandVerkaufen
- end
- until Auswahl in [0,5];
- Kornzuteilung
- end;
-
-
- procedure Uebersicht;
-
- var Geboren, Gestorben,
- Einwanderer,
- Staatsopfer,
- Marktverdienst,
- Muehlenverdienst,
- Sold: word;
-
- procedure Bildschirm;
- begin
- NameUndJahr (att[att_uebers]);
- end;
-
- Function TodGeburt(VarVAR: real): word;
- (* Zeile 3100- *)
- begin
- TodGeburt := round(int( (random * VarVAR + 1) * Einwohner[AmZug] / 100))
- end;
-
- procedure Opfer;
- (* Zeile 3140- *)
- begin
- Staatsopfer := round( int((random + 2) * Einwohner[AmZug] / 100 *
- sqr( Justiz[AmZug] - 2)))
- end;
-
-
- (* Zeile 1360- *)
- begin (* Übersicht *)
- Bildschirm;
- Staatsopfer := 0;
- Einwanderer := 0;
- if Menge >= (Noetig - 1) then begin
- Geboren := TodGeburt(7);
- Gestorben := TodGeburt(3);
- if MwSt[AmZug] < random(20) +1 then
- Punkte[AmZug] := Punkte[AmZug] + random(2);
- if EkSt[AmZug] < random(20) + 1 then
- VarGSTL[AmZug] := VarGSTL[AmZug] + random(3);
- if Menge >= round (Noetig * (1.1 + random * 0.4)) then begin
- VarFR := Einwohner[AmZug] / 7;
- VarFR2 := ((Menge - Noetig) / Noetig * 10) * VarFR * (random(65) + 2);
- if VarFR2 > Einwohner[AmZug] / 10 then
- VarFR2 := int( Einwohner[AmZug] / 10);
- VarFR2 := int((random * VarFR2 + 2) * (1.1 - MwSt[AmZug] / 100) *
- (1.1 - Zoll[AmZug] / 100) * (1.1 - EkSt[AmZug] / 100));
- Einwanderer := round( VarFR2);
- VarFR2 := random * VarFR2 / 5 + 1;
- if VarFR2 > 50 then
- VarFR2 := 50;
- VarWSFT[AmZug] := VarWSFT[AmZug] + VarFR2;
- Punkte[AmZug] := Punkte[AmZug] + 1;
- VarGSTL[AmZug] := VarGSTL[AmZug] + 2
- end;
- if (Justiz[AmZug] > 2) or (90 - Zoll[AmZug] - MwSt[AmZug] - EkSt[AmZug]
- < 0) then Opfer end
-
- else begin
- (* Zeile 1420- *)
- VarJ := (Noetig - Menge) / Noetig * 100 - 9;
- VarI := VarJ;
- if VarJ > 65 then VarJ := 65;
- if VarJ < 0 then
- VarJ := 0; VarI := 0;
- Geboren := TodGeburt(3);
- Gestorben := TodGeburt(VarI + 8);
- Opfer
- end;
- wrm(8,40,att[att_uebers],Numerus(Geboren,'Einwohner wurde','n')+' heuer geboren.');
- wrm(10,40,att[att_uebers],Numerus(Gestorben,'Einwohner starb','en')+' heuer.');
- if Einwanderer > 0 then
- wrm(13,40,att[att_uebers],Numerus(Einwanderer,'Einwanderer kam','en')+' heuer.');
- if Staatsopfer > 0 then
- wrm(15,40,att[att_uebers],Numerus(Staatsopfer,'Opfer des Staatshaushaltes verließ',
- 'en')+' das Land.');
- Einwohner[AmZug] := Einwohner[AmZug]
- + Geboren - Gestorben + Einwanderer - Staatsopfer;
- Marktverdienst := Maerkte[AmZug] * ( 127 + random(127));
- Muehlenverdienst := Muehlen[AmZug] * ( 250 + random(250));
- Sold := round( Soldaten[AmZug] * 3 + Soldpflichtig[AmZug] * 12 );
- if Marktverdienst > 0 then
- wrm(18,40,att[att_uebers],'An Ihren Märkten verdienten Sie '+Strg(Marktverdienst)+Taler+'.');
- if Muehlenverdienst > 0 then
- wrm(20,40,att[att_uebers],'Ihre Mühlen erwirtschafteten '+Strg(Muehlenverdienst)+Taler+'.');
- wrm(22,40,att[att_uebers],'Ihre Armee erhielt Sold in Höhe von '+Strg(Sold)+Taler+'n.');
- Geld[AmZug] := Geld[AmZug] + Marktverdienst + Muehlenverdienst - Sold;
- Taste_Druecken
- end;
-
-
-
- procedure Einnahmen;
-
- var VarFACA, (* FACA *)
- VarFACB, (* FACB *)
- VarFACC, (* FACC *)
- VarFACD, (* FACD *)
- VarFACE: (* FACE *) real;
-
- EinnMwSt,
- EinnEkSt,
- EinnZoll,
- EinnJustiz,
- EinnTotal: longint;
-
- Auswahl: byte;
-
- procedure Berechnen;
-
- (* Zeile 3400- *)
- begin
- VarFR := VarFACE - Zoll[AmZug] - MwSt[AmZug] - EkSt[AmZug];
- VarFR2 := int (( Punkte[AmZug] * 180 + Rang[AmZug] * 75 + VarWSFT[AmZug] *
- 20) * ( VarFR / 100) + Haeuser[AmZug] * 100);
- VarJ := int (( Punkte[AmZug] * 50 + VarWSFT[AmZug] * 75 + Haeuser[AmZug] * 10)
- * (VarFR / 100) * (5 - Justiz[AmZug]) / 2);
- VarI := int ( Punkte[AmZug] * 250 + Haeuser[AmZug] * 20 +
- (10 * Justiz[AmZug] * Punkte[AmZug]) * (VarFR / 100));
- EinnZoll := round( int ( VarFR2 * Zoll[AmZug] * VarFACA));
- EinnMwSt := round( int( VarJ * MwSt[AmZug] * VarFACB ));
- EinnEkSt := round( int( VarI * EkSt[AmZug] * VarFACC ));
- EinnJustiz := round( int(( Justiz[AmZug] * 300 - 500) * Rang[AmZug] *
- VarFACD));
- EinnTotal := EinnZoll + EinnMwSt + EinnEkSt + EinnJustiz
- end;
-
- procedure Bildschirm;
- var y: byte;
- (* Zeile 1518- *)
- begin
- wrm(4,40,att[att_einn_tit],' STAATSEINNAHMEN ');
- wrm(7,40,att[att_einn_s], 'Zoll: '+prz+taler);
- wr(7,40,att[att_einn_z],strgr(zoll[amzug],2));
- wr(7,47,att[att_einn_z],strgr(einnzoll,5));
- wrm(9,40,att[att_einn_s], 'Mehrwertsteuer: '+prz+taler);
- wr(9,40,att[att_einn_z],strgr(mwst[amzug],2));
- wr(9,47,att[att_einn_z],strgr(einnmwst,5));
- wrm(11,40,att[att_einn_s],'Einkommensteuer: '+prz+taler);
- wr(11,40,att[att_einn_z],strgr(ekst[amzug],2));
- wr(11,47,att[att_einn_z],strgr(einnekst,5));
- wrm(13,40,att[att_einn_s],'Justiz: '+taler);
- wr(13,34,att[att_einn_z],justiztext[justiz[amzug]]);
- wr(13,47,att[att_einn_z],strgr(einnjustiz,5));
- wr(14,46,att[att_einn_s],'─────────────');
- wr(15,47,att[att_einn_z],strgr(einntotal,5));
- wr(15,52,att[att_einn_s],taler);
- wr(16,46,att[att_einn_s],'═════════════');
- end;
-
-
- procedure JustizAendern;
- var neu: byte;
- begin
- neu:=justiz[amzug];
- waehlen (@justiz_m,neu);
- if neu>0 then justiz[amzug]:=neu;
- end;
-
-
-
- (* Zeile 1499- *)
- begin
- VarFR := Einwohner[AmZug] / 100;
- VarFACA := VarFR / ( random * 3000 + 2500 );
- VarFACB := VarFR / ( random * 4000 + 2000 );
- VarFACC := VarFR / ( random * 2000 + 3000 );
- VarFACD := VarFR / ( random * 3000 + 2500 ) * 100;
- VarFACE := int( 70 + random * 82 );
- Auswahl := 5;
- repeat
- Berechnen;
- NameUndJahr (att[att_einn_s]);
- Bildschirm;
- waehlen (@einn_m,auswahl);
- case Auswahl of
- 1: begin
- Zoll[AmZug] := Eingabe(2,'Zoll');
- Auswahl := 2
- end;
- 2: begin
- MwSt[AmZug] := Eingabe(2,'Mehrwertsteuer');
- Auswahl := 3
- end;
- 3: begin
- EkSt[AmZug] := Eingabe(2,'Einkommensteuer');
- Auswahl := 4
- end;
- 4: Justizaendern;
- end
- until Auswahl in [0,5];
- Geld[AmZug] := Geld[AmZug] + EinnTotal
- end;
-
- procedure Spielertod;
-
- var y: byte;
-
- (* 7000- *)
- begin
- Rahmen (norm);
- save:=cfg.autosave;
- wrm (40,1,inv,'EINE SEHR SCHLECHTE NACHRICHT');
- wrm (40,20,inv,' '+GanzerName(AmZug)+' ');
- for y:=4 to 18 do setattr(y,38,5,inv);
- for y:=8 to 9 do setattr(y,32,17,inv);
- wrm(22,40,norm,'ist leider verstorben.');
- Taste_Druecken;
- Tod[AmZug] := 1;
- for y:=1 to Anzahl_Spieler do
- if Tod[y] > 1700 then exit;
- EndeF := true;
- Hinweis('SPIELENDE');
- end;
-
-
- procedure TestBankrott;
- (* Zeile 4900- *)
- begin
- Bankrott := false;
- if Geld[AmZug] < round(-10000*Rang[AmZug]*int(8+random(6))/10) then begin
- Bankrott := true;
- save:=cfg.autosave;
- Geld[AmZug] := Geld[AmZug] + Kathedrale[AmZug] * 2500
- + Palast[AmZug] * 1500
- + Muehlen[AmZug] * 1000
- + Maerkte[AmZug] * 500;
- Kathedrale[AmZug] := 0;
- Palast[AmZug] := 0;
- Muehlen[AmZug] := 0;
- Maerkte[AmZug] := 0;
- Soldpflichtig[AmZug] := Soldpflichtig[AmZug] div 2;
- VarKFA[AmZug] := VarKFA[AmZug] * 0.5;
- if Land[AmZug] > 3000 then begin
- Land[AmZug] := Land[AmZug] - 3000;
- Geld[AmZug] := Geld[AmZug] + round(Land[AmZug]*Landpreis*0.8);
- Land[AmZug] := 3000
- end;
- if Geld[AmZug] > 0 then begin
- Land[AmZug] := Land[AmZug] + round(Geld[AmZug]/Landpreis);
- Geld[AmZug] := 0
- end;
- Tod[AmZug] := Tod[AmZug] - 2;
- if Tod[AmZug] < Zeit + 1 then
- Spielertod
- else begin
- NameUndJahr (att[att_nachr]);
- wrm(10,40,att[att_nachr],'Sie sind leider bankrott');
- wrm(12,40,att[att_nachr],'Gläubiger haben große Teile Ihres');
- wrm(13,40,att[att_nachr],'Besitzes gepfändet.');
- if cfg.soundf then NachrichtSound;
- Taste_Druecken
- end
- end
- end;
-
- procedure TestPolitik;
- (* Zeile 1575- *)
- begin
- SchlechtePolitik := false;
- if (Land[AmZug] < Einwohner[AmZug]) or (Einwohner[AmZug] < 500) then begin
- SchlechtePolitik := true;
- save:=cfg.autosave;
- EnthobenBis[AmZug] := Zeit + 2;
- NameUndJahr (att[att_nachr]);
- if Land[AmZug] < Einwohner[AmZug] then
- wrm(12,40,att[att_nachr],Schlecht+'Land'+politik)
- else begin
- wrm(12,40,att[att_nachr],Schlecht+'Einwohner'+politik);
- Einwohner[AmZug] := 500
- end;
- wrm(14,40,att[att_nachr],'sind Sie 1 Jahr Ihres Amtes');
- wrm(15,40,att[att_nachr],'enthoben worden.');
- if cfg.soundf then NachrichtSound;
- Taste_Druecken
- end
- end;
-
- procedure Landmangel;
-
- var Platz, Markt, Muehle: integer;
- Palas, Kath: boolean;
-
- (* Zeile 1580 / 6100- *)
- begin
- KavallPreis := 3680 + 2 * random(256);
- ArtillPreis := 2300 + 2 * random(256);
- InfantPreis := 1500 + 2 * random(128);
- Platz := Land[AmZug] div 1000;
- Markt := 0;
- Muehle := 0;
- Palas := false;
- Kath := false;
- if Maerkte[AmZug] > Platz then
- Markt := Maerkte[AmZug] - Platz;
- if Muehlen[AmZug] > Platz then
- Muehle := Muehlen[AmZug] - Platz;
- Palas := ((Platz < 12) and (Palast[AmZug] > 0));
- Kath := ((Platz < 24) and (Kathedrale[AmZug] > 0));
- if (Markt + Muehle > 0) or Palas or Kath then begin
- NameUndJahr (att[att_nachr]);
- save:=cfg.autosave;
- wrm(5,40,att[att_nachr],'Sie haben wegen Landmangels folgende Gebäude verloren:');
- if Markt > 0 then begin
- Maerkte[AmZug] := Maerkte[AmZug] - Markt;
- wrm(8,40,att[att_nachr],sgpl(markt,'Markt','Märkte'))
- end;
- if Muehle > 0 then begin
- Muehlen[AmZug] := Muehlen[AmZug] - Muehle;
- wrm(10,40,att[att_nachr],numerus(muehle,'Mühle','n'))
- end;
- if Palas then begin
- Palast[AmZug] := 0;
- wrm(12,40,att[att_nachr],'Ihren Palast')
- end;
- if Kath then begin
- Kathedrale[AmZug] := 0;
- wrm(14,40,att[att_nachr],'Ihre Kathedrale')
- end;
- Taste_Druecken
- end
- end;
-
-
- procedure Einkaeufe;
-
- var Auswahl: byte;
-
- procedure NeuesBild;
- var y: byte;
- begin
- NameUndJahr (att[att_einkauf_s]);
- wrm(4,40,att[att_einkauf_tit],' STAATSEINKÄUFE ');
- end;
-
-
- procedure Bildschirm;
- var Platz: string[11];
- begin
- Platz:=' (max. '+Strg(Land[AmZug] div 1000)+')';
- clear(1,78,6,12,att[att_einkauf_s]);
- wrm(6,40,att[att_einkauf_s],'Sie besitzen: '+StrgR(Geld[AmZug],6)+Taler);
- wrm(8,40,att[att_einkauf_s],SgPl(Maerkte[AmZug],'Markt','Märkte')+Platz);
- wrm(9,40,att[att_einkauf_s],Numerus(Muehlen[AmZug],'Mühle','n')+Platz);
- wrm(11,40,att[att_einkauf_s],Strg(Palast[AmZug])+' von 16 Palastteilen');
- wrm(12,40,att[att_einkauf_s],Strg(Kathedrale[AmZug])+' von 14 Kathedralenteilen')
- end;
-
- procedure Bauland;
- begin
- Hinweis('Zu wenig Bauland !!!')
- end;
-
-
- procedure MarktKaufen;
- (* Zeile 1626- *)
- begin
- if Maerkte[AmZug] > Land[AmZug] div 1000 - 1 then
- Bauland
- else begin
- inc(Maerkte[AmZug]);
- Geld[AmZug] := Geld[AmZug] - 1000;
- Haeuser[AmZug] := Haeuser[AmZug] + 1;
- AnzahlMilitaer
- end
- end;
-
- procedure MuehleKaufen;
- (* Zeile 1630- *)
- begin
- if Muehlen[AmZug] > Land[AmZug] div 1000 - 1 then
- Bauland
- else begin
- inc(Muehlen[AmZug]);
- Geld[AmZug] := Geld[AmZug] - 2000;
- Haeuser[AmZug] := Haeuser[AmZug] + 0.25;
- AnzahlMilitaer
- end
- end;
-
- procedure PalastKaufen;
- (* Zeile 1640- *)
- begin
- if (Land[AmZug] < 13000) or (Palast[AmZug] > 15) then
- Bauland
- else begin
- inc(Palast[AmZug]);
- Geld[AmZug] := Geld[AmZug] - 5000;
- Haeuser[AmZug] := Haeuser[AmZug] + 0.5
- end
- end;
-
- procedure KathKaufen;
- (* Zeile 1650- *)
- begin
- if (Land[AmZug] < 25000) or (Kathedrale[AmZug] > 13) then
- Bauland
- else begin
- inc(Kathedrale[AmZug]);
- Geld[AmZug] := Geld[AmZug] - 9000;
- Haeuser[AmZug] := Haeuser[AmZug] + 1;
- VarGSTL[AmZug] := VarGSTL[AmZug] + 1 + random(6)
- end
- end;
-
- procedure Spielstand;
- var y,Spieler: byte;
-
- begin
- Rahmen (att[att_spielst_s]);
- wrm(1,40,att[att_spielst_tit],' SPIELSTAND ');
- wrm(4,40,att[att_spielst_tit],
- ' Name Punkte Soldaten Land Geld Einwohner ');
- for Spieler:=1 to Anzahl_Spieler do begin
- y:= Spieler * 2 + 5;
- if Tod[Spieler] < Zeit then
- wr(y-1,4,att[att_spielst_s],GanzerName(Spieler)+' (verstorben)')
- else
- wr(y-1,4,att[att_spielst_s],GanzerName(Spieler));
- wr(y,34,att[att_spielst_s],StrgR(Punkte[Spieler],2) + ' ' +
- StrgR(Soldaten[Spieler],4) + ' ' +
- StrgR(Land[Spieler],5) + ' ' +
- StrgR(Geld[Spieler],6) + ' ' +
- StrgR(Einwohner[Spieler],4));
-
- end;
- Taste_Druecken
- end;
-
-
- procedure Karte;
-
- var LRand, ORand: word;
- RRand, URand, Groesse: byte;
- Feld: array[0..44, 0..21] of boolean;
- Taste: char;
- KeinPlatz: boolean;
-
-
- procedure Grenzen;
- var x,y: byte;
- begin
- midtext(17,'Bitte eine Taste !!!');
- Groesse := round( int( Land[AmZug] / 1000));
- if Groesse > 35 then
- Groesse := 35;
- LRand := (succ(XWeite)-(Groesse shl 4)) div 2;
- RRand := Groesse;
- ORand := 32;
- URand := (YWeite-ORand-17) div 16;
- rectangle
- (LRand - 4, ORand - 4, LRand + RRand*16+3, ORand + URand * 16 + 3);
- for x:= 0 to RRand - 1 do
- for y:= 0 to URand -1 do
- Feld[x,y] := false;
- end;
-
-
- procedure Plot(x,y, ZNummer: byte);
- begin
- Mal((LRand+(x shl 4)) shr 3,ORand+(y shl 4),ZNummer);
- Feld[x,y]:=true
- end;
-
-
- function Empty(x1,x2,y1,y2: byte): boolean;
- var x,y: byte;
- begin
- Empty := false;
- for x:=x1 to x2 do
- for y:=y1 to y2 do
- if Feld[x,y] then Exit;
- Empty := true
- end;
-
-
- procedure Zufall(xl, yl: byte; var x,y: byte);
- var Zeit: longint;
- begin
- Zeit := MomentZeit;
- KeinPlatz := false;
- repeat
- x := random(RRand - xl + 1);
- y := random(URand - yl + 1)
- until Empty(x, x+xl-1, y, y+yl-1) or (Zeit + TimeOut < Momentzeit);
- if Momentzeit > Zeit + TimeOut then
- KeinPlatz := true
- end;
-
-
- procedure Malpalast;
- var nr: byte;
- begin
- for nr:=1 to Palast[AmZug] do
- Plot(Palace[nr,0]+6,Palace[nr,1]+1,Palace[nr,2])
- end;
-
- procedure MalKathedrale;
- var nr: byte;
- begin
- for nr:=1 to Kathedrale[AmZug] do
- Plot(Cathedral[nr,0]+19,Cathedral[nr,1]+URand-5,Cathedral[nr,2])
- end;
-
-
- procedure MalMarkt;
- var x, y, x1, y1, Staedte, Hoefe, Nr: byte;
-
- begin
- Hoefe := min(Maerkte[AmZug], 35);
- Staedte := min( Hoefe div 5, Muehlen[AmZug] div 3);
- Hoefe := Hoefe - Staedte * 5;
- if Staedte > 0 then begin
- for nr:=1 to Staedte do begin
- Zufall(5,4,x1,y1);
- for x:=0 to 4 do
- for y:=0 to 3 do
- if not ((x=3) and (y=2)) then
- if ((x in [1..3]) and (y in [1..2]))
- then Plot(x1+x, y1+y, ZMarkt + random(3))
- else Plot(x1+x, y1+y, Stadt[y,x]);
- end;
- end;
- if Hoefe > 0 then
- for nr:=1 to Hoefe do begin
- Zufall(1,1,x,y);
- plot(x,y,ZMarkt + random(3))
- end
- end;
-
-
- procedure MalMuehle;
- var x, y, nr: byte;
- begin
- for nr:=1 to min(Muehlen[AmZug], 35) do begin
- Zufall(1,1,x,y);
- plot(x,y,ZMuehle)
- end
- end;
-
-
- procedure Baeume;
- var x, y, z, nr: byte;
- begin
- for nr := 1 to min(Land[AmZug] div 1500, 23) do begin
- Zufall(1,1,x,y);
- if random(2) = 0 then
- plot(x,y,Laubbaum)
- else
- plot(x,y,Tanne)
- end;
- nr := min( abs(Geld[AmZug]*XWeite) div 3200000 + 1, XWeite div 32);
- if nr > 0 then begin
- if Geld[Amzug] > 0 then z:=GeldSack
- else z:=SchuldBrief;
- for x:= 0 to nr - 1 do
- Mal(x*2, YWeite - 15, z)
- end;
- nr := min( (Einwohner[AmZug]*XWeite) div 192000, XWeite div 32);
- for x:=0 to nr-1 do
- Mal(XWeite div 16 + x * 2, YWeite-15, Mensch)
- end;
-
- procedure Malen;
- begin
- if Palast[AmZug] > 0 then
- MalPalast;
- if Kathedrale[AmZug] > 0 then
- MalKathedrale;
- if Maerkte[AmZug] > 0 then begin
- MalMarkt;
- if KeinPlatz then Exit
- end;
- if Muehlen[AmZug] > 0 then begin
- MalMuehle;
- if KeinPlatz then Exit
- end;
- Baeume
- end;
-
-
-
-
- (* Zeile 5000- *)
- begin (* Karte *)
- repeat
- GrNameUndJahr;
- Grenzen;
- Malen
- until not KeinPlatz;
- Taste:=ReadKey; if taste=#0 then taste:=readkey;
- ShutGraph
- end;
-
-
- procedure Militaer;
-
- var y,auswahl: byte;
-
- procedure ZeigeZahlen;
- begin
- Clear(1,78,6,10,att[att_milit_s]);
- wrm(6,40,att[att_milit_s],'Sie besitzen: '+Strg(Geld[Amzug])+Taler);
- wrm(8,40,att[att_milit_s],Numerus(Reiter[AmZug],'Schwadron','en')+' Kavallerie');
- wrm(9,40,att[att_milit_s],Numerus(Artillerie[AmZug],'Batterie','n')+' Artillerie');
- wrm(10,40,att[att_milit_s],Numerus(Infanterie[AmZug],'Kompanie','n')+' Infanterie')
- end;
-
- procedure Loesch;
- begin
- Clear(1,78,11,23,att[att_milit_s])
- end;
-
- procedure Rekrutieren(Art: RekrutArt);
-
- var KavPreis, ArtPreis, InfPreis: longint;
- y,Auswahl: byte;
-
- function ZuViele: boolean;
- var Flag: boolean;
- begin
- Flag := (Einwohner[AmZug] / (Soldaten[AmZug] - Soldpflichtig[AmZug] + 1)
- <= 7)
- and (Art = Soldat);
- if Flag then
- Hinweis('Zu viele Soldaten !!!');
- ZuViele := Flag
- end;
-
- procedure Anwerben(Preis: longint; var Truppe: integer);
- begin
- dec( Geld[AmZug], Preis );
- inc( Truppe );
- AnzahlMilitaer;
- if Art = Soldat then
- dec( Einwohner[AmZug], 20)
- else begin
- inc( Soldpflichtig[AmZug], 20);
- VarKFA[AmZug] := (VarKFA[AmZug]*(Soldaten[AmZug]+20.0))
- / Soldaten[AmZug]
- end;
- VarKFA[AmZug] := (20*(VarKFA[AmZug]*(Soldaten[AmZug]/20.0-1)+1))
- / Soldaten[Amzug];
- end;
-
-
-
- (* Zeile 4091- *)
- begin (* Rekrutieren *)
- if not ZuViele then begin
- KavPreis := KavallPreis + 600;
- ArtPreis := ArtillPreis + 400;
- InfPreis := InfantPreis + 200;
- if Art = Soeldner then begin
- inc( KavPreis, KavallPreis div 2 );
- inc( ArtPreis, ArtillPreis div 2 );
- inc( InfPreis, InfantPreis div 2 )
- end;
- Loesch;
- rekrut_m_tx[1]:=copy(rekrut_m_tx[1],1,27)+StrgR(KavPreis,4)+Taler;
- rekrut_m_tx[2]:=copy(rekrut_m_tx[2],1,27)+StrgR(artPreis,4)+Taler;
- rekrut_m_tx[3]:=copy(rekrut_m_tx[3],1,27)+StrgR(infPreis,4)+Taler;
- Auswahl := 4;
- repeat
- ZeigeZahlen;
- waehlen (@rekrut_m,auswahl);
- case Auswahl of
- 1: Anwerben(KavPreis, Reiter[AmZug]);
- 2: Anwerben(ArtPreis, Artillerie[AmZug]);
- 3: Anwerben(InfPreis, Infanterie[AmZug])
- end
- until (auswahl in [0,4]) or ZuViele;
- Loesch
- end
- end;
-
-
- procedure Manoever;
- begin
- dec( Geld[AmZug], 4 * Soldaten[AmZug] + 1000);
- VarKFA[AmZug] := VarKFA[AmZug] + 0.1;
- if cfg.SoundF then sound(40);
- warte(50);
- nosound
- end;
-
- {$I KRIEG}
-
-
- (* Zeile 4000- *)
- begin (* Militär *)
- if Anzahl_Spieler = 1 then
- Hinweis('Wozu ?')
- else begin
- Auswahl:=5;
- repeat
- NameUndJahr (att[att_milit_s]);
- wrm(4,40,att[att_milit_tit],' MILITÄR ');
- repeat
- ZeigeZahlen;
- waehlen(@militaer_m,auswahl);
- case Auswahl of
- 1: Rekrutieren(Soldat);
- 2: Rekrutieren(Soeldner);
- 3: Manoever;
- 4: Krieg
- end;
- TestBankrott
- until (auswahl in [0,4,5]) or Bankrott or KriegGefuehrt
- until krieggefuehrt or (Auswahl<>4)
- end
- end;
-
- (* Zeile 1600- *)
- begin (* Einkäufe *)
- Karte;
- auswahl:=8;
- KriegGefuehrt := false;
- repeat
- NeuesBild;
- repeat
- TestBankrott;
- if not Bankrott then begin
- Bildschirm;
- waehlen (@einkauf_m,auswahl);
- case auswahl of
- 1: MarktKaufen;
- 2: MuehleKaufen;
- 3: PalastKaufen;
- 4: KathKaufen;
- 5: Militaer;
- 6: Spielstand;
- 7: Karte
- end
- end
- until (auswahl=0) or (auswahl>=5) or bankrott or krieggefuehrt
- until (auswahl in [0,8,9]) or bankrott or krieggefuehrt;
- if Auswahl = 9 then Save := true
- end;
-
- procedure ZugEnde;
-
- procedure Addiere(Zahl: real);
- begin
- if Zahl > 17 then Zahl := 17;
- VarFR2 := VarFR2 + int(Zahl)
- end;
-
- procedure NeuerTitel;
- begin
- if (Geld[AmZug] >= 0) and
- ((Rang[AmZug] <= 6) or (Palast[AmZug] >= 16)) and
- ((Rang[AmZug] <= 7) or ((Kathedrale[AmZug] >= 14) and
- (Muehlen[AmZug] >= 15) and
- (Maerkte[AmZug] >= 25))) and
- (not ((Rang[AmZug] = 8) and (Geld[AmZug] < 100000))) then begin
- inc( Rang[AmZug]);
- if Rang[AmZug] = 9 then
- KaiserF := true
- else begin
- box(all_single_box,0,0,78,23,att[att_befoer_s],att[att_befoer_s]);
- wrm(10,40,att[att_befoer_s],'Ihnen wurde ein neuer Titel verliehen.');
- wrm(11,40,att[att_befoer_s],'Sie sind jetzt:');
- wrm(13,40,att[att_befoer_tit],' '+GanzerName(AmZug)+' ');
- if cfg.SoundF then NeuerTitelSound;
- Taste_Druecken
- end
- end
- end;
-
-
-
- (* Zeile 1700- *)
- begin (* Zug Ende 1 *)
- VarFR2 := 0;
- Addiere(Maerkte[AmZug]);
- Addiere(Palast[AmZug]);
- Addiere(Kathedrale[AmZug]);
- Addiere(Muehlen[AmZug]);
- Addiere(Geld[AmZug] / 5000);
- Addiere(Land[AmZug] / 6000);
- Addiere(VarWSFT[AmZug] / 50);
- Addiere(Punkte[AmZug] / 5);
- Addiere(Soldaten[AmZug] / 50);
- Addiere(VarGSTL[AmZug] / 10);
- Addiere(Einwohner[AmZug] / 2000);
- Addiere(Haeuser[AmZug] / 5);
- VarFR := int( VarFR2 / 9);
- if VarFR > 9 then VarFR := 9;
- if Rang[AmZug] < VarFR then
- NeuerTitel;
- EndZeit := MomentZeit - Startzeit;
- {$IFNDEF notime}
- if EndZeit > Rundenzeit then
- Tod[AmZug] := Tod[AmZug] - 1 - random(3)
- {$ENDIF}
- end;
-
-
- procedure TestTod;
- (* Zeile 1775- *)
- begin
- if Zeit >= Tod[AmZug] then
- Spielertod;
- VarKFA[AmZug] := VarKFA[AmZug] * 0.9
- end;
-
-
- procedure Kroenung;
-
- var KName: MaxString;
-
- begin
- Rand (att[att_kaiser_s]);
- wrm(8,40,att[att_kaiser_s],'Der letzte Kaiser des');
- wrm(10,40,att[att_kaiser_s],'HEILIGEN RÖMISCHEN REICHES DEUTSCHER NATION');
- wrm(12,40,att[att_kaiser_s],'war');
- wrm(15,40,att[att_kaiser_tit],AlterKaiser);
- Taste_Druecken;
- KName := Name[AmZug] + ' von ' + Reich[AmZug];
- NeuerKaiser(KName);
- Rand (att[att_kaiser_s]);
- wrm(9,40,att[att_kaiser_s],'ES LEBE');
- wrm(11,40,att[att_kaiser_tit],KName);
- wrm(13,40,att[att_kaiser_s],'KAISER VON GOTTES GNADEN');
- Hinweis('Für ein neues Spiel eine Taste drücken')
- end;
-
-
-
- (* Zeile 1000- *)
- begin (* Spiel *)
- KaiserF := false;
- EndeF := false;
- repeat
- repeat
- inc(AmZug);
- if AmZug > Anzahl_Spieler then begin
- AmZug := 1;
- inc(Zeit)
- end;
- until not((Tod[AmZug] < 1700) or (EnthobenBis[AmZug] > Zeit));
- AnzahlMilitaer;
- BerechneErnte;
- KornUndLand;
- Uebersicht;
- Einnahmen;
- TestBankrott;
- Save := false;
- if not Bankrott then begin
- TestPolitik;
- if not SchlechtePolitik then begin
- Landmangel;
- Einkaeufe;
- if not (Bankrott or KriegGefuehrt) then ZugEnde
- end;
- if not (Bankrott or KriegGefuehrt) then TestTod
- end;
- if save then Speichern
- until KaiserF or EndeF;
- if KaiserF then Kroenung
- end;
-
-
- (*****************************************************************************)
-
- begin (* Hauptprogramm *)
- while true do begin
-
- Neues_oder_altes_Spiel;
- Spiel
-
- end
- end.