unit USpiel;
interface
uses Dialogs,Math, SysUtils, Windows, UFeld, UKI, UTastatur, USpieler, UBombe, Grids,
UExplosion, UExtra, UGui, UGlobal;
type
TSpiel=class
public
KI:TKI;
Feld:TFeld;
Karte:TZellen;
Teilnehmer:TASpieler;
run : boolean;
KIstaerke : integer;
Rundenzeit : integer;
Steinrand : integer;
endetimer : integer;
maxrunden : integer;
constructor create(map:TZellen;player:TASpieler;KIstaerke:integer=5);
procedure init;
procedure reinit;
procedure dostep(tc:integer);
procedure handeln;
procedure bewegen(x,y,nr:integer);
procedure bombenmanagment(tc:integer);
procedure explodieren(x,y,nr:integer);
procedure setzeexplosion(x,y:integer;kiste:boolean=false);
procedure erstelleextra(x,y:integer);
procedure sammleextra(x,y,nr:integer);
procedure steinregen(tc:integer);
procedure input(key:word);
function spielende:boolean;
end;
implementation
////////////////Constructor/////////////////////////////////////////////////////
constructor TSpiel.create(map:TZellen;player:TASpieler;KIstaerke:integer=5);
begin
Karte:=map;
Teilnehmer:=player;
self.KIstaerke:=KIstaerke;
Feld:=TFeld.create();
KI:=TKI.create();
maxrunden:=2;
init();
end;
procedure TSpiel.init;
var i,j:integer;
begin
with Feld do begin
for i:=0 to cZellenSpalten-1 do
for j:=0 to cZellenReihen-1 do
Zellen[i,j]:=Karte[i,j];
for i:=1 to 4 do
begin
Spieler[i]:=TSpieler.create;
Spieler[i].Typ:=Teilnehmer[i].Typ;
Spieler[i].Character:=Teilnehmer[i].Character;
Spieler[i].Siege:=Teilnehmer[i].Siege;
Spieler[i].KIfreq:=1000 div KIstaerke;
Spieler[i].KItimer:=Spieler[i].KIfreq;
end;
if Spieler[1].Typ<>'NA' then begin Spieler[1].x:=0; Spieler[1].y:=0; end;
if Spieler[2].Typ<>'NA' then begin Spieler[2].x:=cZellenReihen-1;Spieler[2].y:=cZellenSpalten-1;end;
if Spieler[3].Typ<>'NA' then begin Spieler[3].x:=0; Spieler[3].y:=cZellenSpalten-1;end;
if Spieler[4].Typ<>'NA' then begin Spieler[4].x:=cZellenReihen-1;Spieler[4].y:=0; end;
for i:=1 to 4 do
if Spieler[i].Typ<>'NA' then
Zellen[Spieler[i].x,Spieler[i].y]:=Zellen[Spieler[i].x,Spieler[i].y]+round(power(2,i+5));
GelegteBomben:=0;
VorhandeneExplosionen:=0;
VorhandeneExtras:=0;
Rundenzeit:=30000;
Steinrand:=0;
endetimer:=2000;
run:=true;
end;
end;
procedure TSpiel.reinit;
var i,j:integer;
begin
KI.destroy;
KI:=TKI.Create;
init();
end;
////////////////Do Step/////////////////////////////////////////////////////////
procedure TSpiel.dostep(tc:integer);
var i:integer;
begin
//Spielereingaben holen
if(run)then
begin
for i:=1 to 4 do
begin
Feld.Spieler[i].KItimer:=Feld.Spieler[i].KItimer-tc;
if Feld.Spieler[i].typ='NA' then
continue
else if ((Feld.Spieler[i].typ='KI') and (Feld.Spieler[i].KItimer<1)) then
begin
KI.aktion(i,Feld);
Feld.Spieler[i].KItimer:=Feld.Spieler[i].KIfreq;
end;
end;
//Spielereingaben auswerten
handeln;
bombenmanagment(tc);
steinregen(tc);
//spielende;
if (spielende)then
begin
for i:=1 to 4 do
if Feld.Spieler[i].Typ <> 'NA' then
inc(teilnehmer[i].siege);
run:=false
end;
end else begin
endetimer:=endetimer-tc;
if endetimer<1 then
for i:=1 to 4 do
if teilnehmer[i].siege>=maxrunden then
ggamestatus:=GSGameEnde
else
reinit;
end;
end;