Witam. Piszę klasycznego pokera dobieranego. Napisałem zestaw funkcji sprawdzających układy kart i sprawdzającego zwycięzcę - Jakoś działają. Chciałem trochę skrócić/uporządkować kod, więc co mogę zrobić? W szczególności funkcja 'KtoWygrał' wydaje się skomplikowana.
Function Kareta(K:TReka):Boolean;
Begin
SortujKarty(K);
Kareta:=((K[1].Figura=K[2].Figura) And (K[2].Figura=K[3].Figura) And
(K[3].Figura=K[4].Figura) Or ((K[2].Figura=K[3].Figura) And (K[3].Figura=K[4].Figura) And
(K[4].Figura=K[5].Figura)));
End; {------------------------Karteta-}
Function Para(K:TReka):Boolean;
Begin
SortujKarty(K);
Para:=((K[1].Figura=K[2].Figura) Or (K[2].Figura=K[3].Figura) Or (K[3].Figura=K[4].Figura) Or
(K[4].Figura=K[5].Figura));
End; {-------------------------Para-}
Function Full(K:TReka):Boolean;
Begin
SortujKarty(K);
Full:=((K[1].Figura=K[2].Figura) And (K[3].Figura=K[4].Figura) And
(K[4].Figura=K[5].Figura) Or ((K[4].Figura=K[5].Figura) And (K[1].Figura=K[2].Figura) And
(K[2].Figura=K[3].Figura)));
End; {-----------------------------Full-}
Function TrzyFigury(K:TReka):Boolean;
Begin
SortujKarty(K);
TrzyFigury:=((K[1].Figura=K[2].Figura) And (K[2].Figura=K[3].Figura) Or
(K[2].Figura=K[3].Figura) And (K[3].Figura=K[4].Figura) Or
(K[3].Figura=K[4].Figura) And (K[4].Figura=K[5].Figura));
End;
Function DwiePary(K:TReka):Boolean;
Begin
SortujKarty(K);
DwiePary:=((K[1].Figura=K[2].Figura) And ((K[3].Figura=K[4].Figura) Or (K[4].Figura=K[5].Figura))
Or (K[2].Figura=K[3].Figura) And (K[4].Figura=K[5].Figura) And (Not Kareta(K)));
End; {------------------------Dwie_Pary-}
Function Kolor(K:TReka):Boolean;
Begin
SortujKarty(K);
Kolor:=((K[1].Kolor=K[2].Kolor) And (K[2].Kolor=K[3].Kolor) And
(K[3].Kolor=K[4].Kolor) And (K[4].Kolor=K[5].Kolor));
End; {--------------------------Kolor-}
Function Strit(K:TReka):Boolean;
Var
L:Integer;
Begin
Strit:=True;
SortujKarty(K);
For L:= 1 To 4 Do
If (Abs(Ord(K[L].Figura)-Ord(K[L+1].Figura)) <> 1) Then Strit:=False;
End; {-------------------------Strit-}
Function Poker(K:TReka):Boolean;
Begin
Poker:=(Strit(K) And Kolor(K));
End; {-------------------------Poker-}
Function PokerKrolewski(K:TReka):Boolean;
Begin
PokerKrolewski:=(Poker(K) And (K[5].Figura=ASY));
End; {-------------------------PokerKrolewski-}
Function WartoscUkladuKart(K:TReka):Integer;
Begin
WartoscUkladuKart:=0;
If (PokerKrolewski(K)) Then WartoscUkladuKart:=9
else If (Poker(K)) Then WartoscUkladuKart:=8
else If (Kareta(K)) Then WartoscUkladuKart:=7
else If (Full(K)) Then WartoscUkladuKart:=6
else If (TrzyFigury(K)) Then WartoscUkladuKart:=5
else If (Strit(K)) Then WartoscUkladuKart:=4
else If (Kolor(K)) Then WartoscUkladuKart:=3
else If (DwiePary(K)) Then WartoscUkladuKart:=2
else If (Para(K)) Then WartoscUkladuKart:=1
End;
Function KtoWygral(G:TGraczRodzaj):TTypGracza;
Var
Pom, Pom2, I:Integer;
Poz, Poz2:array[1..3] of Integer;
P: TTypGracza;
Begin
P:=KOMPUTER;
If (WartoscUkladuKart(G[CZLOWIEK].Reka) > WartoscUkladuKart(G[KOMPUTER].Reka))
Then P:=CZLOWIEK
else
If (WartoscUkladuKart(G[CZLOWIEK].Reka) = WartoscUkladuKart(G[KOMPUTER].Reka)) Then
Begin
{Jeli ukady sĽ takie same}
If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 9) AND
(Ord(G[CZLOWIEK].Reka[1].Kolor) > Ord(G[KOMPUTER].Reka[1].Kolor))
Then P:=CZLOWIEK
{ Poker Krolewski}
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 8) AND
(Ord(G[CZLOWIEK].Reka[5].Figura) > Ord(G[KOMPUTER].Reka[5].Figura))
Then P:=CZLOWIEK
{ poker }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 7) AND
(Ord(G[CZLOWIEK].Reka[2].Figura) > Ord(G[KOMPUTER].Reka[2].Figura))
Then P:=CZLOWIEK
{ Kareta }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 6) AND
(Ord(G[CZLOWIEK].Reka[3].Figura) > Ord(G[KOMPUTER].Reka[3].Figura))
Then P:=CZLOWIEK
{ Full }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 5) AND
(Ord(G[CZLOWIEK].Reka[3].Figura) > Ord(G[KOMPUTER].Reka[3].Figura))
Then P:=CZLOWIEK
{ Trojka }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 4) AND
(Ord(G[CZLOWIEK].Reka[5].Figura) > Ord(G[KOMPUTER].Reka[5].Figura))
Then P:=CZLOWIEK
{ Strit }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 3) AND
(Ord(G[CZLOWIEK].Reka[5].Figura) > Ord(G[KOMPUTER].Reka[5].Figura))
Then P:=CZLOWIEK
{ Kolor }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 2) AND
(Ord(G[CZLOWIEK].Reka[4].Figura) > Ord(G[KOMPUTER].Reka[4].Figura))
Then P:=CZLOWIEK
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 2) AND (
(Ord(G[CZLOWIEK].Reka[4].Figura) = Ord(G[KOMPUTER].Reka[4].Figura)) AND
(Ord(G[CZLOWIEK].Reka[2].Figura) > Ord(G[KOMPUTER].Reka[2].Figura)))
Then P:=CZLOWIEK
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 2) AND (
(Ord(G[CZLOWIEK].Reka[4].Figura) = Ord(G[KOMPUTER].Reka[4].Figura)) AND
(Ord(G[CZLOWIEK].Reka[2].Figura) = Ord(G[KOMPUTER].Reka[2].Figura))) { Dwie Pary }
Then Begin
IF (Ord(G[CZLOWIEK].Reka[1].Figura) = Ord(G[CZLOWIEK].Reka[2].Figura))
AND (Ord(G[CZLOWIEK].Reka[4].Figura) = Ord(G[CZLOWIEK].Reka[5].Figura))
Then Pom:=Ord(G[CZLOWIEK].Reka[3].Figura);
IF (Ord(G[CZLOWIEK].Reka[2].Figura) = Ord(G[CZLOWIEK].Reka[3].Figura))
AND (Ord(G[CZLOWIEK].Reka[4].Figura) = Ord(G[CZLOWIEK].Reka[5].Figura))
Then Pom:=Ord(G[CZLOWIEK].Reka[1].Figura);
IF (Ord(G[CZLOWIEK].Reka[1].Figura) = Ord(G[CZLOWIEK].Reka[2].Figura))
AND (Ord(G[CZLOWIEK].Reka[3].Figura) = Ord(G[CZLOWIEK].Reka[4].Figura))
Then Pom:=Ord(G[CZLOWIEK].Reka[5].Figura);
IF (Ord(G[KOMPUTER].Reka[1].Figura) = Ord(G[KOMPUTER].Reka[2].Figura))
AND (Ord(G[KOMPUTER].Reka[4].Figura) = Ord(G[KOMPUTER].Reka[5].Figura))
Then Pom2:=Ord(G[KOMPUTER].Reka[3].Figura);
IF (Ord(G[KOMPUTER].Reka[2].Figura) = Ord(G[KOMPUTER].Reka[3].Figura))
AND (Ord(G[KOMPUTER].Reka[4].Figura) = Ord(G[KOMPUTER].Reka[5].Figura))
Then Pom2:=Ord(G[KOMPUTER].Reka[1].Figura);
IF (Ord(G[KOMPUTER].Reka[1].Figura) = Ord(G[KOMPUTER].Reka[2].Figura))
AND (Ord(G[KOMPUTER].Reka[3].Figura) = Ord(G[KOMPUTER].Reka[4].Figura))
Then Pom2:=Ord(G[KOMPUTER].Reka[5].Figura);
IF Pom > Pom2 Then P:=CZLOWIEK;
End
{ Dwie Pary }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 1)
Then Begin
SortujKarty(G[CZLOWIEK].Reka);
SortujKarty(G[KOMPUTER].Reka);
IF (Ord(G[CZLOWIEK].Reka[1].Figura) = Ord(G[CZLOWIEK].Reka[2].Figura)) Then
Begin Pom:=Ord(G[CZLOWIEK].Reka[1].Figura); Poz[1]:=Ord(G[CZLOWIEK].Reka[3].Figura);
Poz[2]:=Ord(G[CZLOWIEK].Reka[4].Figura);
Poz[3]:=Ord(G[CZLOWIEK].Reka[5].Figura); end;
IF (Ord(G[CZLOWIEK].Reka[2].Figura) = Ord(G[CZLOWIEK].Reka[3].Figura)) Then
Begin Pom:=Ord(G[CZLOWIEK].Reka[2].Figura); Poz[1]:=Ord(G[CZLOWIEK].Reka[1].Figura);
Poz[2]:=Ord(G[CZLOWIEK].Reka[4].Figura);
Poz[3]:=Ord(G[CZLOWIEK].Reka[5].Figura); end;
IF (Ord(G[CZLOWIEK].Reka[3].Figura) = Ord(G[CZLOWIEK].Reka[4].Figura)) Then
Begin Pom:=Ord(G[CZLOWIEK].Reka[3].Figura); Poz[1]:=Ord(G[CZLOWIEK].Reka[1].Figura);
Poz[2]:=Ord(G[CZLOWIEK].Reka[2].Figura);
Poz[3]:=Ord(G[CZLOWIEK].Reka[5].Figura); end;
IF (Ord(G[CZLOWIEK].Reka[4].Figura) = Ord(G[CZLOWIEK].Reka[5].Figura)) Then
Begin Pom:=Ord(G[CZLOWIEK].Reka[4].Figura); Poz[1]:=Ord(G[CZLOWIEK].Reka[1].Figura);
Poz[2]:=Ord(G[CZLOWIEK].Reka[2].Figura);
Poz[3]:=Ord(G[CZLOWIEK].Reka[3].Figura); end;
IF (Ord(G[KOMPUTER].Reka[1].Figura) = Ord(G[KOMPUTER].Reka[2].Figura)) Then
Begin Pom2:=Ord(G[KOMPUTER].Reka[1].Figura); Poz2[1]:=Ord(G[KOMPUTER].Reka[3].Figura);
Poz2[2]:=Ord(G[KOMPUTER].Reka[4].Figura);
Poz2[3]:=Ord(G[KOMPUTER].Reka[5].Figura); end;
IF (Ord(G[KOMPUTER].Reka[2].Figura) = Ord(G[KOMPUTER].Reka[3].Figura)) Then
Begin Pom2:=Ord(G[KOMPUTER].Reka[2].Figura); Poz2[1]:=Ord(G[KOMPUTER].Reka[1].Figura);
Poz2[2]:=Ord(G[KOMPUTER].Reka[4].Figura);
Poz2[3]:=Ord(G[KOMPUTER].Reka[5].Figura); end;
IF (Ord(G[KOMPUTER].Reka[3].Figura) = Ord(G[KOMPUTER].Reka[4].Figura)) Then
Begin Pom2:=Ord(G[KOMPUTER].Reka[3].Figura); Poz2[1]:=Ord(G[KOMPUTER].Reka[1].Figura);
Poz2[2]:=Ord(G[KOMPUTER].Reka[2].Figura);
Poz2[3]:=Ord(G[KOMPUTER].Reka[5].Figura); end;
IF (Ord(G[KOMPUTER].Reka[4].Figura) = Ord(G[KOMPUTER].Reka[5].Figura)) Then
Begin Pom2:=Ord(G[KOMPUTER].Reka[4].Figura); Poz2[1]:=Ord(G[KOMPUTER].Reka[1].Figura);
Poz2[2]:=Ord(G[KOMPUTER].Reka[2].Figura);
Poz2[3]:=Ord(G[KOMPUTER].Reka[3].Figura); end;
IF Pom > Pom2 Then P:=CZLOWIEK
else If Pom = Pom2 Then
Begin
I:=3;
While (I>0) AND (P=KOMPUTER) do
Begin
If Poz[I] > Poz2[I] Then P:=CZLOWIEK;
I:=I-1;
End;
End
End
{ Para }
else If (WartoscUkladuKart(G[CZLOWIEK].Reka) = 0 )
Then Begin
I:=5; SortujKarty(G[CZLOWIEK].Reka);
SortujKarty(G[KOMPUTER].Reka);
While (I>0) AND (P=KOMPUTER) do
Begin
If Ord(G[CZLOWIEK].Reka[I].Figura) > Ord(G[KOMPUTER].Reka[I].Figura) Then P:=CZLOWIEK;
I:=I-1;
End;
End;
end;
KtoWygral:=P;
end;