|
Nasza Grupa Nasza mała lokalna społeczność żyjąca na Politechnice
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 13:33, 15 Lut 2007 Temat postu: symulator bitew - działa :D |
|
|
czesc 1 - do faz walki :
With Ada.Text_Io;
With Ada.Integer_Text_Io;
With Ada.Characters.Handling;
With Ada.Numerics.Float_Random;
With Ada.Calendar;
Use Ada.Text_Io;
Use Ada.Integer_Text_Io;
Use Ada.Characters.Handling;
Use Ada.Numerics.Float_Random;
Use Ada.Calendar;
Procedure Symulator_Bitew Is
------------------------------------------------------------------------------
------------------------!! deklaracje typow !!--------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
---------------------------typy wpisywane-------------------------------------
------------------------------------------------------------------------------
Type Jednostka Is
Record
--jednostka czyli oddzial;
Rodzaj : Integer Range 1 .. 16;
Liczba : Integer Range 0 .. 100;
Ranga : Integer Range 0 .. 10;
Zabil : Integer Range 0 .. 10000;
End Record;
Type Wojsko Is Array (Positive Range 1 .. 40) Of Jednostka;
Type Armia Is
Record
Dowodca : Integer Range 0 .. 10;
Wojska : Wojsko;
Ilosc : Integer;
End Record;
Type Strona Is Array (Positive Range 1 .. 13) Of Armia;
------------------------------------------------------------------------------
-----------------------------typy transformowane------------------------------
------------------------------------------------------------------------------
Type Oddzial_T Is
Record
Liczba : Integer Range 0 .. 100;
Atak : Integer Range 0 .. 10000;
Obrona : Integer Range 0 .. 10000;
Morale : Integer Range 0 .. 10000;
Zmeczenie : Integer Range 0 .. 10000;
Przydzial : Integer Range 1 .. 13;
Dowodca : Integer Range 0 .. 10;
Ranga : Integer Range 0 .. 10;
Mestwo : Integer Range 0 .. 10;
Zabil : Integer Range 0 .. 10000;
Ucieczka : Boolean;
End Record;
Type Wojsko_T Is Array (Positive Range 1 .. 100) Of Oddzial_T;
Type Wojsko_P Is
Record
Wojsko : Wojsko_T;
Ilosc_Oddz : Integer;
End Record;
Type Szyk Is Array (Positive Range 1 .. 16) Of Wojsko_P;
------------------------------------------------------------------------------
-------------------------------------!! funkcje !!----------------------------
------------------------------------------------------------------------------
Function Max (
X,
Y : Integer)
Return Integer Is
Begin
If X>Y Then
Return X;
Else
Return Y;
End If;
End Max;
------------------------------------------------------------------------------
--------------------------- ucieczka armii -----------------------------------
------------------------------------------------------------------------------
Function Ucieczka (
Strona : Szyk;
Piechota : Boolean;
Lucznicy : Boolean;
Jazda : Boolean;
Katapulty : Boolean;
Statki : Boolean)
Return Boolean Is
Tmp : Integer := 0;
Tmp2 : Integer := 0;
Function Czy_Walczy (
K : Integer;
--funkcja ktora stwierdza czy dany typ jednostek bierze udzial w danym starciu, jesli nie wyklucza go;
Piechota,
Luki,
Jazda,
Katapulty,
Statki : Boolean)
Return Boolean Is
Begin
Case K Is --warunki na typ jednostki
When 1|2|3|6|10 =>
Return Piechota;
When 4|8|9 =>
Return Luki;
When 5|7|11=>
Return Jazda;
When 12 =>
Return Katapulty;
When 13|14|15|16 =>
Return Statki;
When Others =>
Return False;
End Case;
End Czy_Walczy;
Begin
For I In 1..16 Loop
For J In 1..Strona(I).Ilosc_Oddz Loop
If Czy_Walczy(J,Piechota,Lucznicy,Jazda,Katapulty,Statki) Then
If Strona(I).Wojsko(J).Ucieczka Then
Tmp:=Tmp+1;
End If;
Tmp2:=Tmp2+1;
End If;
End Loop;
End Loop;
If Tmp = 0 And Tmp2=0 Then
Return True;
Else
If Float(Tmp)/Float(Tmp2)>0.7 Then
Return True;
Else
Return False;
End If;
End If;
End Ucieczka;
------------------------------------------------------------------------------
--------------------------- czy ktos jeszcze walczy --------------------------
------------------------------------------------------------------------------
Function Czy_Ktos_Jeszcze_Walczy (
Strona : Szyk;
I : Integer)
Return Boolean Is
Logiczna : Boolean := True;
Begin
For J In 1..Strona(I).Ilosc_Oddz Loop
Logiczna := Logiczna And Strona(I).Wojsko(J).Ucieczka;
End Loop;
Return Logiczna;
End Czy_Ktos_Jeszcze_Walczy;
------------------------------------------------------------------------------
--------------------------- wyjatek : Statki kontra piechota -----------------
------------------------------------------------------------------------------
Function Statki_Vs_Piechota (
Bez_Statkow : In Szyk;
Bez_Piechoty : In Szyk)
Return Boolean Is
Logiczna1 : Boolean := False;
Logiczna2 : Boolean := False;
Begin
For I In 1..Bez_Statkow(12).Ilosc_Oddz Loop
If Not Bez_Statkow(12).Wojsko(I).Ucieczka Then
Logiczna1:=True;
End If;
End Loop;
For I In 1..Bez_Piechoty(16).Ilosc_Oddz Loop
If Not Bez_Piechoty(12).Wojsko(I).Ucieczka Then
Logiczna2:=True;
End If;
End Loop;
Return Logiczna1 Or Logiczna2;
End Statki_Vs_Piechota;
------------------------------------------------------------------------------
-------------------------------------!! procedury !!--------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-----------------------------------wczytanie armii----------------------------
------------------------------------------------------------------------------
Procedure Wczytaj_Armie (
Ar : Out Armia;
Index : In Integer) Is
Ranga : Integer := 20;
Ilosc_Pod_Oddz : Integer := 0;
Procedure Wczytaj_Oddzial (
Oddzial : Out Jednostka) Is
Temp : Integer := 0;
Begin
--wybor rodzaju
While Not (Temp In 1..16) Loop
Put_Line(
"Wybierz typ oddzialu: 1-Wiesniacy, 2-Piechurzy, 3-Ciezcy piechurzy");
Put_Line(
"4-Lucznicy,5-Kawalerzysci, 6-Woj Swiatynni, 7-Jezdzcy, 8-Kusznicy");
Put_Line(
"9-Konni Strzelcy, 10-Straznicy, 11-Ciezcy Jezdzcy, 12 -Katapulty");
Put_Line("13-Barki, 14-Karawele, 15-Kogi, 16-Karaki");
Get(Temp);
End Loop;
Oddzial.Rodzaj:=Temp;
--wpisanie licznosci;
Temp:=0;
If Oddzial.Rodzaj = 12 Then
Temp:=50;
Elsif Oddzial.Rodzaj = 13 Then
Temp:=80;
Elsif Oddzial.Rodzaj = 14 Then
Temp := 160;
Elsif Oddzial.Rodzaj = 15 Then
Temp :=230;
Elsif Oddzial.Rodzaj = 16 Then
Temp := 300;
End If;
While Not ( (Temp In 1..100 And Oddzial.Rodzaj=1) Or (Temp In 1..
80 And Oddzial.Rodzaj=2) Or
(Temp In 1..60 And (Oddzial.Rodzaj In 3..10)) Or (Temp In 1..
40 And Oddzial.Rodzaj=11)
Or (Oddzial.Rodzaj In 12..16)) Loop
Put_Line(
"Podaj ilosc jednostek w oddziale: (max 100 dla wiesniakow, 80 dla piechurow ");
Put_Line(
"40 dla ciezkich jezdzcow lub 60 dla innych jednostek");
Get(Temp);
End Loop;
Oddzial.Liczba:=Temp;
--wpisanie rangi;
Temp:=20;
While Not (Temp In 0..10) Loop
Put_Line("Podaj range oddzialu");
Get(Temp);
End Loop;
Oddzial.Ranga:=Temp;
Oddzial.Zabil:=0;
End Wczytaj_Oddzial;
Begin
While Not (Ranga In 0..10) Loop
Put("Podaj range dowodcy ");
Put(Index,2);
Put(" armii:");
New_Line;
Get(Ranga);
End Loop;
Ar.Dowodca :=Ranga;
Ilosc_Pod_Oddz := 0;
While Not (Ilosc_Pod_Oddz In 1..40) Loop
Put_Line("Podaj ilosc oddzialow w armii:");
Get(Ilosc_Pod_Oddz);
End Loop;
Ar.Ilosc:=Ilosc_Pod_Oddz;
For I In 1..Ilosc_Pod_Oddz Loop
Wczytaj_Oddzial(Ar.Wojska(I));
End Loop;
End Wczytaj_Armie;
------------------------------------------------------------------------------
--------procedure przeliczania sil--------------------------------------------
------------------------------------------------------------------------------
Procedure Wylicz_Atak_Obrone (
Atak : Out Integer;
Obrona : Out Integer;
Morale : Out Integer;
Zmeczenie : Out Integer;
Rodzaj : In Integer;
Honor : In Integer;
Pole : In Integer) Is
Bazowy : Integer := 0;
Begin
Atak:=0;
Obrona:=0;
Morale:=0;
Zmeczenie:=0;
Case Rodzaj Is --wprowadzenie podstawowych danych jednostek
When 1 =>
Bazowy:=50+10*Honor;
Morale:=100;
Zmeczenie:=100;
When 2 =>
Bazowy:=60+10*Honor;
Morale:=150;
Zmeczenie:=150;
When 3 =>
Bazowy:=65+10*Honor;
Morale:=200;
Zmeczenie:=150;
When 4 =>
Bazowy:=50+10*Honor;
Morale:=100;
Zmeczenie:=110;
When 5 =>
Bazowy:=70+10*Honor;
Morale:=150;
Zmeczenie:=250;
When 6 =>
Bazowy:=100+20*Honor;
Morale:=300;
Zmeczenie:=250;
When 7 =>
Bazowy:=85+15*Honor;
Morale:=200;
Zmeczenie:=280;
When 8 =>
Bazowy:=70+15*Honor;
Morale:=150;
Zmeczenie:=130;
When 9 =>
Bazowy :=85+15*Honor;
Morale:=150;
Zmeczenie:=280;
When 10 =>
Bazowy := 150+20*Honor;
Morale:=350;
Zmeczenie:=250;
When 11 =>
Bazowy := 170+20*Honor;
Morale:=450;
Zmeczenie:=300;
When 12 =>
Bazowy := 600+10*Honor;
Morale:=30;
Zmeczenie:=100;
When 13 =>
Bazowy := 250+10*Honor;
Morale:=100;
Zmeczenie:=100;
When 14 =>
Bazowy := 340+10*Honor;
Morale:=200;
Zmeczenie:=200;
When 15 =>
Bazowy := 450+15*Honor;
Morale:=250;
Zmeczenie:=300;
When 16 =>
Bazowy := 650+20*Honor;
Morale:=600;
Zmeczenie:=400;
When Others =>
Null;
End Case;
Atak:=Bazowy;
Obrona:=Bazowy;
Case Rodzaj Is --modyfikator pola walki
When 1|2|3|4|6|8|10 =>
If Pole = 2 Then
Atak:=(Atak*4)/5;
Obrona:=(Obrona*6)/5;
Elsif Pole=3 Then
Atak:=(Atak*3)/5;
Obrona:=(Obrona*7)/5;
End If;
When 5|7|9|11 =>
If Pole =2 Then
Atak :=(Atak*3)/5;
Obrona:=(Obrona*6)/5;
Elsif Pole = 3 Then
Atak := (Atak*2)/5;
Obrona := (Obrona*7)/5;
Elsif Pole = 4 Then
Atak := (Atak*4)/5;
Obrona := (Obrona*9)/10;
Elsif Pole = 5 Then
If Rodzaj=5 Then
Atak :=65;
Obrona :=65;
ElsIf Rodzaj=7 Then
Atak :=80;
Obrona :=80;
ElsIf Rodzaj=9 Then
Atak :=70;
Obrona :=70;
ElsIf Rodzaj=11 Then
Atak :=170;
Obrona :=170;
End If;
Elsif Pole=6 Then
Atak := Atak/5;
Obrona := Obrona/5;
End If;
When 12 =>
If Pole = 4 Then
Atak := (Atak*7)/5;
End If;
Obrona := 20;
When 13|14|15|16 =>
If (Pole In 1..4) Or (Pole=7) Then
Atak:=0;
Obrona:=0;
End If;
When Others =>
Null;
End Case;
End Wylicz_Atak_Obrone;
------------------------------------------------------------------------------
--------------------------detransformacja-------------------------------------
------------------------------------------------------------------------------
Procedure Detransformacja (
Formacja : In Szyk;
Deformacja : Out Strona) Is
Type Ilosc_Chwilowa Is Array (Positive Range 1 .. 13) Of Integer;
Tablica : Ilosc_Chwilowa := (1 .. 13 => 0);
Begin
For I In 1..16 Loop
For J In 1..Formacja(I).Ilosc_Oddz Loop
Tablica(Formacja(I).Wojsko(J).Przydzial):=Tablica(Formacja(I).Wojsko(J).Przydzial)+1;
Deformacja(Formacja(I).Wojsko(J).Przydzial).Dowodca := Formacja(I).Wojsko(J).Dowodca;
Deformacja(Formacja(I).Wojsko(J).Przydzial).Wojska(Tablica(Formacja(I).Wojsko(J).Przydzial)).Rodzaj:=I;
Deformacja(Formacja(I).Wojsko(J).Przydzial).Wojska(Tablica(Formacja(I).Wojsko(J).Przydzial)).Liczba:=Formacja(I).Wojsko(J).Liczba;
Deformacja(Formacja(I).Wojsko(J).Przydzial).Wojska(Tablica(Formacja(I).Wojsko(J).Przydzial)).Ranga:=-Max(-10,-(Formacja(I).Wojsko(J).Ranga+Formacja(I).Wojsko(J).Mestwo));
Deformacja(Formacja(I).Wojsko(J).Przydzial).Wojska(Tablica(Formacja(I).Wojsko(J).Przydzial)).Zabil:=Formacja(I).Wojsko(J).Zabil;
End Loop;
End Loop;
For I In 1..13 Loop
Deformacja(I).Ilosc := Tablica(I);
End Loop;
End Detransformacja;
------------------------------------------------------------------------------
--------------------------wypisz oddzialy-------------------------------------
------------------------------------------------------------------------------
Procedure Wypisz (
Formacja : In Strona;
File : In Out File_Type) Is
Function Rodzaj (
Liczba : In Integer)
Return String Is
Begin
Case Liczba Is
When 1 =>
Return "wiesniacy";
When 2=>
Return "piechurzy";
When 3=>
Return "ciezcy piechurzy";
When 4=>
Return "lucznicy";
When 5=>
Return "kawaleria";
When 6=>
Return "wojownicy swiatynni";
When 7=>
Return "jezdzcy";
When 8=>
Return "kusznicy";
When 9=>
Return "konni lucznicy";
When 10=>
Return "straznicy";
When 11 =>
Return "ciezcy jezdzcy";
When 12 =>
Return "katapulty";
When 13=>
Return "barki";
When 14=>
Return "karawele";
When 15=>
Return "kogi";
When 16=>
Return "karaki";
When Others=>
Return " ";
End Case;
End Rodzaj;
Begin
For I In 1..13 Loop
Put(File,"-");
Put(File,I,2);
Put(File," armia:");
Put(File,"Dowodca armii w randze: ");
Put(File,Formacja(I).Dowodca,2);
new_line(file,1);
For J In 1..Formacja(I).Ilosc Loop
Put(File," Oddzial : "&Rodzaj(Formacja(I).Wojska(J).Rodzaj)&" w liczbie");
Put(File,Formacja(I).Wojska(J).Liczba,3);
Put(File,", o randze: ");
Put(File,Formacja(I).Wojska(J).Ranga,2);
Put(File,", w bitwie scieli glow: ");
Put(File,Formacja(I).Wojska(J).Zabil,4);
New_Line(File,1);
End Loop;
New_Line(File,2);
End Loop;
End Wypisz;
------------------------------------------------------------------------------
--------------------------wylicz ilosc wojska---------------------------------
------------------------------------------------------------------------------
Procedure Wylicz_Wojsko (
Formacja : In Szyk;
Piechota : Out Integer;
Lucznicy : Out Integer;
Jezdzcy : Out Integer;
Katapulty : Out Integer;
Statki : Out Integer) Is
Begin
Piechota:=0;
Lucznicy:=0;
Jezdzcy:=0;
Katapulty:=0;
Statki:=0;
For I In 1..3 Loop
For J In 1..Formacja(I).Ilosc_Oddz Loop
If Not Formacja(I).Wojsko(J).Ucieczka Then
Piechota:=Piechota+Formacja(I).Wojsko(J).Liczba;
End If;
End Loop;
End Loop;
For J In 1..Formacja(4).Ilosc_Oddz Loop
If Not Formacja(4).Wojsko(J).Ucieczka Then
Lucznicy:=Lucznicy+Formacja(4).Wojsko(J).Liczba;
End If;
End Loop;
For J In 1..Formacja(5).Ilosc_Oddz Loop
If Not Formacja(5).Wojsko(J).Ucieczka Then
Jezdzcy:=Jezdzcy+Formacja(5).Wojsko(J).Liczba;
End If;
End Loop;
For J In 1..Formacja(6).Ilosc_Oddz Loop
If Not Formacja(6).Wojsko(J).Ucieczka Then
Piechota:=Piechota+Formacja(6).Wojsko(J).Liczba;
End If;
End Loop;
For J In 1..Formacja(7).Ilosc_Oddz Loop
If Not Formacja(7).Wojsko(J).Ucieczka Then
Jezdzcy:=Jezdzcy+Formacja(7).Wojsko(J).Liczba;
End If;
End Loop;
For I In 8..9 Loop
For J In 1..Formacja(I).Ilosc_Oddz Loop
If Not Formacja(I).Wojsko(J).Ucieczka Then
Lucznicy:=Lucznicy+Formacja(I).Wojsko(J).Liczba;
End If;
End Loop;
End Loop;
For J In 1..Formacja(10).Ilosc_Oddz Loop
If Not Formacja(10).Wojsko(J).Ucieczka Then
Piechota:=Piechota+Formacja(10).Wojsko(J).Liczba;
End If;
End Loop;
For J In 1..Formacja(11).Ilosc_Oddz Loop
If Not Formacja(11).Wojsko(J).Ucieczka Then
Jezdzcy:=Jezdzcy+Formacja(11).Wojsko(J).Liczba;
End If;
End Loop;
For J In 1..Formacja(12).Ilosc_Oddz Loop
If Not Formacja(12).Wojsko(J).Ucieczka Then
Katapulty:=Katapulty+Formacja(12).Wojsko(J).Liczba;
End If;
End Loop;
For I In 13..16 Loop
For J In 1..Formacja(I).Ilosc_Oddz Loop
If Not Formacja(I).Wojsko(J).Ucieczka Then
Statki:=Statki+Formacja(I).Wojsko(J).Liczba;
End If;
End Loop;
End Loop;
End Wylicz_Wojsko;
------------------------------------------------------------------------------
--------------------------walka oddzialow-------------------------------------
------------------------------------------------------------------------------
Procedure Walka (
Agresor : In Out Oddzial_T;
Obronca : In Out Oddzial_T) Is
Wsp_Atakujacego : Float := Float (Agresor.Atak) / Float (Agresor.Atak + Obronca.Obrona);
G : Generator;
Tmp : Float;
Tmp2 : Integer;
Begin
If Not Agresor.Ucieczka Then
Reset(G);
Tmp:=Wsp_Atakujacego*(4.5+Random(G))/5.0;
If (Tmp/Wsp_Atakujacego)>(5.48/5.0) Then --warunki na wyjatkowa postawe w walce
Agresor.Mestwo:=-Max(-(Agresor.Mestwo+1),-10);
Elsif (Tmp/Wsp_Atakujacego)<(4.52/5.0) Then
Obronca.Mestwo:=-Max(-10,-(Obronca.Mestwo+1));
End If;
Tmp2:=Integer(Float(Agresor.Liczba)*Tmp); --straty w ludziach
Obronca.Liczba:=Max(Obronca.Liczba-Tmp2,0); -- podliczenie stanu oddzialu
Agresor.Zmeczenie:=Max(Agresor.Zmeczenie-(Tmp2/6),0);--zmeczenie agresora
Obronca.Morale:=Max(Obronca.Morale-(Tmp2/4),0);--oslabienie morale
Agresor.Zabil:=-(Max(-Obronca.Liczba,-Tmp2))+Agresor.Zabil; --ilosc ofiar oddzialu
If Agresor.Zmeczenie < 30 Then --warunek na ucieczke
Agresor.Ucieczka:=True;
Elsif Obronca.Morale < 40 Or Obronca.Liczba=0 Then --warunek na ucieczke
Obronca.Ucieczka := True;
End If;
End If;
End Walka;
------------------------------------------------------------------------------
--------------------------Losowanie oddzialu----------------------------------
------------------------------------------------------------------------------
Procedure Losowanie (
Armia : In Szyk;
Suma : In Integer;
Piechota : In Boolean;
Luki : In Boolean;
Jazda : In Boolean;
Katapulty : In Boolean;
Statki : In Boolean;
I : Out Integer;
J : Out Integer) Is
Tmp : Integer := 0;
Mala_Suma : Integer := 0;
G : Generator;
Flaga : Boolean := False;
Function Czy_Niebroniona (
K : Integer;
--funkcja ktora stwierdza czy dany typ jednostek bierze udzial w danym starciu, jesli nie wyklucza go;
Piechota,
Luki,
Jazda,
Katapulty,
Statki : Boolean)
Return Boolean Is
Begin
Case K Is --warunki na typ jednostki
When 1|2|3|6|10 =>
Return Piechota;
When 4|8|9 =>
Return Luki;
When 5|7|11=>
Return Jazda;
When 12 =>
Return Katapulty;
When 13|14|15|16 =>
Return Statki;
When Others =>
Return False;
End Case;
End Czy_Niebroniona;
Begin
Reset(G);
While Not Flaga Loop --petla do uzyskania jednostki sposrod bioracych udzial w walce
--losowanie typu jednostki;
Tmp:=Integer(Random(G)*Float(Suma)+0.5);
Mala_Suma:=0;
For K In 1..16 Loop
If (Tmp > Mala_Suma) And (Tmp<=(Mala_Suma+Armia(K).Ilosc_Oddz)) And --ten warunek zapewnia wywazony wybor rodzaju jednostki
Czy_Niebroniona(K,Piechota,Luki,Jazda,Katapulty,Statki) Then --(kazda jednostka ma taka sama szanse wziac udzial w walce);
I:=K;
Flaga:=True;
End If;
Mala_Suma:=Mala_Suma+Armia(K).Ilosc_Oddz;
End Loop;
End Loop;
--losowanie numeru jednostki;
J:=Integer(Random(G)*Float(Armia(I).Ilosc_Oddz)+0.5);
End Losowanie;
------------------------------------------------------------------------------
--------------------------Wybor celu------------------------------------------
------------------------------------------------------------------------------
Procedure Wybierz_Cel (
Obronca : In Out Szyk;
Suma_Obrony : In Integer;
Typ_Cel : Out Integer;
Numer_Cel : Out Integer;
Piechota : In Boolean;
Luki : In Boolean;
Jazda : In Boolean;
Katapulty : In Boolean;
Statki : In Boolean) Is
G : Generator;
Logiczna : Boolean := False;
Begin
For I In 1..16 Loop
Logiczna:=Logiczna Or Czy_Ktos_Jeszcze_Walczy(Obronca,I);
End Loop;
If (Not Logiczna) Then
Numer_Cel:=0;
Typ_Cel:=0;
End If;
While Logiczna Loop
Reset(G);
Losowanie(Obronca,Suma_Obrony,Piechota,Luki,Jazda,Katapulty,--losowanie jednostki
Statki,Typ_Cel,Numer_Cel);
If Not Obronca(Typ_Cel).Wojsko(Numer_Cel).Ucieczka Then --warunek wyjscia poza petle, oddzial nie moze uciekac
Exit;
End If;
End Loop;
End Wybierz_Cel;
-------------------------------------------------------------------------------
Procedure Wybierz_Cel_Oblezenie (
Obronca : In Out Szyk;
Suma_Obrony : In Integer;
Mur : In Out Float;
--zmienna pomagajaca w wyliczeniu szans na trafienie w mury zamku
Brama : In Out Integer;
--wytrzymalosc bramy
Typ_Cel : Out Integer;
Numer_Cel : Out Integer) Is
Klasa_Celu : Integer;
G : Generator;
Logiczna : Boolean := True;
Begin
Reset(G);
Typ_Cel:=0;
Numer_Cel:=0;
Loop
Klasa_Celu:=Integer(Random(G)*(16.0+Mur)+0.5);
If Klasa_Celu >16 Then --efekt strzalu w zamek
If Random(G)>0.6 Then --40% szansa na trafienie kamieniem w zamek
Brama:=Max(Brama-Integer(Random(G)*40.0),0); --generacja uszkodzen
If Brama <1 Then--warunek zniszczenia bramy
Mur:=0.0;
End If;
End If;
Exit;
Else
For I In 1..16 Loop
Logiczna:=Logiczna And Czy_Ktos_Jeszcze_Walczy(Obronca,I);
End Loop;
If Logiczna Then
Losowanie(Obronca,Suma_Obrony,True,True,True,True,True, --losowanie dowolnego oddzialu przy trafieniu
Typ_Cel,Numer_Cel);
If Not Obronca(Typ_Cel).Wojsko(Numer_Cel).Ucieczka Then --warunkiem wyjsca za petle jest ze oddzial nie ucieka
Exit;
End If;
Elsif (Not Logiczna) And Mur=0.0 Then
Numer_Cel:=0;
Typ_Cel:=0;
End If;
End If;
End Loop;
End Wybierz_Cel_Oblezenie;
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 13:34, 15 Lut 2007 Temat postu: czesc 2 : fazy walki |
|
|
------------------------------------------------------------------------------
--------------------------!! Fazy Walki !!------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-------------------------- Faza Ostrzalu Katapult ----------------------------
------------------------------------------------------------------------------
Procedure Ostrzal_Katapult (
Agresor : In Out Szyk;
Obronca : In Out Szyk;
Brama : In Out Integer;
Pole_Bitwy : In Integer) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Mur : Float;
G : Generator;
Begin
Reset(G);
If (Pole_Bitwy = 7 Or Pole_Bitwy =9) And Brama >0 Then --warunek na istnienie zamku (lub jego gotowosci obronnej)
Mur := 12.0;
Else
Mur:=0.0;
End If;
For I In 1..16 Loop --wyliczenie ilosci oddzialow obroncy
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(12).Ilosc_Oddz Loop --petla ostrzalu wszystkimi katapultami
Wybierz_Cel_Oblezenie(Obronca,Suma_Obrony,Mur,Brama,Typ_Cel,
Numer_Cel);
If (Not (Typ_Cel=0)) And (Random(G) > 0.7) Then --30% szansa na trafienie oddzialu
Walka(Agresor(12).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Katapult;
------------------------------------------------------------------------------
-------------------------- Faza Ostrzalu Lucznikow ---------------------------
------------------------------------------------------------------------------
Procedure Ostrzal_Z_Lukow (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop --wyliczenie ilosci oddzialow obroncy
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(4).Ilosc_Oddz Loop --ataki lucznikow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(4).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(8).Ilosc_Oddz Loop --ataki kusznikow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(8).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(9).Ilosc_Oddz Loop--ataki konnych strzelcow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,--celem jest wszystko procz okretow
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(9).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Z_Lukow;
------------------------------------------------------------------------------
-------------------------- Faza Ostrzalu z Karakow ---------------------------
------------------------------------------------------------------------------
Procedure Ostrzal_Karakow_Obl (
Agresor : In Out Szyk;
Obronca : In Out Szyk;
Brama : In Out Integer;
Pole_Bitwy : In Integer) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Mur : Float;
G : Generator;
Begin
Reset(G);
If Pole_Bitwy In 8..9 And Brama >0 Then --trafienie w brame
Mur := 12.0;
Else
Mur:=0.0;
End If;
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(16).Ilosc_Oddz Loop --ostrzal katapultami
Wybierz_Cel_Oblezenie(Obronca,Suma_Obrony,Mur,Brama,Typ_Cel,
Numer_Cel);
If (Not (Typ_Cel=0)) And Random(G)>0.80 Then --20% szans na trafienie
Walka(Agresor(16).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Karakow_Obl;
------------------------------------------------------------------------------
-------------------- Ostrzal z Karakow na statki -----------------------------
------------------------------------------------------------------------------
Procedure Ostrzal_Karakow_Statki (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
G : Generator;
Begin
Reset(G);
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(16).Ilosc_Oddz Loop --ostrzal katapult z karakami
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,False,False,True); --celem sa okrety
If Random(G)>0.85 And Not(Numer_Cel=0)Then --15% szans na trafienie okretu
Walka(Agresor(16).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Karakow_Statki;
------------------------------------------------------------------------------
-------------------- Ostrzal z Karakow na katapulty --------------------------
------------------------------------------------------------------------------
Procedure Ostrzal_Karakow_Katapulty (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
G : Generator;
Begin
Reset(G);
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(16).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,False,True,False);--celem ataku sa katapulty
If Random(G)>0.80 And Not (Numer_Cel=0) Then --20% szans na trafienie katapulty
Walka(Agresor(16).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Karakow_Katapulty;
------------------------------------------------------------------------------
-------------------------- Faza Ostrzalu z Katapult do statkow ---------------
------------------------------------------------------------------------------
Procedure Ostrzal_Statkow (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
G : Generator;
Begin
Reset(G);
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(12).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,False,False,True); --celem ataku sa statki
If Random(G)>0.75 And Not(Numer_Cel=0) Then --25% szans na trafienie okretu
Walka(Agresor(12).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Ostrzal_Statkow;
------------------------------------------------------------------------------
-------------------------- Faza Zwarcia Piechoty -----------------------------
------------------------------------------------------------------------------
Procedure Zwarcie_Piechota (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop --wylicznie ilosci oddzialow obroncy
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(1).Ilosc_Oddz Loop --atak wiesniakow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(1).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(2).Ilosc_Oddz Loop --atak piechurow(pikinierow)
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(2).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(3).Ilosc_Oddz Loop --atak ciezkich piechurow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(3).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(6).Ilosc_Oddz Loop --atak wojownikow swiatynnych
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(6).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(10).Ilosc_Oddz Loop --atak straznikow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(10).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Zwarcie_Piechota;
------------------------------------------------------------------------------
-------------------------- Faza Zwarcia Jazdy --------------------------------
------------------------------------------------------------------------------
Procedure Zwarcie_Jazda (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(5).Ilosc_Oddz Loop --atak kawalerii
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(5).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(7).Ilosc_Oddz Loop --atak jezdzcow
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(7).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(11).Ilosc_Oddz Loop -- atak ciezkiej kawalerii
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(11).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Zwarcie_Jazda;
------------------------------------------------------------------------------
-------------------------- Faza Zwarcia Jazdy z Piechota ---------------------
------------------------------------------------------------------------------
Procedure Zwarcie_Jazda_Z_Piech (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(5).Ilosc_Oddz Loop --kawaleria
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False, --celem jest piechota
False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(5).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(7).Ilosc_Oddz Loop --jezdzcy
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,
False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(7).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(11).Ilosc_Oddz Loop --ciezcy jezdzcy
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,False,
False,False,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(11).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Zwarcie_Jazda_Z_Piech;
------------------------------------------------------------------------------
-------------------------- Faza Natarcia jazdy na Pikinierow -----------------
------------------------------------------------------------------------------
Procedure Natarcia_Na_Piki (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Numer_Cel : Integer;
Procedure Wybierz_Cel_Piki (
--osobna procedura starcia z pikinierami;
Obronca : In Out Szyk;
Numer_Cel : Out Integer) Is
G : Generator;
Tmp : Integer;
Begin
Reset(G);
If Czy_Ktos_Jeszcze_Walczy(Obronca,2) Then
Loop --petla wybierajca pierwszy losowy nie uciekajacy oddzial;
Tmp:=Integer(Random(G)*Float(Obronca(2).Ilosc_Oddz)+0.5);
If Not Obronca(2).Wojsko(Tmp).Ucieczka Then
Numer_Cel:=Tmp;
Exit;
End If;
End Loop;
Else
Numer_Cel:=0;
End If;
End Wybierz_Cel_Piki;
Begin
For I In 1..Agresor(5).Ilosc_Oddz Loop --kawaleria
Wybierz_Cel_Piki(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(5).Wojsko(I),Obronca(2).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(7).Ilosc_Oddz Loop --jezdzcy
Wybierz_Cel_Piki(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(7).Wojsko(I),Obronca(2).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(11).Ilosc_Oddz Loop -- ciezcy jezdzcy
Wybierz_Cel_Piki(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(11).Wojsko(I),Obronca(2).Wojsko(Numer_Cel));
End If;
End Loop;
End Natarcia_Na_Piki;
------------------------------------------------------------------------------
-------------------------- Faza Natarcia Statkow ----------------------------
------------------------------------------------------------------------------
Procedure Natarcie_Morskie (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(13).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,
False,False,True);
If Not (Numer_Cel=0) Then
Walka(Agresor(13).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(14).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,
False,False,True);
If Not (Numer_Cel=0) Then
Walka(Agresor(14).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(15).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,
False,False,True);
If Not (Numer_Cel=0) Then
Walka(Agresor(15).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(16).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,False,False,
False,False,True);
If Not (Numer_Cel=0) Then
Walka(Agresor(16).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Natarcie_Morskie;
------------------------------------------------------------------------------
-------------------------- Faza Frontalnego ataku ---------------------------
------------------------------------------------------------------------------
Procedure Atak_Frontowy (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For K In 1..11 Loop
For I In 1..Agresor(K).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,
True,True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(K).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Loop;
End Atak_Frontowy;
------------------------------------------------------------------------------
-------------------------- Faza Oskrzydlenia --------------------------------
------------------------------------------------------------------------------
Procedure Oskrzydlenie (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(5).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(5).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(7).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(7).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(11).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(11).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Oskrzydlenie;
------------------------------------------------------------------------------
-------------------------- Faza Podjazdu ------------------------------------
------------------------------------------------------------------------------
Procedure Podjazd_Konnych (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For I In 1..Agresor(9).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,True,
True,False);
If Not (Numer_Cel=0) Then
Walka(Agresor(9).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Podjazd_Konnych;
------------------------------------------------------------------------------
-------------------------- Faza Zestrzelenia Podjazdu ------------------------
------------------------------------------------------------------------------
Procedure Strzelaj_Podjazd (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Numer_Cel : Integer;
Procedure Wybierz_Cel_Jezdziec (
Obronca : In Out Szyk;
Numer_Cel : Out Integer) Is
G : Generator;
Tmp : Integer;
Logiczna : Boolean := Czy_Ktos_Jeszcze_Walczy (Obronca, 9);
Begin
Reset(G);
Numer_Cel:=0;
While Logiczna Loop
Tmp:=Integer(Random(G)*Float(Obronca(9).Ilosc_Oddz)+0.5);
If Not Obronca(9).Wojsko(Tmp).Ucieczka Then
Numer_Cel:=Tmp;
Exit;
End If;
End Loop;
End Wybierz_Cel_Jezdziec;
Begin
For I In 1..Agresor(4).Ilosc_Oddz Loop
Wybierz_Cel_Jezdziec(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(4).Wojsko(I),Obronca(9).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(8).Ilosc_Oddz Loop
Wybierz_Cel_Jezdziec(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(8).Wojsko(I),Obronca(9).Wojsko(Numer_Cel));
End If;
End Loop;
For I In 1..Agresor(9).Ilosc_Oddz Loop
Wybierz_Cel_Jezdziec(Obronca,Numer_Cel);
If Not (Numer_Cel=0) Then
Walka(Agresor(9).Wojsko(I),Obronca(9).Wojsko(Numer_Cel));
End If;
End Loop;
End Strzelaj_Podjazd;
------------------------------------------------------------------------------
-------------------------- Faza Abordazu ------------------------------------
------------------------------------------------------------------------------
Procedure Abordaz (
Agresor : In Out Szyk;
Obronca : In Out Szyk) Is
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Begin
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
End Loop;
For K In 1..11 Loop
For I In 1..Agresor(K).Ilosc_Oddz Loop
Wybierz_Cel(Obronca,Suma_Obrony,Typ_Cel,Numer_Cel,True,True,
False,False,True);
If Not (Numer_Cel=0) Then
Walka(Agresor(K).Wojsko(I),Obronca(Typ_Cel).Wojsko(Numer_Cel));
End If;
End Loop;
End Loop;
End Abordaz;
------------------------------------------------------------------------------
-------------------------- Faza Ataku na Brame -------------------------------
------------------------------------------------------------------------------
Procedure Atak_Na_Brame (
Agresor : In Out Szyk;
Obronca : In Out Szyk;
Brama : In Out Integer;
Pole_Bitwy : In Integer) Is
Typ_Agresor : Integer;
Numer_Agresor : Integer;
Suma_Agresor : Integer := 0;
Typ_Cel : Integer;
Numer_Cel : Integer;
Suma_Obrony : Integer := 0;
Mur : Float;
Begin
If (Pole_Bitwy = 7 Or Pole_Bitwy =9) And Brama >0 Then
Mur := 42.0;
Else
Mur:=0.0;
End If;
For I In 1..16 Loop
Suma_Obrony:=Obronca(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
Wybierz_Cel(Agresor,Suma_Agresor,Typ_Agresor,Numer_Agresor,True,
False,False,False,False);
Wybierz_Cel_Oblezenie(Obronca,Suma_Obrony,Mur,Brama,Typ_Cel,
Numer_Cel);
If Not (Typ_Cel=0) Then
Walka(Agresor(Typ_Agresor).Wojsko(Numer_Agresor),Obronca(Typ_Cel).
Wojsko(Numer_Cel));
End If;
End Atak_Na_Brame;
------------------------------------------------------------------------------
-----------------------------!! operator turowy !!----------------------------
------------------------------------------------------------------------------
Procedure Tura (
Agresor : In Out Szyk;
General_A : In String;
Ucieczka_A : In Out Boolean;
Obronca : In Out Szyk;
General_O : In String;
Ucieczka_O : In Out Boolean;
Akcja : In Out Boolean;
Forteca : In Out Integer;
Pole_Bitewne : In Integer;
Kolejka : In Out Integer;
Raport : In Out File_Type) Is
Piechota_A,
Piechota_O,
Lucznicy_A,
Lucznicy_O,
Jezdzcy_A,
Jezdzcy_O,
Katapulty_A,
Katapulty_O,
Statki_A,
Statki_O : Integer := 0;
Znak : Character := 'y';
Znak_Tmp : Character := 'a';
Walcza : Boolean;
Flaga : Boolean := True; --brak poprawnie wybranej akcji
Statki : Boolean;
Katapulty : Boolean;
Begin
If Kolejka > 0 Then
Walcza:=True;
Else
Walcza := False;
End If;
Wylicz_Wojsko(Agresor,Piechota_A,Lucznicy_A,Jezdzcy_A,Katapulty_A,Statki_A);
Wylicz_Wojsko(Obronca,Piechota_O,Lucznicy_O,Jezdzcy_O,Katapulty_O,Statki_O);
Put("Panie generale "&General_A&", mamy: ");
Put(Piechota_A,5);
Put(" piechurow");
New_Line;
Put(Raport,"Moj Panie, mamy ");
Put(Raport,Piechota_A,5);
Put(Raport," piechurow");
New_Line(Raport,1);
Put(Lucznicy_A,5);
Put(Raport,Lucznicy_A,5);
Put(" lucznikow ");
Put(Raport," lucznikow ");
Put(Jezdzcy_A,5);
Put(Raport,Jezdzcy_A,5);
Put(" jezdzcow");
Put(Raport," jezdzcow");
New_Line;
New_Line(Raport,1);
Put(Katapulty_A,5);
Put(Raport,Katapulty_A,5);
Put(" katapult ");
Put(Raport," katapult ");
Put(Statki_A,5);
Put(Raport,Statki_A,5);
Put(" statkow");
Put(Raport," statkow");
New_Line;
New_Line(Raport,1);
Put("Moj Panie, nasz przeciwnik, general "&General_O&", ma: ");
Put(Piechota_O,5);
Put(" piechurow");
New_Line;
Put(Raport,"Moj Panie, nasz przeciwnik ma ");
Put(Raport,Piechota_O,5);
Put(Raport," piechurow");
New_Line(Raport,1);
Put(Lucznicy_O,5);
Put(Raport,Lucznicy_O,5);
Put(" lucznikow ");
Put(Raport," lucznikow ");
Put(Jezdzcy_O,5);
Put(Raport,Jezdzcy_O,5);
Put(" jezdzcow");
Put(Raport," jezdzcow");
New_Line;
New_Line(Raport,1);
Put(Katapulty_O,5);
Put(Raport,Katapulty_O,5);
Put(" katapult ");
Put(Raport," katapult ");
Put(Statki_O,5);
Put(Raport,Statki_O,5);
Put(" statkow");
Put(Raport," statkow");
New_Line;
New_Line(Raport,1);
-----------------------------------------------------------------------------
------------------------- Wybor akcji agresora -----------------------------
-----------------------------------------------------------------------------
--nadanie kolejki
If To_Lower(Znak) = 'w' Then
Walcza := True;
End If;
If Walcza Then
Kolejka := Kolejka +1;
End If;
While Flaga Loop --petla wyboru mozliwej akcji
-- Wybor akcji
Loop
Znak:='y';
Put_Line("Generale "&General_A&", wybierz akcje ktora chcesz przeprowadzic:");
Put_Line("Ruszyc Wojskiem w boj - W (jedna akcja nie zaleznie od strony)");
Put_Line("Dokonac odwrotu - Q");
Put_Line("Zaproponuj honorowy remis - E");
New_Line;
Put_Line("Atak Frontowy - A");
Put_Line("Natarcie piechoty - P");
Put_Line("Ostrzal z lukow - O");
Put_Line("Natarcie konnicy - N ");
Put_Line("Wyslac podjazd - J");
Put_Line("Wystrzelic z katapult - K");
Put_Line("Natarcie statkow - S");
Put_Line("Ostrzelac z karakow - R");
Put_Line("Dokonac abordazu - B");
Put_Line("Taranowac brame - T");
Put_Line("Czekac - C");
Get_Immediate(Znak);
If To_Lower(Znak)='a' Or To_Lower(Znak)='p' Or To_Lower(Znak)='o' Or To_Lower(Znak)='k'
Or To_Lower(Znak)='j' Or To_Lower(Znak)='n' Or To_Lower(Znak)='s' Or To_Lower(Znak)='r'
Or To_Lower(Znak)='b' Or To_Lower(Znak)='t' Or To_Lower(Znak)='w' Or To_Lower(Znak)='q'
Or To_Lower(Znak) = 'c'Or To_Lower(Znak)='e' Then
Exit;
End If;
End Loop;
Flaga := False;
--werfyfikacja akcji przez pole bitwy
Case To_Lower(Znak) Is
When 'a'|'p'|'o'|'n'|'j'|'k' =>
If Pole_Bitewne = 6 Or Pole_Bitewne = 8 Then
Put_Line("Moj Panie ... ale przeciez walczymy na morzu");
New_Line;
Flaga :=True;
End If;
When 's'|'r'|'b' =>
If (Pole_Bitewne In 1..4) Or Pole_Bitewne = 7 Then
Put_Line("Moj Panie ... ale przeciez walczymy na ladzie");
New_Line;
Flaga:=True;
End If;
When 't' =>
If Not (Pole_Bitewne In 7..9) Then
Put_Line("Moj Panie ... przeciez tu nie ma warowni do zdobycia");
New_Line;
Flaga:=True;
Elsif Pole_Bitewne = 6 Then
Put_Line("Moj Panie ... ale przeciez walczymy na morzu");
New_Line;
Flaga :=True;
End If;
When 'w' =>
If Walcza Then
Put_Line("Moj Panie ... rozkaz wymarszu do bitwy już wydales");
New_Line;
Flaga:=True;
End If;
When Others =>
Null;
End Case;
--weryfikacja przez fortece
If Pole_Bitewne In 7..9 And Forteca > 0 And (Not Flaga) Then
Case To_Lower(Znak) Is
When 'a'|'p'|'o'|'n'|'j'|'b'|'s' =>
Put_Line("Moj Panie ... wrog chowa się za murami i nie mozemy się z nim zetrzec");
New_Line;
Flaga:=True;
When Others =>
Null;
End Case;
End If;
--weryfikacja przez kolejke
If Not Flaga Then
Case To_Lower(Znak) Is
When 'a'|'p'|'b'|'t' =>
If Kolejka < 4 Or (Kolejka < 6 And Pole_Bitewne = 3) Then
Put_Line("Moj Panie ... nasze wojsko jeszcze nie ma w zasiegu naszego wroga");
New_Line;
Flaga:=True;
End If;
When 'o'|'n'|'j'|'s' =>
If Kolejka < 2 Or (Kolejka < 4 And Pole_Bitewne =3) Then
Put_Line("Moj Panie ... nasze wojsko jeszcze nie ma w zasiegu naszego wroga");
New_Line;
Flaga:=True;
End If;
When Others =>
Null;
End Case;
End If;
-- weryfikacja prze ilosc wojska
If Not Flaga Then
Case To_Lower(Znak) Is
When 'p' =>
If Piechota_A =0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'a'|'b'|'t' =>
If Piechota_A+Lucznicy_A+Jezdzcy_A=0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'o' =>
If Lucznicy_A=0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'n' =>
If Jezdzcy_A=0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'j' =>
If Not (Agresor(9).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor,9)) Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'k' =>
If Katapulty_A =0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 's' =>
If Statki_A =0 Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When 'r' =>
If Not (Agresor(16).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor,16)) Then
Put_Line("Moj Panie ... nie mamy odpowiednich oddzialow wojska by wypelnic ten rozkaz");
New_Line;
Flaga:=True;
End If;
When Others =>
Null;
End Case;
End If;
------- rozpatrzenie typu ostrzalu --------
--katapulty
If To_Lower(Znak)='k' And Statki_O >0 And (Pole_Bitewne In 5..6 Or Pole_Bitewne = 9) Then
Put_Line("Czy mam kazac celowac w statki wroga czy moga strzelac dowolnie?");
Znak_Tmp:='a';
While Not(To_Lower(Znak_Tmp)='t' Or To_Lower(Znak_Tmp) ='n') Loop
Put_Line("<t-tak w statki, n - nie, niech bija jak chca");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp) = 't' Then
Statki :=True;
Else
Statki := False;
End If;
Elsif To_Lower(Znak)='k' And Not(Statki_O >0 And (Pole_Bitewne In 5..6 Or Pole_Bitewne = 9))Then
Statki:=False;
End If;
--karaki
If To_Lower(Znak)='r' Then
If Statki_O >0 And Katapulty_O > 0 Then
Put_Line("Czy mam kazac celowac w statki wroga, jego katapulty czy dowolnie ?");
Znak_Tmp:='q';
While Not (To_Lower(Znak_Tmp) In 'a'..'c') Loop
Put_Line("<a-niech strzelaja w statki, b-niech strzelaja w katapulty, c-niech bija jak chca");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='a' Then
Statki:=True;
Katapulty:=False;
Elsif To_Lower(Znak_Tmp) = 'b' Then
Statki := False;
Katapulty := True;
Else
Statki:=False;
Katapulty :=False;
End If;
Elsif Statki_O >0 And Not(Katapulty_O > 0) Then
Put_Line("Czy mam kazac celowac w statki wroga czy dowolnie ?");
Znak_Tmp:='q';
While Not (To_Lower(Znak_Tmp) = 'a'Or To_Lower(Znak_Tmp) ='c') Loop
Put_Line("<a-niech strzelaja w statki, c-niech bija jak chca");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='a' Then
Statki:=True;
Katapulty:=False;
Elsif To_Lower(Znak_Tmp) = 'b' Then
Statki := False;
Katapulty := True;
Else
Statki:=False;
Katapulty :=False;
End If;
Elsif Not(Statki_O >0) And (Katapulty_O > 0) Then
Put_Line("Czy mam kazac celowac w katapulty wroga czy dowolnie ?");
Znak_Tmp:='q';
While Not (To_Lower(Znak_Tmp) = 'b'Or To_Lower(Znak_Tmp) ='c') Loop
Put_Line("< b-niech strzelaja w katapulty, c-niech bija jak chca");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='a' Then
Statki:=True;
Katapulty:=False;
Elsif To_Lower(Znak_Tmp) = 'b' Then
Statki := False;
Katapulty := True;
Else
Statki:=False;
Katapulty :=False;
End If;
Else
Statki:=False;
Katapulty:=False;
Put_Line("Nie ma zadnego celu specjalnie dla katapult, beda strzelac dowolnie");
End If;
End If;
If Not Flaga Then
Put_Line("Ku chwale ojczyznie, Panie Generale ...");
Put_Line("DALEJ OFERMY PAN GENERAL WYDAL ROZKAZ !!!!");
End If;
End Loop;
-----------------------------------------------------------------------------
---------------------- Realizacja akcji agresora ---------------------------
-----------------------------------------------------------------------------
Case To_Lower(Znak) Is
When 'w' =>
Kolejka:=Kolejka+1;
When 'q' =>
Ucieczka_A:=True;
When 'e' =>
Znak_Tmp:='y';
While Not(Znak_Tmp In 'a'..'b') Loop
Put_Line("--Generale "&General_O&" przeciwnik proponuje nam remis i odwrot obydwu armii");
Put_Line("<a-przyjmijmy to male zwyciestwo, b-nieukladamy się z wrogiem>");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='a' Then
Ucieczka_A:=True;
Ucieczka_O:=True;
End If;
When 'a' =>
Put_Line("-- Generale "&General_A&" nasze wojska atakuja wroga na calej linii ...");
Put_Line(Raport,"-- Generale "&General_A&" nasze wojska atakuja wroga na calej linii ...");
Atak_Frontowy(Agresor,Obronca);
When 'p' =>
Put_Line("-- generale "&General_A&" nasza piechota naciera na wroga");
Put_Line(Raport,"-- generale "&General_A&" nasza piechota naciera na wroga");
Zwarcie_Piechota(Agresor,Obronca);
When 'o' =>
Put_Line("--generale "&General_A&" nasi lucznicy ostrzelali wroga");
Put_Line(Raport,"--generale "&General_A&" nasi lucznicy ostrzelali wroga");
Ostrzal_Z_Lukow(Agresor,Obronca);
When 'n' =>
Put_Line("-- generale "&General_A&" nasza jazda naciera na wroga");
Put_Line(Raport,"-- generale "&General_A&" nasza jazda naciera na wroga");
Put_Line("generale "&General_O&" wroga jazda naciera");
Put_Line(Raport,"generale "&General_O&" wroga jazda naciera");
Loop --petla reakcji
Znak_Tmp:='y';
While Not (To_Lower(Znak_Tmp) In 'a'..'c') Loop
Put_Line("Co robic? <a-ustawic szyk pikinierow, b-niech piechota broni wojska,c-ratujcie co się da>");
Get_Immediate(Znak_Tmp);
End Loop;
If Obronca(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca,2) And To_Lower(Znak_Tmp)='a' Then
Exit;
Elsif Piechota_O >0 And To_Lower(Znak_Tmp)='b' Then
Exit;
Elsif To_Lower(Znak_Tmp)='c' Then
Exit;
End If;
End Loop;
Declare
G : Generator;
Begin
Reset(G);
If To_Lower(Znak_Tmp)='a' And Random(G)>0.6 Then
Put_Line("Generale "&General_O&" udalo się ustawic mur z pikinierow");
Put_Line("Niech nasi wrogowie się na niego teraz nadzieja");
Put_Line(Raport,"Generale "&General_O&" udalo się ustawic mur z pikinierow");
Put_Line(Raport,"Niech nasi wrogowie się na niego teraz nadzieja");
Natarcia_Na_Piki(Agresor,Obronca);
Elsif To_Lower(Znak_Tmp)='b' And Random(G)>0.4 Then
Put_Line("Generale "&General_O&" udalo się ustawic piechurow w szyku");
Put_Line(Raport,"Generale "&General_O&" udalo się ustawic piechurow w szyku");
Zwarcie_Jazda_Z_Piech(Agresor,Obronca);
Else
Put_Line("Generale "&General_O&" w naszych szeregach panuje chaos");
Put_Line(Raport,"Generale "&General_O&" w naszych szeregach panuje chaos");
Zwarcie_Jazda(Agresor,Obronca);
End If;
End;
When 'j' =>
Put_Line("-- generale "&General_A&" nasi jazdzcy ostrzeliwuja wroga");
Put_Line(Raport,"-- generale "&General_A&" nasi jazdzcy ostrzeliwuja wroga");
Put_Line("generale "&General_O&" wrodzy jazdzcy ostrzeliwuja nas");
Put_Line(Raport,"generale "&General_O&" wrodzy jazdzcy ostrzeliwuja nas");
Podjazd_Konnych(Agresor,Obronca);
Put_Line("Mamy odpowiedziec ogniem?");
Znak_Tmp:='y';
While Not (To_Lower(Znak_Tmp) In 'a'..'b') Loop
Put_Line("<a-tak,b-nie>");
Get_Immediate(Znak_Tmp);
End Loop;
Declare
G : Generator;
Begin
Reset(G);
If To_Lower(Znak_Tmp)='a' And Random(G) > 0.7 Then
Strzelaj_Podjazd(Obronca,Agresor);
Put_Line("generale "&General_O&" ostrzelilismy wroga zanim zawrocil swoich jezdzcow");
Put_Line(Raport,"generale "&General_O&" ostrzelilismy wroga zanim zawrocil swoich jezdzcow");
Akcja:=True;
End If;
End;
When 'k' =>
If Statki Then
Put_Line("Rozpoczelismy ostrzal okretow wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy ostrzal okretow wroga panie generale"&General_A);
Ostrzal_Statkow(Agresor,Obronca);
Else
Put_Line("Rozpoczelismy ostrzal wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy ostrzal wroga panie generale"&General_A);
Ostrzal_Katapult(Agresor,Obronca,Forteca,Pole_Bitewne);
End If;
When 's' =>
Put_Line("Panie generale "&General_A&" nasze okrety starly się z okretami wroga");
Put_Line(Raport,"Panie generale "&General_A&" nasze okrety starly się z okretami wroga");
Natarcie_Morskie(Agresor,Obronca);
When 'r' =>
If Statki Then
Put_Line("Rozpoczelismy ostrzal okretow wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy ostrzal okretow wroga panie generale"&General_A);
Ostrzal_Karakow_Statki(Agresor,Obronca);
Elsif Katapulty Then
Put_Line("Rozpoczelismy ostrzal katapult wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy ostrzal katapult wroga panie generale"&General_A);
Ostrzal_Karakow_Katapulty(Agresor,Obronca);
Else
Put_Line("Rozpoczelismy ostrzal wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy ostrzal wroga panie generale"&General_A);
Ostrzal_Karakow_Obl(Agresor,Obronca,Forteca,Pole_Bitewne);
End If;
When 'b' =>
Put_Line("Rozpoczelismy abordaz na okrety wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy abordaz na okrety wroga panie generale"&General_A);
Abordaz(Agresor,Obronca);
When 't' =>
Put_Line("Rozpoczelismy atak na brame zamku wroga panie generale"&General_A);
Put_Line(Raport,"Rozpoczelismy atak na brame zamku wroga panie generale"&General_A);
Atak_Na_Brame(Agresor,Obronca,Forteca,Pole_Bitewne);
When Others =>
Null;
End Case;
End Tura;
Post został pochwalony 0 razy
Ostatnio zmieniony przez dyschemist dnia Czw 13:37, 15 Lut 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 13:36, 15 Lut 2007 Temat postu: czesc 3 - właściwy program - chronologie 1-6 |
|
|
------------------------------------------------------------------------------
-----------------------------!! zmienne !!------------------------------------
------------------------------------------------------------------------------
Gen_Obr : String (1 .. 30);
N : Integer;
Gen_Agr : String (1 .. 30);
M : Integer;
Obronca : Strona;
Ilosc_A_Obr : Integer;
Agresor : Strona;
Ilosc_A_Agr : Integer;
Pole_Bitewne : Integer;
Premia : Integer;
Forteca : Integer;
Passive_Fort : Integer;
Obronca_T : Szyk;
Agresor_T : Szyk;
Tmp : Integer;
Data : String (1 .. 10) := (1 .. 10 => '_');
------------------------------------------------------------------------------
-------------------------!! Program glowny !!---------------------------------
------------------------------------------------------------------------------
Begin
Loop
Put_Line("Podaj nazwe marszalka armii obroncow");
Get_Line(Gen_Obr,N);
Put_Line("Podaj nazwe marszalka armii agresora");
Get_Line(Gen_Agr,M);
----wczytanie armii obroncow
Ilosc_A_Obr:=0;
While Not (Ilosc_A_Obr In 1..13) Loop
Put_Line("Podaj ilosc armii obroncow <max 13>");
Get(Ilosc_A_Obr);
End Loop;
For I In 1..Ilosc_A_Obr Loop
Wczytaj_Armie(Obronca(I),I);
End Loop;
----wczytanie armii agresorow
Ilosc_A_Agr:=0;
While Not (Ilosc_A_Agr In 1..13) Loop
Put_Line("Podaj ilosc armii obroncow <max 13>");
Get(Ilosc_A_Agr);
End Loop;
For I In 1..Ilosc_A_Agr Loop
Wczytaj_Armie(Agresor(I),I);
End Loop;
------------------------------------------------------------------------------
--------------------------------------Pole bitewne----------------------------
------------------------------------------------------------------------------
New_Line(10);
Put_Line("Na jakim obszarze toczy się bitwa?");
Pole_Bitewne:=0;
While Not (Pole_Bitewne In 1..9) Loop
Put_Line("1-Rowniny");
Put_Line("2-Wzgorza");
Put_Line("3-Gory");
Put_Line("4-Wawoz");
Put_Line("5-Nabrzeze");
Put_Line("6-Morze");
Put_Line("7-Napasc na zamek");
Put_Line("8-Szturm morski");
Put_Line("9-Szturm synchroniczny");
Get(Pole_Bitewne);
End Loop;
If Pole_Bitewne In 1..4 Or Pole_Bitewne = 7 Then
For I In 1..Ilosc_A_Obr Loop
For J In 1..Obronca(I).Ilosc Loop
If Obronca(I).Wojska(J).Rodzaj In 13..16 Then
Put(
"Ale tu wystepuja okrety morskie ?? nie beda one mialy sily bojowej !!");
New_Line;
Exit;
End If;
End Loop;
End Loop;
End If;
------------------------------------------------------------------------------
----------------------------------Premie--------------------------------------
------------------------------------------------------------------------------
If Pole_Bitewne In 7..9 Then
Tmp:=-1;
While Not (Tmp In 0..10) Loop
Put_Line("Podaj poziom warowni:");
Get(Tmp);
End Loop;
Premia:=(-5-Tmp);
Forteca:=200*Tmp;
Else
Forteca:=0;
Put_Line("Czy ktoras ze stron zyskuje przewage nad druga?");
Premia:=10;
While Not (Premia In -5..5) Loop
Put_Line("Obronca - Agresor");
Put_Line("-5 -4 ..0.. 4 5");
Get(Premia);
End Loop;
End If;
------------------------------------------------------------------------------
------------------------------zerowanie ilosci--------------------------------
------------------------------------------------------------------------------
For I In 1..16 Loop
Obronca_T(I).Ilosc_Oddz :=0;
Agresor_T(I).Ilosc_Oddz :=0;
End Loop;
------------------------------------------------------------------------------
-------------------------------Transformowanie--------------------------------
------------------------------------------------------------------------------
Declare
Atak : Integer;
Obrona : Integer;
Atak_J : Integer;
Obrona_J : Integer;
Morale_J : Integer;
Zmeczenie_J : Integer;
Mnoznik : Integer;
Begin
For K In 1..16 Loop
For I In 1..Ilosc_A_Obr Loop
For J In 1..Obronca(I).Ilosc Loop
If Obronca(I).Wojska(J).Rodzaj = K Then
Wylicz_Atak_Obrone(Atak_J,Obrona_J,Morale_J,Zmeczenie_J,
K,Obronca(I).Wojska(J).Ranga,Pole_Bitewne);
Case Obronca(I).Dowodca Is
When 0 =>
Mnoznik:=10;
When 1 =>
Mnoznik:=11;
When 2 =>
Mnoznik:=13;
When 3 =>
Mnoznik:=15;
When 4 =>
Mnoznik:=16;
When 5 =>
Mnoznik:=18;
When 6 =>
Mnoznik:=20;
When 7 =>
Mnoznik:=23;
When 8 =>
Mnoznik:=25;
When 9 =>
Mnoznik:=27;
When 10 =>
Mnoznik:=30;
When Others =>
Mnoznik:=10;
End Case;
Atak:=(Atak_J*Mnoznik)/10;
Obrona:=(Obrona_J*Mnoznik)/10;
Atak:=(Atak*(50+Premia))/50;
Obrona:= (Obrona*(50-Premia))/50;
Obronca_T(K).Ilosc_Oddz:=Obronca_T(K).Ilosc_Oddz+1;
Obronca_T(K).Wojsko(Obronca_T(K).Ilosc_Oddz):=(
Liczba => Obronca (I).Wojska (J).Liczba,
Atak => Atak,
Obrona => Obrona,
Morale => Morale_J,
Zmeczenie => Zmeczenie_J,
Przydzial => I,
Dowodca => Obronca (I).Dowodca,
Ranga => Obronca (I).Wojska (J).Ranga,
Mestwo => 0,
Zabil => 0,
Ucieczka => False);
End If;
End Loop;
End Loop;
End Loop;
End;
Declare
Atak : Integer;
Obrona : Integer;
Atak_J : Integer;
Obrona_J : Integer;
Morale_J : Integer;
Zmeczenie_J : Integer;
Mnoznik : Integer;
Begin
For K In 1..16 Loop
For I In 1..Ilosc_A_Obr Loop
For J In 1..Agresor(I).Ilosc Loop
If Agresor(I).Wojska(J).Rodzaj = K Then
Wylicz_Atak_Obrone(Atak_J,Obrona_J,Morale_J,Zmeczenie_J,
K,Agresor(I).Wojska(J).Ranga,Pole_Bitewne);
Case Agresor(I).Dowodca Is
When 0 =>
Mnoznik:=10;
When 1 =>
Mnoznik:=11;
When 2 =>
Mnoznik:=13;
When 3 =>
Mnoznik:=15;
When 4 =>
Mnoznik:=16;
When 5 =>
Mnoznik:=18;
When 6 =>
Mnoznik:=20;
When 7 =>
Mnoznik:=23;
When 8 =>
Mnoznik:=25;
When 9 =>
Mnoznik:=27;
When 10 =>
Mnoznik:=30;
When Others =>
Mnoznik:=10;
End Case;
Atak:=(Atak_J*Mnoznik)/10;
Obrona:=(Obrona_J*Mnoznik)/10;
Atak:=(Atak*(50+Premia))/50;
Obrona:= (Obrona*(50+Premia))/50;
Agresor_T(K).Ilosc_Oddz:=Agresor_T(K).Ilosc_Oddz+1;
Agresor_T(K).Wojsko(Agresor_T(K).Ilosc_Oddz):=(
Liczba => Agresor (I).Wojska (J).Liczba,
Atak => Atak,
Obrona => Obrona,
Morale => Morale_J,
Zmeczenie => Zmeczenie_J,
Przydzial => I,
Dowodca => Agresor (I).Dowodca,
Ranga => Agresor (I).Wojska (J).Ranga,
Mestwo => 0,
Zabil => 0,
Ucieczka => False);
End If;
End Loop;
End Loop;
End Loop;
End;
------------------------------------------------------------------------------
------------------------------ Wylicz date -----------------------------------
------------------------------------------------------------------------------
Declare
Zegar : Time := Clock;
Dzien : Integer := Day (Zegar);
Miesiac : Integer := Month (Zegar);
Rok : Integer := Year (Zegar);
Begin
Data(1):=Character'Val(48+(Dzien/10));
Data(2):=Character'Val(48+Dzien-10*(Dzien/10));
Data(3):='_';
Data(4):=Character'Val(48+(Miesiac/10));
Data(5):=Character'Val(48+Miesiac-10*(Miesiac/10));
Data(6):='_';
Data(7):=Character'Val(48+(Rok/1000));
Data(8):=Character'Val(48+((Rok-1000*(Rok/1000))/100));
Data(9):=Character'Val(48+((Rok-1000*(Rok/1000)-100*((Rok-1000*(Rok/
1000))/100))/10));
Data(10):=Character'Val(48+Rok-1000*(Rok/1000)-100*((Rok-1000*(Rok/
1000))/100)-10*((Rok-1000*(Rok/1000)-100*((Rok-1000*(
Rok/1000))/100))/10));
End;
------------------------------------------------------------------------------
-----------------------------!! Faza Bitewna !!-------------------------------
------------------------------------------------------------------------------
Declare
Raport_A : File_Type;
Raport_O : File_Type;
Raport : File_Type;
Znak : Character := 'a';
G : Generator;
Temp : Float;
Pierwszy_Raz : Boolean := True;
Begin
Reset(G);
New_Line;
Put_Line(
"Czy bitwa ma byc symulowana czy gracze chca prowadzic bitwe samemu");
While Not (To_Lower(Znak)='t' Or To_Lower(Znak)='n') Loop
Put_Line(" T - symuluj, N - prowadz");
Get_Immediate(Znak);
End Loop;
If To_Lower(Znak)='t' Then
Case Pole_Bitewne Is
------------------------------------------------------------------------------
----------------------------- Bitwa Ladowa -----------------------------------
------------------------------------------------------------------------------
When 1|2|3|4 =>
-- podjazd
If Agresor_T(8).Ilosc_Oddz > 0 Then
Podjazd_Konnych(Agresor_T,Obronca_T);
End If;
Temp:=Random(G);
If Temp >0.8 And ( Agresor_T(4).Ilosc_Oddz >0 Or Agresor_T(
8).Ilosc_Oddz >0 Or Agresor_T(9).Ilosc_Oddz >0) Then
Strzelaj_Podjazd(Obronca_T,Agresor_T);
End If;
--faza manewrowa
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Pole_Bitewne = 3 Then --dodatkowy ostrzal katapult
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
If Pole_Bitewne = 2 Or Pole_Bitewne = 3 Then -- dodatkowe ostrzaly z lukow
For I In 2..Pole_Bitewne Loop
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
End Loop;
End If;
-- petla bitewna
While (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) Loop
--faza zwarcia
If (Agresor_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (Agresor_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or
(Agresor_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3)) Or (Agresor_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or
(Agresor_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10)) Then
Zwarcie_Piechota(Agresor_T,Obronca_T); --atak piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (Obronca_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or
(Obronca_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3)) Or (Obronca_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or
(Obronca_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10)) Then
Zwarcie_Piechota(Obronca_T,Agresor_T); --riposta piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
-- kontra
Temp:=Random(G); --kontra czyli ktora ze stron wykonuje dodatkowy atak zwarcia
If Temp>0.85 Then
If (Agresor_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (Agresor_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or
(Agresor_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3)) Or (Agresor_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or
(Agresor_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10)) Then
Zwarcie_Piechota(Agresor_T,Obronca_T); --atak piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Elsif Temp <0.15 Then
If (Obronca_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (Obronca_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or
(Obronca_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3)) Or (Obronca_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or
(Obronca_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10)) Then
Zwarcie_Piechota(Obronca_T,Agresor_T); --riposta piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
End If;
If (Obronca_T(4).Ilosc_Oddz>0 And --ostrzal lukow obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,4)) Or
(Obronca_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,8)) Or
(Obronca_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,9)) Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
--atak konnicy
If (Obronca_T(5).Ilosc_Oddz >0 And -- atak konnicy;
Czy_Ktos_Jeszcze_Walczy(Obronca_T,5)) Or (
Obronca_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,7))Or(Obronca_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Obronca_T,11))Then
Temp:=Random(G);
If Obronca_T(2).Ilosc_Oddz >0 And --ustawienie szyku pikinierow
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2) And (Temp >
0.7 Or Pierwszy_Raz) Then
Natarcia_Na_Piki(Agresor_T,Obronca_T);
Elsif (Temp In 0.5..0.7 Or Pierwszy_Raz) And (--ustawienie prowizorycznej obrony
(Obronca_T(1).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,1))
Or (Obronca_T(2).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2))
Or (Obronca_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,3))
Or (Obronca_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,6))
Or (Obronca_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,10))) Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Zwarcie_Jazda(Agresor_T,Obronca_T); --zaskoczenie atakiem jazdy
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
--walka na calej dlugosc frontu
Atak_Frontowy (Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
If (Agresor_T(4).Ilosc_Oddz>0 And --ostrzal lukow agresora
Czy_Ktos_Jeszcze_Walczy(Agresor_T,4)) Or
(Agresor_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,8)) Or
(Agresor_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,9)) Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(4).Ilosc_Oddz>0 And --ostrzal lukow obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,4)) Or
(Obronca_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,8)) Or
(Obronca_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,9)) Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(5).Ilosc_Oddz >0 And --proba ataku ze skrzydla obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,5)) Or (
Obronca_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,7))Or(Obronca_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Obronca_T,11))Then
Temp := Random(G);
If Agresor_T(2).Ilosc_Oddz >0 And --ustawiono szyk pikinierow
Czy_Ktos_Jeszcze_Walczy(Agresor_T,2) And Temp >
0.7 Then
Natarcia_Na_Piki(Obronca_T,Agresor_T);
Elsif ((Agresor_T(1).Ilosc_Oddz>0 And --zwykla obrona szyku
Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (
Agresor_T(2).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or (
Agresor_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,3))
Or (Agresor_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or (
Agresor_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,10))) And
Temp In 0.5..0.7 Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Oskrzydlenie(Obronca_T,Agresor_T); --zaskoczenie wobec ataku od skrzydla
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Atak_Frontowy(Agresor_T,Obronca_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
Atak_Frontowy(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
If (Agresor_T(5).Ilosc_Oddz >0 And --proba ataku ze skrzydla przez agresora
Czy_Ktos_Jeszcze_Walczy(Agresor_T,5)) Or (
Agresor_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,7))Or(Agresor_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Agresor_T,11))Then
Temp := Random(G);
If Obronca_T(2).Ilosc_Oddz >0 And --ustawiono szyk z pikinierow
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2) And Temp >
0.7 Then
Natarcia_Na_Piki(Agresor_T,Obronca_T);
Elsif ((Obronca_T(1).Ilosc_Oddz>0 And --zwykla obrona szyku
Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (
Obronca_T(2).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or (
Obronca_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,3))
Or (Obronca_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or (
Obronca_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,10))) And
Temp In 0.5..0.7 Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Oskrzydlenie(Obronca_T,Agresor_T); --zakoczenie atakiem ze skrzydla
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Atak_Frontowy(Obronca_T,Agresor_T);
Pierwszy_Raz:=False; --zmiana zmiennej odpowiadajacej za lad obrony
End Loop;
-- ucieczka
Declare
T_Agr,
N_Agr,
T_Obr,
N_Obr : Integer;
Suma_Obrony : Integer := 0;
Suma_Agresor : Integer := 0;
Begin
--wyliczenie sum oddzialow obroncy i agresora
For I In 1..16 Loop
Suma_Obrony:=Obronca_T(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor_T(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
If Ucieczka(Agresor_T,True,True,True,True,False) And (Not Ucieczka(Obronca_T,True,True,True,True,False))Then --ucieka agresor, obronca goni
For I In 1..3 Loop
Wybierz_Cel(Obronca_T,Suma_Obrony,T_Obr,N_Obr,
True,False,True,False,False);
Losowanie(Agresor_T,Suma_Agresor,
True,True,True,True,False,T_Agr,N_Agr);
Walka(Obronca_T(T_Obr).Wojsko(N_Obr),Agresor_T(
T_Agr).Wojsko(N_Agr));
End Loop;
Elsif Ucieczka(Obronca_T,True,True,True,True,False) And (Not Ucieczka(Agresor_T,True,True,True,True,False)) Then --ucieka obronca, agresor goni
For I In 1..3 Loop
Losowanie(Obronca_T,Suma_Obrony,
True,True,True,True,False,T_Obr,N_Obr);
Wybierz_Cel(Agresor_T,Suma_Agresor,T_Agr,N_Agr,
True,False,True,False,False);
Walka(Agresor_T(T_Agr).Wojsko(N_Agr),Obronca_T(
T_Obr).Wojsko(N_Obr));
End Loop;
Else --obydwie strony się wycofuja
Null;
End If;
End;
------------------------------------------------------------------------------
----------------------------- Bitwa na wybrzezu ------------------------------
------------------------------------------------------------------------------
When 5 =>
Declare
Logiczna1 : Boolean := False;
Logiczna2 : Boolean := False;
Begin
-------------------Faza Ladowa------------------------------------------
-- podjazd
If Agresor_T(8).Ilosc_Oddz > 0 Then
Podjazd_Konnych(Agresor_T,Obronca_T);
End If;
Temp:=Random(G);
If Temp >0.8 And ((Agresor_T(4).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,4))
Or (Agresor_T(8).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,8))
Or (Agresor_T(9).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,9))) Then
Strzelaj_Podjazd(Obronca_T,Agresor_T);
End If;
--faza manewrowa
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) And
Obronca_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12) Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) And
Agresor_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,12)Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) And
Obronca_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12)Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
-- petla bitewna
While (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) Loop
--faza zwarcia
If (Agresor_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (Agresor_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or
(Agresor_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3)) Or (Agresor_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or
(Agresor_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10)) Then
Zwarcie_Piechota(Agresor_T,Obronca_T); --atak piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (Obronca_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or
(Obronca_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3)) Or (Obronca_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or
(Obronca_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10)) Then
Zwarcie_Piechota(Obronca_T,Agresor_T); --riposta piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
-- kontra
Temp:=Random(G); --kontra czyli ktora ze stron wykonuje dodatkowy atak zwarcia
If Temp>0.85 Then
If (Agresor_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (Agresor_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or
(Agresor_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3)) Or (Agresor_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or
(Agresor_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10)) Then
Zwarcie_Piechota(Agresor_T,Obronca_T); --atak piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Elsif Temp <0.15 Then
If (Obronca_T(1).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (Obronca_T(2).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or
(Obronca_T(3).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3)) Or (Obronca_T(6).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or
(Obronca_T(10).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10)) Then
Zwarcie_Piechota(Obronca_T,Agresor_T); --riposta piechoty agresora
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
End If;
If (Obronca_T(4).Ilosc_Oddz>0 And --ostrzal lukow obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,4)) Or
(Obronca_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,8)) Or
(Obronca_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,9)) Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
--atak konnicy
If (Obronca_T(5).Ilosc_Oddz >0 And -- atak konnicy;
Czy_Ktos_Jeszcze_Walczy(Obronca_T,5)) Or (
Obronca_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,7))Or(Obronca_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Obronca_T,11))Then
Temp:=Random(G);
If Obronca_T(2).Ilosc_Oddz >0 And --ustawienie szyku pikinierow
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2) And (Temp >
0.7 Or Pierwszy_Raz) Then
Natarcia_Na_Piki(Agresor_T,Obronca_T);
Elsif (Temp In 0.5..0.7 Or Pierwszy_Raz) And (--ustawienie prowizorycznej obrony
(Obronca_T(1).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,1))
Or (Obronca_T(2).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2))
Or (Obronca_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,3))
Or (Obronca_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,6))
Or (Obronca_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,10))) Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Zwarcie_Jazda(Agresor_T,Obronca_T); --zaskoczenie atakiem jazdy
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
--walka na calej dlugosc frontu
Atak_Frontowy (Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
If (Agresor_T(4).Ilosc_Oddz>0 And --ostrzal lukow agresora
Czy_Ktos_Jeszcze_Walczy(Agresor_T,4)) Or
(Agresor_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,8)) Or
(Agresor_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,9)) Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(4).Ilosc_Oddz>0 And --ostrzal lukow obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,4)) Or
(Obronca_T(8).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,8)) Or
(Obronca_T(9).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,9)) Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
If (Obronca_T(5).Ilosc_Oddz >0 And --proba ataku ze skrzydla obroncy
Czy_Ktos_Jeszcze_Walczy(Obronca_T,5)) Or (
Obronca_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,7))Or(Obronca_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Obronca_T,11))Then
Temp := Random(G);
If Agresor_T(2).Ilosc_Oddz >0 And --ustawiono szyk pikinierow
Czy_Ktos_Jeszcze_Walczy(Agresor_T,2) And Temp >
0.7 Then
Natarcia_Na_Piki(Obronca_T,Agresor_T);
Elsif ((Agresor_T(1).Ilosc_Oddz>0 And --zwykla obrona szyku
Czy_Ktos_Jeszcze_Walczy(Agresor_T,1)) Or (
Agresor_T(2).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,2)) Or (
Agresor_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,3))
Or (Agresor_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,6)) Or (
Agresor_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,10))) And
Temp In 0.5..0.7 Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Oskrzydlenie(Obronca_T,Agresor_T); --zaskoczenie wobec ataku od skrzydla
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Atak_Frontowy(Agresor_T,Obronca_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
Atak_Frontowy(Obronca_T,Agresor_T);
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
If (Agresor_T(5).Ilosc_Oddz >0 And --proba ataku ze skrzydla przez agresora
Czy_Ktos_Jeszcze_Walczy(Agresor_T,5)) Or (
Agresor_T(7).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Agresor_T,7))Or(Agresor_T(
11).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(
Agresor_T,11))Then
Temp := Random(G);
If Obronca_T(2).Ilosc_Oddz >0 And --ustawiono szyk z pikinierow
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2) And Temp >
0.7 Then
Natarcia_Na_Piki(Agresor_T,Obronca_T);
Elsif ((Obronca_T(1).Ilosc_Oddz>0 And --zwykla obrona szyku
Czy_Ktos_Jeszcze_Walczy(Obronca_T,1)) Or (
Obronca_T(2).Ilosc_Oddz >0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,2)) Or (
Obronca_T(3).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,3))
Or (Obronca_T(6).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,6)) Or (
Obronca_T(10).Ilosc_Oddz>0 And
Czy_Ktos_Jeszcze_Walczy(Obronca_T,10))) And
Temp In 0.5..0.7 Then
Zwarcie_Jazda_Z_Piech(Agresor_T,Obronca_T);
Else
Oskrzydlenie(Obronca_T,Agresor_T); --zakoczenie atakiem ze skrzydla
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Exit;
End If;
End If;
Atak_Frontowy(Obronca_T,Agresor_T);
Pierwszy_Raz:=False; --zmiana zmiennej odpowiadajacej za porzadek w obronie;
End Loop;
-------------------Faza Morska------------------------------------------
While Not(Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Loop
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16) ) And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Ostrzal_Karakow_Statki(Obronca_T,Agresor_T);
End If;
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16) ) And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Ostrzal_Karakow_Statki(Agresor_T,Obronca_T);
End If;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Logiczna1 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Agresor_T,Obronca_T);
End If;
If Logiczna2 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Obronca_T,Agresor_T);
End If;
Logiczna1:=False;
Logiczna2:=False;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Logiczna1 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Agresor_T,Obronca_T);
End If;
If Logiczna2 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Obronca_T,Agresor_T);
End If;
End Loop;
------- poscig ladowy ------------------------------------------
Declare
T_Agr,
N_Agr,
T_Obr,
N_Obr : Integer;
Suma_Obrony : Integer := 0;
Suma_Agresor : Integer := 0;
Begin
--wyliczenie sum oddzialow obroncy i agresora
For I In 1..16 Loop
Suma_Obrony:=Obronca_T(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor_T(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
If Ucieczka(Agresor_T,True,True,True,True,False) And (Not Ucieczka(Obronca_T,True,True,True,True,False))Then --ucieka agresor, obronca goni
For I In 1..3 Loop
Wybierz_Cel(Obronca_T,Suma_Obrony,T_Obr,N_Obr,
True,False,True,False,False);
Losowanie(Agresor_T,Suma_Agresor,
True,True,True,True,False,T_Agr,N_Agr);
Walka(Obronca_T(T_Obr).Wojsko(N_Obr),Agresor_T(
T_Agr).Wojsko(N_Agr));
End Loop;
Elsif Ucieczka(Obronca_T,True,True,True,True,False) And (Not Ucieczka(Agresor_T,True,True,True,True,False)) Then --ucieka obronca, agresor goni
For I In 1..3 Loop
Losowanie(Obronca_T,Suma_Obrony,
True,True,True,True,False,T_Obr,N_Obr);
Wybierz_Cel(Agresor_T,Suma_Agresor,T_Agr,N_Agr,
True,False,True,False,False);
Walka(Agresor_T(T_Agr).Wojsko(N_Agr),Obronca_T(
T_Obr).Wojsko(N_Obr));
End Loop;
Else --obydwie strony się wycofuja
Null;
End If;
End;
-------------------Faza poscigu morskiego-----------------------------------------
Logiczna1:=False;
Logiczna2:=False;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Ucieczka(Agresor_T,False,False,False,False,True) And (Not Ucieczka(Obronca_T,False,False,False,False,True))And Logiczna2 Then --ucieka agresor, obronca goni
Natarcie_Morskie(Obronca_T,Agresor_T);
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16) ) Then
Ostrzal_Karakow_Statki(Obronca_T,Agresor_T);
End If;
Elsif Ucieczka(Obronca_T,False,False,False,False,True) And (Not Ucieczka(Agresor_T,False,False,False,False,True)) And Logiczna1 Then --ucieka obronca, agresor goni
Natarcie_Morskie(Agresor_T,Obronca_T);
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16) ) Then
Ostrzal_Karakow_Statki(Agresor_T,Obronca_T);
End If;
Else --obydwie strony się wycofuja
Null;
End If;
--------------------- Walka Morsko-ladowa ------------------------------
While (Not Ucieczka(Obronca_T,False,False,False,False,True) And (Not Ucieczka(Agresor_T,True,True,True,True,False))) Loop
-- obsluga wyjatku bitwy;
If Not Statki_Vs_Piechota(Agresor_T,Obronca_T) Then
Exit;
End If;
--ostrzal wubrzeza
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16) ) Then
Ostrzal_Karakow_Katapulty(Obronca_T,Agresor_T);
End If;
--ostrzal morza
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16) ) Then
Ostrzal_Statkow(Agresor_T,Obronca_T);
End If;
End Loop;
While (Not Ucieczka(Obronca_T,True,True,True,True,False) And (Not Ucieczka(Agresor_T,False,False,False,False,True))) Loop
-- obsluga wyjatku bitwy;
If Not Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Exit;
End If;
--ostrzal wubrzeza
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16)) Then
Ostrzal_Karakow_Katapulty(Agresor_T,Obronca_T);
End If;
--ostrzal morza
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16)) Then
Ostrzal_Statkow(Obronca_T,Agresor_T);
End If;
End Loop;
If Statki_Vs_Piechota(Agresor_T,Obronca_T) And Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Null;
End If;
End;
------------------------------------------------------------------------------
----------------------------- Bitwa Morska -----------------------------------
------------------------------------------------------------------------------
When 6 =>
Declare
Logiczna1 : Boolean := False;
Logiczna2 : Boolean := False;
Begin
While Not(Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Loop
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16) ) And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Ostrzal_Karakow_Statki(Obronca_T,Agresor_T);
End If;
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16) ) And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Ostrzal_Karakow_Statki(Agresor_T,Obronca_T);
End If;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Logiczna1 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Agresor_T,Obronca_T);
End If;
If Logiczna2 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Obronca_T,Agresor_T);
End If;
Logiczna1:=False;
Logiczna2:=False;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Logiczna1 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Agresor_T,Obronca_T);
End If;
If Logiczna2 And Not (Ucieczka(Obronca_T,False,False,False,False,True) Or Ucieczka(Agresor_T,False,False,False,False,True)) Then
Natarcie_Morskie(Obronca_T,Agresor_T);
End If;
--abordaz
Logiczna1:=True;
Logiczna2:=True;
While (Not (Ucieczka(Obronca_T,True,True,True,False,False) Or Ucieczka(Agresor_T,True,True,True,False,False))) And Logiczna1 And Logiczna2 Loop
Logiczna1:=False;
Logiczna2:=False;
For I In 1..11 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Logiczna1 And Not (Ucieczka(Obronca_T,True,True,True,False,False) Or Ucieczka(Agresor_T,True,True,True,False,False)) Then
Abordaz(Agresor_T,Obronca_T);
End If;
If Logiczna2 And Not (Ucieczka(Obronca_T,True,True,True,False,False) Or Ucieczka(Agresor_T,True,True,True,False,False)) Then
Abordaz(Obronca_T,Agresor_T);
End If;
End Loop;
End Loop;
Logiczna1:=False;
Logiczna2:=False;
For I In 13..16 Loop
Logiczna1:=Logiczna1 Or ((Agresor_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Agresor_T,I));
Logiczna2:=Logiczna2 Or ((Obronca_T(I).Ilosc_Oddz >0) And Czy_Ktos_Jeszcze_Walczy(Obronca_T,I));
End Loop;
If Ucieczka(Agresor_T,False,False,False,False,True) And (Not Ucieczka(Obronca_T,False,False,False,False,True))And Logiczna2 Then --ucieka agresor, obronca goni
Natarcie_Morskie(Obronca_T,Agresor_T);
If (Obronca_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,16) ) Then
Ostrzal_Karakow_Statki(Obronca_T,Agresor_T);
End If;
Elsif Ucieczka(Obronca_T,False,False,False,False,True) And (Not Ucieczka(Agresor_T,False,False,False,False,True)) And Logiczna1 Then --ucieka obronca, agresor goni
Natarcie_Morskie(Agresor_T,Obronca_T);
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16) ) Then
Ostrzal_Karakow_Statki(Agresor_T,Obronca_T);
End If;
Else --obydwie strony się wycofuja
Null;
End If;
End;
Post został pochwalony 0 razy
Ostatnio zmieniony przez dyschemist dnia Czw 13:38, 15 Lut 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 13:37, 15 Lut 2007 Temat postu: czesc 4 - końcówka programu - chronologie oblezen |
|
|
------------------------------------------------------------------------------
----------------------------- Oblezenia Zamku --------------------------------
------------------------------------------------------------------------------
When 7 =>
Declare
Logiczna1 : Boolean;
Logiczna2 : Boolean;
Begin
--3 krotny ostrzal katapult
If Obronca_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12) And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Agresor_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,12)And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Obronca_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12) And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Agresor_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,12)And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Obronca_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12) And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Agresor_T(12).Ilosc_Oddz >0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,12)And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
--faza walki u bramy
While Forteca>0 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False)) Loop
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Obronca_T(4).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,4));
Logiczna1:=Logiczna1 Or (Obronca_T(8).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,8));
Logiczna1:=Logiczna1 Or (Obronca_T(9).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,9));
--ostrzal z lukow
If Logiczna1 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
Logiczna2:=False;
Logiczna2:=Logiczna2 Or (Agresor_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1));
Logiczna2:=Logiczna2 Or (Agresor_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2));
Logiczna2:=Logiczna2 Or (Agresor_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3));
Logiczna2:=Logiczna2 Or (Agresor_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6));
Logiczna2:=Logiczna2 Or (Agresor_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10));
--niszczenie bramy tu: taranowanie
If Logiczna2 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Na_Brame(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
End Loop;
--faza wtargniecia;
If Forteca = 0 Then
While Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Loop
--wtargniecie piechoty
Logiczna2:=False;
Logiczna2:=Logiczna2 Or (Agresor_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1));
Logiczna2:=Logiczna2 Or (Agresor_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2));
Logiczna2:=Logiczna2 Or (Agresor_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3));
Logiczna2:=Logiczna2 Or (Agresor_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6));
Logiczna2:=Logiczna2 Or (Agresor_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10));
If Logiczna2 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
Logiczna2:=False;
Logiczna2:=Logiczna2 Or (Agresor_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1));
Logiczna2:=Logiczna2 Or (Agresor_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2));
Logiczna2:=Logiczna2 Or (Agresor_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3));
Logiczna2:=Logiczna2 Or (Agresor_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6));
Logiczna2:=Logiczna2 Or (Agresor_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10));
If Logiczna2 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
--odparcie
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Obronca_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1));
Logiczna1:=Logiczna1 Or (Obronca_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2));
Logiczna1:=Logiczna1 Or (Obronca_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3));
Logiczna1:=Logiczna1 Or (Obronca_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6));
Logiczna1:=Logiczna1 Or (Obronca_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10));
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Obronca_T,Agresor_T);
End If;
--ostrzal z lukow
Logiczna2:=False;
Logiczna2:=Logiczna2 Or (Agresor_T(4).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,4));
Logiczna2:=Logiczna2 Or (Agresor_T(8).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,8));
Logiczna2:=Logiczna2 Or (Agresor_T(9).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,9));
If Logiczna2 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
End If;
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Obronca_T(4).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,4));
Logiczna1:=Logiczna1 Or (Obronca_T(8).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,8));
Logiczna1:=Logiczna1 Or (Obronca_T(9).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,9));
If Logiczna1 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
--walka frontalna
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
End Loop;
---- faza odwrotu --------------
Declare
T_Agr,
N_Agr,
T_Obr,
N_Obr : Integer;
Suma_Obrony : Integer := 0;
Suma_Agresor : Integer := 0;
Begin
--wyliczenie sum oddzialow obroncy i agresora
For I In 1..16 Loop
Suma_Obrony:=Obronca_T(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor_T(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
--agresor w odwrocie,obronca kontruje
If Ucieczka(Agresor_T,True,True,True,True,False) And Not Ucieczka(Obronca_T,True,True,True,True,False) Then
For I In 1..5 Loop
Losowanie(Agresor_T,Suma_Agresor,True,True,True,True,False,T_Agr,N_Agr);
Wybierz_Cel(Obronca_T,Suma_Obrony,T_Obr,N_Obr,True,True,True,True,False);
Walka(Obronca_T(T_Obr).Wojsko(N_Obr),Agresor_T(T_Agr).Wojsko(N_Agr));
End Loop;
--agresor dokonuje rzezi w miescie
Elsif Not Ucieczka(Agresor_T,True,True,True,True,False) And Ucieczka(Obronca_T,True,True,True,True,False) Then
Declare
Ilosc_Obroncow_Miasta : Integer := 0;
Begin
Loop
Atak_Frontowy(Agresor_T,Obronca_T);
For I In 1..16 Loop
For J In 1..Obronca_T(I).Ilosc_Oddz Loop
Ilosc_Obroncow_Miasta:=Ilosc_Obroncow_Miasta+Obronca_T(I).Wojsko(J).Liczba;
End Loop;
End Loop;
--koniec rzezi ilosc wojska w miejscie jest nie znaczaca
If Ilosc_Obroncow_Miasta < 100 Then
Exit;
End If;
End Loop;
End;
Else
Null;
End If;
End;
End If;
End;
------------------------------------------------------------------------------
----------------------------- Oblezenie Morskie ------------------------------
------------------------------------------------------------------------------
When 8 =>
Declare
Logiczna1 : Boolean;
Logiczna2 : Boolean;
Licznik : Integer := 0;
Begin
------------- faza ostrzalu morskiego ------------------------
While Forteca >0 And Not (Ucieczka(Agresor_T,True,True,True,False,True)Or Ucieczka(Obronca_T,True,True,True,True,False)) Loop
Licznik :=Licznik+1;
If (Agresor_T(16).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,16)) And Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Karakow_Obl(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If (Licznik mod 2 = 0) And (Obronca_T(12).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,12))Then
If Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Statkow(Obronca_T,Agresor_T);
End If;
Else
If Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
End If;
End Loop;
------------ faza wdarcia się do fortecy ---------------------
If Forteca = 0 Then
While Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Loop
--wtargniecie piechoty
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Agresor_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1));
Logiczna1:=Logiczna1 Or (Agresor_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2));
Logiczna1:=Logiczna1 Or (Agresor_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3));
Logiczna1:=Logiczna1 Or (Agresor_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6));
Logiczna1:=Logiczna1 Or (Agresor_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10));
If Logiczna1 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Agresor_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,1));
Logiczna1:=Logiczna1 Or (Agresor_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,2));
Logiczna1:=Logiczna1 Or (Agresor_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,3));
Logiczna1:=Logiczna1 Or (Agresor_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,6));
Logiczna1:=Logiczna1 Or (Agresor_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,10));
If Logiczna1 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
--odparcie
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Obronca_T(1).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,1));
Logiczna1:=Logiczna1 Or (Obronca_T(2).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,2));
Logiczna1:=Logiczna1 Or (Obronca_T(3).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,3));
Logiczna1:=Logiczna1 Or (Obronca_T(6).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,6));
Logiczna1:=Logiczna1 Or (Obronca_T(10).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,10));
If Logiczna1 And Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Obronca_T,Agresor_T);
End If;
--ostrzal z lukow
Logiczna2:=False;
Logiczna2:=Logiczna2 Or (Agresor_T(4).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,4));
Logiczna2:=Logiczna2 Or (Agresor_T(8).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,8));
Logiczna2:=Logiczna2 Or (Agresor_T(9).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Agresor_T,9));
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
End If;
Logiczna1:=False;
Logiczna1:=Logiczna1 Or (Obronca_T(4).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,4));
Logiczna1:=Logiczna1 Or (Obronca_T(8).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,8));
Logiczna1:=Logiczna1 Or (Obronca_T(9).Ilosc_Oddz > 0 And Czy_Ktos_Jeszcze_Walczy(Obronca_T,9));
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
--walka frontalna
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
End Loop;
End If;
---------------- faza koncowa bitwy -----------------
Declare
T_Agr,
N_Agr,
T_Obr,
N_Obr : Integer;
Suma_Obrony : Integer := 0;
Suma_Agresor : Integer := 0;
Begin
--wyliczenie sum oddzialow obroncy i agresora
For I In 1..16 Loop
Suma_Obrony:=Obronca_T(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor_T(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
--agresor w odwrocie,obronca kontruje
If Ucieczka(Agresor_T,True,True,True,True,False) And Not Ucieczka(Obronca_T,True,True,True,True,False) Then
For I In 1..5 Loop
Losowanie(Agresor_T,Suma_Agresor,True,True,True,True,False,T_Agr,N_Agr);
Wybierz_Cel(Obronca_T,Suma_Obrony,T_Obr,N_Obr,True,True,True,True,False);
Walka(Obronca_T(T_Obr).Wojsko(N_Obr),Agresor_T(T_Agr).Wojsko(N_Agr));
End Loop;
--agresor dokonuje rzezi w miescie
Elsif Not Ucieczka(Agresor_T,True,True,True,True,False) And Ucieczka(Obronca_T,True,True,True,True,False) Then
Declare
Ilosc_Obroncow_Miasta : Integer := 0;
Begin
Loop
Atak_Frontowy(Agresor_T,Obronca_T);
For I In 1..16 Loop
For J In 1..Obronca_T(I).Ilosc_Oddz Loop
Ilosc_Obroncow_Miasta:=Ilosc_Obroncow_Miasta+Obronca_T(I).Wojsko(J).Liczba;
End Loop;
End Loop;
--koniec rzezi ilosc wojska w miejscie jest nie znaczaca
If Ilosc_Obroncow_Miasta < 100 Then
Exit;
End If;
End Loop;
End;
Else
Null;
End If;
End;
End;
------------------------------------------------------------------------------
----------------------------- Oblezenie Synchroniczne ------------------------
------------------------------------------------------------------------------
When 9 =>
------------- faza ostrzalu ------------------------
While Forteca >0 And Not (Ucieczka(Agresor_T,True,True,True,True,True)Or Ucieczka(Obronca_T,True,True,True,True,False)) Loop
--3 krotny ostrzal katapult
If Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Karakow_Obl(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Karakow_Obl(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,False,True) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Karakow_Obl(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Obronca_T,Agresor_T,Passive_Fort,1);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Katapult(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
--ostrzal z lukow
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Obronca_T,Agresor_T);
End If;
--niszczenie bramy tu: taranowanie
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Na_Brame(Agresor_T,Obronca_T,Forteca,Pole_Bitewne);
End If;
End Loop;
------------ faza wdarcia się do fortecy ---------------------
If Forteca = 0 Then
While Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Loop
--wtargniecie piechoty
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Agresor_T,Obronca_T);
End If;
--odparcie
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Zwarcie_Piechota(Obronca_T,Agresor_T);
End If;
--ostrzal z lukow
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Ostrzal_Z_Lukow(Agresor_T,Obronca_T);
End If;
--walka frontalna
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Obronca_T,Agresor_T);
End If;
If Not (Ucieczka(Agresor_T,True,True,True,True,False) Or Ucieczka(Obronca_T,True,True,True,True,False))Then
Atak_Frontowy(Agresor_T,Obronca_T);
End If;
End Loop;
End If;
---------------- faza koncowa bitwy -----------------
Declare
T_Agr,
N_Agr,
T_Obr,
N_Obr : Integer;
Suma_Obrony : Integer := 0;
Suma_Agresor : Integer := 0;
Begin
--wyliczenie sum oddzialow obroncy i agresora
For I In 1..16 Loop
Suma_Obrony:=Obronca_T(I).Ilosc_Oddz+Suma_Obrony;
Suma_Agresor:=Agresor_T(I).Ilosc_Oddz+Suma_Agresor;
End Loop;
--agresor w odwrocie,obronca kontruje
If Ucieczka(Agresor_T,True,True,True,True,False) And Not Ucieczka(Obronca_T,True,True,True,True,False) Then
For I In 1..5 Loop
Losowanie(Agresor_T,Suma_Agresor,True,True,True,True,False,T_Agr,N_Agr);
Wybierz_Cel(Obronca_T,Suma_Obrony,T_Obr,N_Obr,True,True,True,True,False);
Walka(Obronca_T(T_Obr).Wojsko(N_Obr),Agresor_T(T_Agr).Wojsko(N_Agr));
End Loop;
--agresor dokonuje rzezi w miescie
Elsif Not Ucieczka(Agresor_T,True,True,True,True,False) And Ucieczka(Obronca_T,True,True,True,True,False) Then
Declare
Ilosc_Obroncow_Miasta : Integer := 0;
Begin
Loop
Atak_Frontowy(Agresor_T,Obronca_T);
For I In 1..16 Loop
For J In 1..Obronca_T(I).Ilosc_Oddz Loop
Ilosc_Obroncow_Miasta:=Ilosc_Obroncow_Miasta+Obronca_T(I).Wojsko(J).Liczba;
End Loop;
End Loop;
--koniec rzezi ilosc wojska w miejscie jest nie znaczaca
If Ilosc_Obroncow_Miasta < 100 Then
Exit;
End If;
End Loop;
End;
Else
Null;
End If;
End;
When Others =>
Null;
End Case;
Elsif To_Lower(Znak)='n' Then
Declare
Kolejka : Integer := 0;
Ucieczka_A : Boolean := False;
Ucieczka_O : Boolean := False;
Akcja_A : Boolean := False;
Akcja_O : Boolean := False;
Znak_Tmp : Character := 'a';
Raport : File_Type;
Begin
Create(Raport,Out_File,"Raport_"&Data(1..10)&"_"&Gen_Agr(1..M)&"_vs_"&Gen_Obr(1..N)&".txt");
Loop
If Ucieczka_A Or Ucieczka_O Or Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,True) Or Statki_Vs_Piechota(Agresor_T,Obronca_T) Or Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Exit;
End If;
Akcja_O:=False;
Tura(Agresor_T,Gen_Agr(1..M),Ucieczka_A,Obronca_T,Gen_Obr(1..N),Ucieczka_O,Akcja_O,Forteca,Pole_Bitewne,Kolejka,Raport);
New_Line(2);
New_Line(Raport,2);
If Ucieczka_A Or Ucieczka_O Or Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,True) Or Statki_Vs_Piechota(Agresor_T,Obronca_T) Or Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Exit;
End If;
If Not Akcja_O Then
Akcja_A:=False;
Tura(Obronca_T,Gen_Obr(1..N),Ucieczka_O,Agresor_T,Gen_Agr(1..M),Ucieczka_A,Akcja_A,Passive_Fort,Pole_Bitewne,Kolejka,Raport);
End If;
New_Line(2);
New_Line(Raport,2);
If Ucieczka_A Or Ucieczka_O Or Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,True) Or Statki_Vs_Piechota(Agresor_T,Obronca_T) Or Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Exit;
End If;
Akcja_O:=False;
Tura(Obronca_T,Gen_Obr(1..N),Ucieczka_O,Agresor_T,Gen_Agr(1..M),Ucieczka_A,Akcja_O,Passive_Fort,Pole_Bitewne,Kolejka,Raport);
New_Line(2);
New_Line(Raport,2);
If Ucieczka_A Or Ucieczka_O Or Ucieczka(Agresor_T,True,True,True,True,True) Or Ucieczka(Obronca_T,True,True,True,True,True) Or Statki_Vs_Piechota(Agresor_T,Obronca_T) Or Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Exit;
End If;
If Not Akcja_A Then
Akcja_O:=False;
Tura(Agresor_T,Gen_Agr(1..M),Ucieczka_A,Obronca_T,Gen_Obr(1..N),Ucieczka_O,Akcja_O,Forteca,Pole_Bitewne,Kolejka,Raport);
End If;
New_Line(2);
New_Line(Raport,2);
End Loop;
--wypisanie stanu przy ucieczce
Declare
Piechota_A,
Lucznicy_A,
Jezdzcy_A,
Katapulty_A,
Statki_A,
Piechota_O,
Lucznicy_O,
Jezdzcy_O,
Katapulty_O,
Statki_O : Integer;
Begin
Wylicz_Wojsko(Agresor_T,Piechota_A,Lucznicy_A,Jezdzcy_A,Katapulty_A,Statki_A);
Wylicz_Wojsko(Obronca_T,Piechota_O,Lucznicy_O,Jezdzcy_O,Katapulty_O,Statki_O);
Put("Panie generale "&Gen_Agr(1..M)&", mamy: ");
Put(Piechota_A,5);
Put(" piechurow");
New_Line;
Put(Raport,"Moj Panie, mamy ");
Put(Raport,Piechota_A,5);
Put(Raport," piechurow");
New_Line(Raport,1);
Put(Lucznicy_A,5);
Put(Raport,Lucznicy_A,5);
Put(" lucznikow ");
Put(Raport," lucznikow ");
Put(Jezdzcy_A,5);
Put(Raport,Jezdzcy_A,5);
Put(" jezdzcow");
Put(Raport," jezdzcow");
New_Line;
New_Line(Raport,1);
Put(Katapulty_A,5);
Put(Raport,Katapulty_A,5);
Put(" katapult ");
Put(Raport," katapult ");
Put(Statki_A,5);
Put(Raport,Statki_A,5);
Put(" statkow");
Put(Raport," statkow");
New_Line;
New_Line(Raport,1);
Put("Moj Panie, nasz przeciwnik, general "&Gen_Obr(1..N)&", ma: ");
Put(Piechota_O,5);
Put(" piechurow");
New_Line;
Put(Raport,"Moj Panie, nasz przeciwnik ma ");
Put(Raport,Piechota_O,5);
Put(Raport," piechurow");
New_Line(Raport,1);
Put(Lucznicy_O,5);
Put(Raport,Lucznicy_O,5);
Put(" lucznikow ");
Put(Raport," lucznikow ");
Put(Jezdzcy_O,5);
Put(Raport,Jezdzcy_O,5);
Put(" jezdzcow");
Put(Raport," jezdzcow");
New_Line;
New_Line(Raport,1);
Put(Katapulty_O,5);
Put(Raport,Katapulty_O,5);
Put(" katapult ");
Put(Raport," katapult ");
Put(Statki_O,5);
Put(Raport,Statki_O,5);
Put(" statkow");
Put(Raport," statkow");
New_Line;
New_Line(Raport,1);
End;
If Statki_Vs_Piechota(Agresor_T,Obronca_T) Then
Null;
Elsif Statki_Vs_Piechota(Obronca_T,Agresor_T) Then
Null;
Else
If (Ucieczka_A And Not Ucieczka_O) Or (Ucieczka(Agresor_T,True,True,True,True,True) And Not Ucieczka(Obronca_T,True,True,True,True,True)) Then
While Not(To_Lower(Znak_Tmp)='t' Or To_Lower(Znak_Tmp)='n') Loop
Put_Line("Panie Generale "&Gen_Agr&" twoj wrog ucieka z pola bitwy - gonic go? <t-tak, n- nie>");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='n' Then
New_Line(2);
New_Line(Raport,2);
Put_Line("Wojsko Generala "&Gen_Obr&" ucieklo z pola bitwy");
Put_Line("Wygral General "&Gen_Agr);
Put_Line(Raport,"Wojsko Generala "&Gen_Obr&" ucieklo z pola bitwy");
Put_Line(Raport,"Wygral General "&Gen_Agr);
Else
For I In 1..3 Loop
Tura(Agresor_T,Gen_Agr(1..M),Ucieczka_A,Obronca_T,Gen_Obr(1..N),Ucieczka_O,Akcja_O,Forteca,Pole_Bitewne,Kolejka,Raport);
End Loop;
End If;
Elsif (Not Ucieczka_A And Ucieczka_O) Or (Not Ucieczka(Agresor_T,True,True,True,True,True) And Ucieczka(Obronca_T,True,True,True,True,True)) Then
While Not(To_Lower(Znak_Tmp)='t' Or To_Lower(Znak_Tmp)='n') Loop
Put_Line("Panie Generale "&Gen_Obr&" twoj wrog ucieka z pola bitwy - gonic go? <t-tak, n- nie>");
Get_Immediate(Znak_Tmp);
End Loop;
If To_Lower(Znak_Tmp)='n' Then
New_Line(2);
New_Line(Raport,2);
Put_Line("Wojsko Generala "&Gen_Agr&" ucieklo z pola bitwy");
Put_Line("Wygral General "&Gen_Obr);
Put_Line(Raport,"Wojsko Generala "&Gen_Agr&" ucieklo z pola bitwy");
Put_Line(Raport,"Wygral General "&Gen_Obr);
Else
For I In 1..3 Loop
Tura(Obronca_T,Gen_Obr(1..N),Ucieczka_O,Agresor_T,Gen_Agr(1..M),Ucieczka_A,Akcja_A,Passive_Fort,Pole_Bitewne,Kolejka,Raport);
End Loop;
End If;
Else
Put_Line("Obydwie armie się wycofuja ... bitwa zakonczona remisem");
Put_Line(Raport,"Obydwie armie się wycofuja ... bitwa zakonczona remisem");
End If;
End If;
Close(Raport);
End ;
End If;
End;
Declare
Agresor_Dt : Strona;
Obronca_Dt : Strona;
Wynik_A : File_Type;
Wynik_O : File_Type;
Begin
Detransformacja(Agresor_T,Agresor_Dt);
Detransformacja(Obronca_T,Obronca_Dt);
Create(Wynik_O,Out_File,"Posumowanie_bitwy_"&Data(1..10)&"_dow"&Gen_Obr(1..N)&".txt");
Wypisz(Obronca_Dt,Wynik_O);
Close(Wynik_O);
Create(Wynik_A,Out_File,"Posumowanie_bitwy_"&Data(1..10)&"_dow"&Gen_Agr(1..M)&".txt");
Wypisz(Agresor_Dt,Wynik_A);
Close(Wynik_A);
End;
Declare
Wylacznik : Character := 'a';
Begin
Put_Line("Wcisnij 'q' by zakonczyc, lub inny klawisz by kontynuowac");
Get_Immediate(Wylacznik);
If To_Lower(Wylacznik)='q' Then
Exit;
End If;
End;
End Loop;
End Symulator_Bitew;
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 13:42, 15 Lut 2007 Temat postu: komentarz |
|
|
pierwsze moje spostrzenie to że po poprawieniu sekwencji zapisywania wyniku bitwy program DZIALA (3500 linijek). Nie ma jeszcze raportow z symulowanej cześci bitewnej (nie znamy jej przebiegu) ale wynik jest zapisywany i znane nam sa efekty bitwy.
Kod podzieliłem na 4 części bo był za długi nawet na 3 posty . W razie gdyby ktoś chciał z tego skorzystać wystarczy wkleić po kolej te 4 posty skopiowane z forum do AdaGide i skompilować. Pojawią się jeszcze 3 warningi w zwiazku z brakiem raportow z symulacji ale nie nalezy się tym przejmować. Czekam na chetnych ktorzy mieli go testować :->
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Wróbelek
Administrator
Dołączył: 21 Gru 2006
Posty: 151
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łódź
|
Wysłany: Czw 18:34, 15 Lut 2007 Temat postu: |
|
|
Imo jest jeden problem, ten kod nie chce się skopiować do jednejgo programu ADY, dochodzi do 900 linijek a potem już nic nie można dodać
Chyba że mamy każdy post do oddzielnego programu skopiować
edit:
dokładnie objętość jednego programu kończy się w połowie formuły: Ostrzał z karaków na katapulty
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Czw 23:02, 15 Lut 2007 Temat postu: |
|
|
u mnie jest jako jeden program
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
Luneta
Stały bywalec
Dołączył: 22 Gru 2006
Posty: 92
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: z Lunetowa
|
Wysłany: Pią 18:38, 16 Lut 2007 Temat postu: |
|
|
U mnie też się nie chce wkleić cały program.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
dyschemist
Zespolony z forum
Dołączył: 21 Gru 2006
Posty: 149
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z J.J. Portu
|
Wysłany: Pią 19:57, 16 Lut 2007 Temat postu: |
|
|
okey - rzeczywiscie cos z tym jest nie tak - liczy do 1200 linijki.
Można zrobić to jednak następująco - cały kod zapisać w pliku txt nastepnie za pomocą adagide wziąść polecenie otwórz i wybrać ten ten dany plik txt (trzeba zmienić typ pliku na dowolny plik , standardowo widzi tylko adb) wtedy mozna już zapisać program jak się uważa
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|