Entwickler-Ecke

Sonstiges (Delphi) - Große Straße (Kniffel) auswerten???


Snippy - Mo 04.08.03 14:40
Titel: Große Straße (Kniffel) auswerten???
Ich code gerade ein Kniffel für 3 Spieler und stehe nun vor dem Problem der großen Straße!

Ich habe 5 Zufallszahlen und wenn da eine Große Straße zu erkennen ist, dann soll ein Label die Punktzahl 40 anzeigen!

So weit so gut, aber wie mache ich es, dass ne große Straße erkannt wird, die ja auch so aussehen kann: 5,3,4,2,1

Hoffe ihr könnt mir da helfen^^

Cu und THX


teebee - Mo 04.08.03 15:05

Du musst auf jeden Fall mal Dein Array mit den Würfeln sortieren. (Stichwort Bubblesort - ist zwar sehr langsam, dafür sehr einfach und bei sechs Würfeln absolut ok).

Dann könntest Du aus den Würfel-Feldern einen String basteln und schauen, ob Du '12345' bzw. '23456' darin findest:


Delphi-Quelltext
1:
2:
For i := 0 to 5 Do TestString := TestString+IntToStr(Würfel(i));
GrosseStrasse := (Pos('12345',TestString)>0Or (Pos('23456',TestString)>0);



Ciao, teebee


Snippy - Mo 04.08.03 15:56

Uff!
Sorry aber das schnall ich ned^^

Cu und danke


teebee - Mo 04.08.03 16:20

Was genau verstehst Du nicht? Wie hast Du denn Deine Zufallszahlen bisher organisiert?

Ciao, teebee


Nightmare_82 - Mo 04.08.03 17:20

Wenn du einen Integer Array hast, machst du es folgendermaßen:
1. Sortieren und dann so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function grosseStrasse : Boolean;
VAR
Count : Integer;
Diff : Integer;
begin
  Count:= 1;
  Result:= false;
  for i:= low(arr) to high(arr)-1 do
  begin
    Diff:= arr[i+1] - arr[i] ;
    if Diff = 1 // Wenn Differenz 1 ist Count erhöhen
      inc(Count)
    else if Diff <> 0 // Wenn Differenz 0 ist bleibt Count gleich
      Count:= 1// ansonsten von vorne anfangen
   if Count = 5 then // Wenn 5 mal ist es eine große Straße
     Result:= true;
end;


Für die kleine Straße müßtest du nur die 5 durch ne 4 ersetzen.
Habs nicht getestet sollte aber gehn.


-delphin- - Mi 01.06.05 22:13

Also ich habe diesen Code hier zu einer kleinen Straße geschrieben, der sich natürlich auf eine große erweitern lässt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  i:=1;
  i:=i+1;
  for i:=1 to 3 do
  If (a=i) or (b=i) or (c=i) or (d=i) or (e=i) and
     (a=i+1or (b=i+1or (c=i+1or (d=i+1or (e=i+1and
     (a=i+2or (b=i+2or (c=i+2or (d=i+2or (e=i+2and
     (a=i+3or (b=i+3or (c=i+3or (d=i+3or (e=i+3then
     SGUnten.Cells[0,3]:='30';

Nur leider sagt er immer, daß es eine kleine Straße ist, egal welchen Ausfall die Würfel haben, auch bei 3-3-4-4-4 z.b.
Woran liegt das und wie kann ich es beheben? Weil normalerweise müsste er die Schleife durchmachen, bis i=3 ist, dann die erste Zeile als true abstempeln (3 ist ja dabei), dann die zweite Zeile auch (i+4 -> 4 ist dabei -> true), aber dann müsste er false sagen, weil 5 (i+2 -> 3+2) ja gar nicht dabei ist. Trotzdem kommt ne kleine Straße bei heraus. Ausnahme ist 0-0-0-0-0 (Startwürfel), da passiert nix.