AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gewinn-Abfrage bei 4-Gewinnt

Ein Thema von malo · begonnen am 3. Feb 2005 · letzter Beitrag vom 3. Feb 2005
Antwort Antwort
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#1

Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 14:16
Ich versuch mich grade an einem kleinen 4-Gewinnt-Spielchen. Das klappt soweit auch. Meine erste Schwierigkeit ist jedoch schon die Gewinnabfrage

Ich hab dafür eine Function erstellt, die ausgeben soll, ob ein Spieler gewonnen hat.

Ich hab mir auch die Gewinnabfrage von Luckies 4-Gewinnt (bzw. von w3seek) angesehen, doch daraus werd ich irgendwie nicht richtig schlau...

Ich hab mich dann mal selbst versucht und folgenden Code auf die Beine gestellt.

Delphi-Quellcode:
function TForm1.Spieler2Sieg: boolean;
var i: integer;
begin
  for i := 1 to 42 do
    begin
      if ((FindComponent('Shape'+IntToStr(i)) as TShape).Brush.Color = clRed)
        and ((FindComponent('Shape'+IntToStr(i+1)) as TShape).Brush.Color = clRed)
          and ((FindComponent('Shape'+IntToStr(i+2)) as TShape).Brush.Color = clRed)
            and ((FindComponent('Shape'+IntToStr(i+3)) as TShape).Brush.Color = clRed)
              then
                Result := true else
                  Result := false;
    end;
end;
Daraus kann man auch schon fast erkennen, dass ich als "Felder" Shapes benutzt hab, die ich regelmäßig angeordnet hab (und die auch noch Standartnamen besitzen, was ja nicht sein sollte, ich weiß...). Mit diesem Code frag ich die Farben der Shapes will ich die Farben der Shapes abfragen und daraus erschließen, ob 4 gleichfarbige Shapes in einer Reihe stehen. Das soll jetzt erstmal dafür dienen, um horizontal abzufragen, ob 4 rote Steine in einer Reihe stehen.

Wenn ich jetzt die jeweiligen Shapes einfärbe (also Steine einwerfe) ruf ich auch immer schön die Function auf, aber irgendwie funktioniert das nicht ganz. Keine Fehlermeldung oder so, Result wird nur nie auf true gesetzt

Hat jemand ne Ahnung, warum?
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#2

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 14:29
Wenn ich das richtig verstehe suchst du nach erzeugten TShape-Objekten.

Was du genau tust: du fragst ab ob z.B.

Shape1, Shape2, Shape3 und Shape4 alle rote Farbe haben. Ist dabei auch die Lage der Shapes berücksichtigt?

Zum Beispiel ist das wichtig wenn du sagen wir die unterste Reihe betrachtest. Wenn diese 8 Felder besitzt (1-8 ),

und du fragst jetzt shape6,shape7,shape8,shape9 und alle sind rot, würde deine Funktion true ausgeben, obwohl das nicht korrekt wäre !

Also ich weiß nicht genau warum deine Funktion niemals true ausgibt, aber an sich enthält sie auch schon logikfehler !

Ich persönlich würde auch nicht im Speicher nach einem Objekt suchen (ist eventuell Geschmackssache). Hast du das Spielfeld denn nicht in einem Array gespeichert? Das wäre sicherlich vorteilhafter, auch was einen eventuellen Computergegner angeht.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#3

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 14:35
Die jeweiligen Shapes sind statische Shapes (es soll ja Leute geben, die sich unnötige Arbeit machen, weil sie zu faul zum nachdenken sind (ich z.B.) ).

Der Logikfehler ist mir noch gar nicht aufgefallen, aber den werd ich wohl berücksichtigen müssen... das heißt im Grunde, die ganze Function ist erstmal sinnlos. Trotzdem wüsste ich gerne, warum sie nicht true ausgibt

Das Spielfeld hab ich nicht in einem Array gespeichert. Wobei das jedoch eine wunderbare Idee ist, werd ich mal machen
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 14:54
Wie ich an dem Code sehe, durchläuft die funktion alle Felder (bzw. Shapes) und setzt danach Result. Fakt ist jedoch, dass wenn z.B. im ersten Durchlauf Result = true ist, dann wird dass im zweiten Durchlauf wieder überschrieben, usw. . Die Funktion dürfte also nur dann True ausgeben, wenn im letzten Durchlauf alle abgefragten Felder rot sind (d.h. die letzten vier Felder sind rot) und sonst nicht.
Das kann man aber ändern, indem man den Quelltext geringfügig ändert:
Delphi-Quellcode:
function TForm1.Spieler2Sieg: boolean;
var i: integer;
begin
  Result:= False;
  for i := 1 to 42 do
   ///weiter wie bisher ...
    ... and ((FindComponent('Shape'+IntToStr(i+3)) as TShape).Brush.Color = clRed)
              then
                Result := (true or Result);
    end;
end;
MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#5

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 15:27
Also schon wieder Logikfehler

Danke dafür schonmal

Nur, was genau heißt diese Zeile:
Result := (true or Result);
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 15:34
Zitat von malo:
Also schon wieder Logikfehler

Danke dafür schonmal

Nur, was genau heißt diese Zeile:
Result := (true or Result);
Das heißt, dass Result mit True über ein logisches OR verknüpft wird und das Ergebnis dann in Result gespeichert wird.
Wenn ich's mir allerdings recht überlege, kann man auch einfach
Result:= True; schreiben. Das kommt aufs selbe raus, wenn man nicht in einem else-Zweig wieder Result auf False setzt.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Gewinn-Abfrage bei 4-Gewinnt

  Alt 3. Feb 2005, 15:34
Da reicht eigentlich ein einfaches true...

[edit] War ja klar das ich zu spät bin... *gg* [/edit]
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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