AGB  ·  Datenschutz  ·  Impressum  







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

verschachtelte if funktion

Ein Thema von xxsasch4xx · begonnen am 16. Sep 2010 · letzter Beitrag vom 18. Sep 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#11

AW: verschachtelte if funktion

  Alt 18. Sep 2010, 12:14
was für ein objekt?
ich versteh das nicht.
Er meint du hast eine Klasse die eine Mulde darstellt. Sie selber speichert, ob darin eine Kugel ist, und wie die Mulden an den Seiten sind. Wenn du jetzt einen Spielstein anklickst, dann nimmst du die passende Mulde (du kannst es ja mit den X/Y Koordinaten herausfinden) und sagst der, dass der Stein bewegt werden soll. Diese Mulde guckt dann: Ist ein Stein drin -> Wenn ja ist daneben ein Stein? Dann sagt er das der benachbarten Mulde, dass dort ein Stein rüber zieht. Diese kennt ja wiederum auch ihre Nachbarmulden und kann gucken ob diese Frei ist. Wenn ja, dann wird der Stein zwischen den beiden Mulden ausgetauscht, und der mittlere gelöscht.

Delphi-Quellcode:
type
  TMulde = class(TObject)
  private
    FLeft, FTop, FRight, FBottom : TMulde;
    FStoneSet : Boolean;

    function MoveOverStoneBottom() : Boolean;
    function MoveOverStoneRight() : Boolean;
    function MoveOverStoneLeft() : Boolean;
    function MoveOverStoneTop() : Boolean;
  public
    function MoveStoneBottom() : Boolean;
    function MoveStoneRight() : Boolean;
    function MoveStoneLeft() : Boolean;
    function MoveStoneTop() : Boolean;
  end;
In MoveStone* wird dann das oben beschriebene gemacht:
Delphi-Quellcode:
if FStoneSet // Stein in der Mulde
   and Assigned(FTop) // Mulde oberhalb vorhanden
   and FTop.FStoneSet // Stein in der oberen Mulde
   then
begin
  Result := FTop.MoveOverStone();
  if (Result) then // Der Stein wurde verschoben
    FStoneSet := False; // Dann den hier entfernen
end else
  Result := False;
In MoveOverStone* wird dann das weiter verarbeitet:
Delphi-Quellcode:
if Assigned(FTop) // Mulde oberhalb vorhanden
   not(FTop.StoneSet) // Mulde oberhalb ist frei
   then
begin
  FTop.StoneSet := True;
  Self.StoneSet := False;
  // Alternativ:
  // FBottom.StoneSet := False;
end else
  Result := False;
Das ist nicht der Weisheit letzter Schluss, aber vielleicht hilft es dir zumindest im Hintergrund zu speichern, was passiert.
Um das noch zu Zeichnen, muss man nicht mehr so viel tun. Du muss halt alle Mulden im Programm abspeichern und dann eine TPaintBox darauf legen. Und im OnPaint der Paintbox kannst du dann die Mulden durchgehen und dann herausfinden wo die Mulde ist (z.B. die Mulde speichert seine Koordinaten) und dann gucken ob die Mulde besetzt ist und z.B. entweder einen nicht ausgefüllten oder einen ausgefüllten Kreis zeichnen.

MfG
Fabian

PS: Nach zwei Minuten schon aufgeben? Wir sind zwar schnell, aber so schnell auch nicht.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: verschachtelte if funktion

  Alt 18. Sep 2010, 12:25
@xZise

ich befürchte aber, das dem TE die Grundlagen fehlen, um deinen Code zu verstehen bzw. den auf dieser Basis zu vervollständigen. Natürlich schreit die Aufgabenstellen und Delphi nach einer OOP-Lösung (mit Klassen), aber schau dir den Ansatz vom TE an und du wirst festellen, dass der über das Drag'n'Drop von Komponenten auf ein Form noch nicht viel weiter gekommen ist.

Somit wäre ein Verweis auf ein Grundlagen-Tutorial in diesem Falle besser.

Um dieses plain zu lösen sollte der TE mal eine Logik-Tabelle aufzeichnen und dabei alle möglichen Konstellationen eintragen. Damit kann man dann ein Regelwerk erstellen und dieses dann nach Delphi umsetzen.

[EDIT]

So ich hab da mal als Fingerübung ein Solitär zusammengeklopft
Es ist bestimmt nicht die beste Version, aber eine die funktioniert.
Logik und Ausgabe sind natürlich getrennt.

Im Anhang befinden sich die Quellen und die kompilierte Version (logisch als exe)

HINWEIS Da ich die Generics benutze lässt sich der Code nur mit Delphi 2010 (2009?) compilieren. Mit geübten Fingern kann man die Generics aber auch wegprogrammieren
Angehängte Dateien
Dateityp: zip SolTest.zip (373,8 KB, 2x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Sep 2010 um 16:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:24 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