Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Probleme bei Kniffel... (https://www.delphipraxis.net/93344-probleme-bei-kniffel.html)

VitroN 4. Jun 2007 16:18


Probleme bei Kniffel...
 
Hallo, bin im mom Kniffel am progen. Bin im mom bei der Kontrollstruktur für die "Große Straße" und komme da nicht weiter. Habe zu Beginn die Anzahl der Würfelaugen der einzelnen Würfel in einem Array sortiert und will dann mir mehreren verschachtelten If-Verzweigungen kontrolieren, ob es eine große Straße ist. Doch egal ob eine voriegt oder nicht, Delphi geht immer in den else-Fall.

Delphi-Code:
Delphi-Quellcode:
//SelectionSort für die Würfelaugen
for i:= 1 to 5 do
 begin
  index:=i;
  MinSoFar:=GrosseStrasse[i];
  for j:= i to 5 do
   begin
   if GrosseStrasse[j]<MinSoFar
    then
     begin
     MinSoFar:=GrosseStrasse[j];
     index:=j;
     end;
   end;
   x:=GrosseStrasse[i];
   GrosseStrasse[i]:=GrosseStrasse[index];
   GrosseStrasse[index]:=x;
  end;
//Kontrolle, ob Große Straße vorliegt
 if GrosseStrasse[1]+1=GrosseStrasse[2] then
  if GrosseStrasse[2]+1=GrosseStrasse[3] then
   if GrosseStrasse[3]+1=GrosseStrasse[4] then
    if GrosseStrasse[4]+1=GrosseStrasse[5] then
     begin
     y:=y+40;
     LGrosseStrasse.Caption:='40';
     LPunkteRechts.Caption:=inttostr(y);
     LGesamtRechts.Caption:=inttostr(y+strtoint(LGesamtLinksRechts.Caption));
     end
  else
   LGrosseStrasse.Caption:='0';


Hoffe hab alles gut genug erklärt und bedank mich schon mal für die Hilfe

VitroN

[edit=Matze][delphi]-Tags gesetzt. Zukünftig bitte selbst erledigen. Mfg, Matze[/edit]

Sidorion 4. Jun 2007 16:31

Re: Probleme bei Kniffel...
 
1. Hast Du das Array GrosseStrasse vor dem Sortieren mit den Würfelwerten befüllt?
2. ersetz doch mal diese unselige verschachtelte if-abfrage durch eine mit ands. Weil so wies hier steht weiss kein Mensch zu welchem if das else gehört (ja ich weiss normalerweise zum letzten, kann trotzdem niemand lesen).
Delphi-Quellcode:
  If (GrosseStrasse[2]=Succ(GrosseStrasse[1]))
  And (GrosseStrasse[3]=Succ(GrosseStrasse[2]))
  And (GrosseStrasse[4]=Succ(GrosseStrasse[3]))
  And (GrosseStrasse[5]=Succ(GrosseStrasse[4]))
  Then Begin
  //hier grosse Strasse
  End Else Begin
  //hier nicht
  End;

dajuhsa 4. Jun 2007 16:45

Re: Probleme bei Kniffel...
 
ich hab mir auch mal kniffel geprogt, da sah das so aus:
(eer=einser,zer=zweier,der=dreier usw.)

Delphi-Quellcode:
if (der >= 1)and(ver >= 1)
and (  ((eer >= 1)and(zer >= 1))
     or((zer >= 1)and(fer >= 1))
     or((fer >= 1)and(ser >= 1)))
then

DP-Maintenance 4. Jun 2007 17:37

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.

DeddyH 4. Jun 2007 17:39

Re: Probleme bei Kniffel...
 
Interessant, wer hier schon alles Kniffel geproggt hat (mich eingeschlossen *gg*, hab mir für den Zettel sogar ne Kompo geschrieben). Bei mir sieht das so aus (ein Array für die Würfel 1 bis 5 und eins für die möglichen Augen 1 bis 6):
Delphi-Quellcode:
procedure TKnuffelzettel.werte2augen;
var i,j: integer;
begin
  FillChar(FAugen,SizeOf(FAugen),0);
  for i := 0 to 4 do
    begin
      j := Wuerfel[i];
      inc(FAugen[j - 1]);
    end;
end;

function TKnuffelzettel.GrStrasse: integer;
begin
  werte2augen;
  Result := 0;
  if ((FAugen[0] > 0) and (FAugen[1] > 0) and (FAugen[2] > 0) and (FAugen[3] > 0) and (FAugen[4] > 0)) or
     ((FAugen[1] > 0) and (FAugen[2] > 0) and (FAugen[3] > 0) and (FAugen[4] > 0) and (FAugen[5] > 0)) then
    Result := 40;
end;

HannosG 4. Jun 2007 17:56

Re: Probleme bei Kniffel...
 
@ dajuhsa:
Das war keine Große sondern eine Kleine Straße :-)

Bei einer großen Straße müssen n[2..5] alle einmal vorhanden sein,
daher:
Delphi-Quellcode:
if (n[2]=1)and(n[3]=1)and(n[4]=1)and(n[5]=1)
and ((n[1]=1)or(n[6]=1))
Bei n[1..6] handelt es sich um Anzahlen, wie oft eine Würfelzahl vorkommt.

Die Berechnung per Anzahl ist auch bei den 1ern bis 6ern praktisch.

dajuhsa 4. Jun 2007 18:04

Re: Probleme bei Kniffel...
 
au ja, das war meine kleine Strasse, meine große geht genau so wie du geschrieben hast, sorry( :wall: )

VitroN 6. Jun 2007 19:50

Re: Probleme bei Kniffel...
 
Nochmal vielen Dank für die schnelle und gute Hilfe!!!

Hab jetzt leider noch ein Problem (hoffe das ist das letzte und dann bin ich fertig)
Und zwar habe ich in Unit2 eine globale Zählvariable und möchte diese durch einen Button, der sich auf der nicht dazugehörigen Form (Form4) befindet, wieder auf "0" setzen. Aber ich hab keine Ahnung wie ich auf diese zugreifen kann. Habe schon versucht, wie man das normalerweise macht, den Namen der Form2 davor zu schreiben, aber dann sag Delphi mir, dass es die Variable "Wuerfe" nicht findet. Hab mir auch schon überlegt, das ich irgendwie auf die Unit2 zugreifen muss, aber wie?

Schon mal im Vorraus Danke...

Namenloser 6. Jun 2007 20:52

Re: Probleme bei Kniffel...
 
Entweder, du schreibst unit2. vor den Variablennamen, oder nur den Variablennamen, das geht auch. Voraussetzung ist allerdings, dass die Variable im interface und nicht im implementationabschnitt deklariert wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz