Informatika gyűjtemény

Egy szinttel feljebb fg_jatek2.pas

2004050607080910

NézetNyomtat

fg_jatek2.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 3 KB
{$R+} {$Q+}
PROGRAM jatek;
CONST
    inputFile = 'jatek4.be';
    maxKor = 30000;
    maxm = 1000;
    maxj = 10;

TYPE
    mezo = RECORD
        ugras: INTEGER;
        tipus: BYTE;
    END;

    jatekos = RECORD
        mezo: INTEGER; {az aktualis mezo, amin all a jatekos}
        kimarad: BOOLEAN;
    END;

VAR
    N: INTEGER;
    palya: ARRAY [1..maxm] OF mezo;
    M: INTEGER;
    lista: ARRAY [1..maxj] OF jatekos;

PROCEDURE Betolt;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N, M);
    FOR i:= 1 TO N DO
    BEGIN
        ReadLn(T, palya[i].ugras, palya[i].tipus);
    END;
    Close(T);
END; {Betolt}

PROCEDURE AlapHelyzet;
VAR
    i: INTEGER;
BEGIN
    FOR i:= 1 TO maxj DO
    BEGIN
        lista[i].mezo := 1;
        lista[i].kimarad := FALSE;
    END;
END; {AlapHelyzet}

PROCEDURE Leut(mezo: INTEGER);
VAR
    i: INTEGER;
BEGIN
    FOR i:= 1 TO M DO
    BEGIN
        IF lista[i].mezo = mezo THEN
        BEGIN
            lista[i].mezo := 1;
            lista[i].kimarad := FALSE;
        END;
    END;
END; {Leut}

FUNCTION JatekosLep(k, j: INTEGER): BOOLEAN;
VAR
    dobas: BYTE;
    mezo: INTEGER;
BEGIN
    JatekosLep:= FALSE;
    IF lista[j].kimarad = TRUE THEN
    BEGIN
        lista[j].kimarad := FALSE;
        EXIT;
    END;
    mezo:= lista[j].mezo;

    {MOD}
    IF (palya[mezo].tipus IN [1..6]) THEN
    BEGIN
        dobas:= Random(6)+1;
        IF dobas <> palya[mezo].tipus THEN EXIT;
    END;
    
    {dobas+lepes}
    dobas:= Random(6)+1;
    mezo:= mezo + dobas;

    {MOD}
    IF mezo > N THEN
    BEGIN
        mezo := N - (mezo - N);
    END;
    
    IF mezo < N THEN mezo := palya[mezo].ugras;

    {gyozelem}
    IF mezo >= N THEN
    BEGIN
        JatekosLep:= TRUE;
        EXIT;
    END;

    {a sorrend fontos hehe}
    Leut(mezo);
    lista[j].mezo:= mezo;
    
    IF palya[mezo].tipus = 7 THEN
    BEGIN
        lista[j].kimarad:= TRUE;
    END;
END; {JatekosLep}

FUNCTION JatekKor(k: INTEGER): BOOLEAN;
VAR
    i: INTEGER;
    vege: BOOLEAN;
BEGIN
    vege:= FALSE;
    FOR i:= 1 TO M DO
    BEGIN
        IF JatekosLep(k, i) THEN vege:= TRUE;
    END;
    JatekKor := vege;
END; {JatekKor}

PROCEDURE Kiir(k: INTEGER);
VAR
    i: INTEGER;
BEGIN
{    Write(k:3,': ');
    FOR i := 1 TO M DO
    BEGIN
        Write( lista[i].mezo:3, ' ');
    END;
    WriteLn;}
END; {Kiir}

FUNCTION Lejatsz(): INTEGER;
VAR
    kor: INTEGER;
BEGIN
    AlapHelyzet;
    Kiir(0);
    FOR kor:= 1 TO maxKor DO
    BEGIN
        IF JatekKor(kor) THEN
        BEGIN
            Kiir(kor);
            Lejatsz:= kor;
            EXIT;
        END;
        Kiir(kor);
    END;
    Lejatsz:= maxKor+1;
END; {Lejatsz}

PROCEDURE FoProg;
VAR
    i, cur, min, max: INTEGER;
    sum: LONGINT;
    avg: DOUBLE;
BEGIN
    Randomize;
    {MOD}
    cur:= Lejatsz;
    min := cur; max := cur; sum := cur;
    FOR i:= 2 TO 1000 DO
    BEGIN
        cur:= Lejatsz;
        sum := sum+cur;
        IF max < cur THEN max := cur;
        IF min > cur THEN min := cur;
    END;
    avg := sum;
    avg := avg / 1000;
    WriteLn(min, '/',max, '/', avg:6:2);
END; {FoProg}

BEGIN
    Betolt;
    FoProg;
END.


(Vissza)