Forum Nasza Grupa Strona Główna Nasza Grupa
Nasza mała lokalna społeczność żyjąca na Politechnice
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy     GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

symulator bitew - działa :D

 
Napisz nowy temat   Odpowiedz do tematu    Forum Nasza Grupa Strona Główna -> Programy
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

PostWysł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
Zobacz profil autora
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

PostWysł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
Zobacz profil autora
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

PostWysł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
Zobacz profil autora
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

PostWysł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
Zobacz profil autora
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

PostWysł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 Razz. 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
Zobacz profil autora
Wróbelek
Administrator



Dołączył: 21 Gru 2006
Posty: 151
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łódź

PostWysł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ć Confused
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
Zobacz profil autora
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

PostWysł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
Zobacz profil autora
Luneta
Stały bywalec



Dołączył: 22 Gru 2006
Posty: 92
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: z Lunetowa

PostWysł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
Zobacz profil autora
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

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Nasza Grupa Strona Główna -> Programy Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

Skocz do:  

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


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001 phpBB Group

Chronicles phpBB2 theme by Jakob Persson (http://www.eddingschronicles.com). Stone textures by Patty Herford.
Regulamin