All pastes #810279 Raw Edit

Anonym

public text v1 · immutable
·published 2007-12-09 20:27 UTC
rendered paste body
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;