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;