AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Variablen in Objektnamen verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen in Objektnamen verwenden?

Ein Thema von Sluak · begonnen am 21. Mär 2011 · letzter Beitrag vom 22. Mär 2011
Antwort Antwort
Seite 2 von 2     12   
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#1

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 15:06
Hallo

Es geht um folgendes Problem: Ich schreibe gerade ein Memory Spiel mit Delphi. Dabei gibt es 30 Bilder der einzelnen Karten. Nun möchte ich(wenn zwei Karten gezogen wurden, die nicht übereinstimmen) die Karten wieder umdrehen.
Derzeit wäre mein einziger Lösungsansatz dafür, dem Array (was die Koordinaten der Karten in der Form darstellt) einen Wert zB 0 zuzuweisen und dann per If then Schleife die Karten wieder zurück zum Deckblatt zu führen.

Das Problem an der ganzen Sache ist, dass so bei 30 Bildern mindestens 100 Zeilen entstehen, die weder übersichtlich, noch praktisch sind.
Hallo,

ich verstehe nicht, wo das Problem liegt: du merkst dir die beiden letzten aufgedeckten Karten - stimmen sie nicht überein, verdeckst du sie wieder. Das gibt doch keine 100 Programmzeilen? Für das Zurückdrehen von 2 bekannten Karten?

Gruss Reinhard
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 19:31
...und dann per If then Schleife die Karten wieder zurück ...
Aaaaaah - er hat If then Schleife gesagt

Welche Datenstruktur verwendest du denn pro Spielkarte?
Wahrscheinlich gar keine; das ist nämlich dein Problem.

Delphi-Quellcode:
type
{ 0=verdeckt  (blauer Hintergrund)
  1=verdeckt und als 1. Karte markiert  (roter Hintergrund)
  2=temporär aufgedeckt
  3=aufgedeckt
}

TCardStatus = 0..3;
TMemoryCard = record
  Status : TCardStatus;
  BildNr : integer; // Zwei Karten mit der gleichen Bildnr sind übereinstimmend
  Bitmap : TBitmap; // Zeiger auf Bild, optional da eigentlich auch schon über die Bildnr bestimmt
end;

TCards = array[1..8, 1..8] of TMemoryCard;
TBilder = array[1..32] of TBitmap; // 32 Bilder
Um das Spielfeld anzuzeigen, verwendet man auch keine 64 TImage sondern ein DrawGrid mit Grösse 8 * 8.
Wenn du die Datenstrukturen von oben verwendest, dann ist das aus- und zudecken kein Problem mehr.
Andreas
  Mit Zitat antworten Zitat
Sluak

Registriert seit: 21. Mär 2011
7 Beiträge
 
#3

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 20:13
War "If then Schleife" falsch?

Naja, das mit den 100 Zeilen meine ich so, dass ich in meiner aktuellen Prozedur leider nichts mit den TImages machen kann. Soll heißen, dass ich die Überprüfung, ob richtig oder nicht, auf jede einzelne Prozedur machen muss, wenn ich auf ein Bild klicke.
Für besseres Verständnis hänge ich das aktuelle Programm einmal an. Leider zeigt er mir derzeit eine Fehlermeldung


EDIT: Fehlermeldungen behoben. Stürzt aber leider derzeit noch ab

EDIT2: Also den Fehler, waru das Programm abstürzt, habe ich jetzt herausgefunden. Wie im Programm im Anhang zu sehen ist, speichert er leider innerhalb der Prozedur die Variablen nicht, nachdem die Prozedur geschlossen wurde.
zB Beim ersten Zug fügt er die Koordinaten x1 und y1 hinzu.
Beim zweiten Zug (somit zweiter Aufruf der Prozedur), fügt er x2 und y2 hinzu, kennt aber dann x1 und y1 nicht mehr.
Brauche dringend Hilfe
Angehängte Dateien
Dateityp: rar Projekt.rar (293,1 KB, 2x aufgerufen)

Geändert von Sluak (21. Mär 2011 um 21:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Variablen in Objektnamen verwenden?

  Alt 22. Mär 2011, 07:09
Ich hab dein Programm mal getestet. Wo und wann genau stürzt denn bei dir was ab?

Kann ich nicht feststellen, vielleicht mache ich auch was falsch. Ich hab in der Prozedur BildKlick die auskommentierte Stelle wieder reingenommen, da stürzt aber auch nichts ab.

Von globalen Variablen solltest du Abstand nehmen. Ich habe das mal geändert:

Delphi-Quellcode:
TForm1 = class(TForm)
...
public
    { Public-Deklarationen }
     // Array 6 x 5 für Kartenzuweisung
    Karten: array[0..5] of array[0..4] of Integer;
    x1,x2,y1,y2,Spieler,Zug,PunktzahlS1,PunktzahlS2,Karte_gezogen:integer;
    // Zug 1 = noch keine Karte gezogen
    // Punktezahl SX = Punktzahl Spieler X
    // Karte_gezogen = wurde gezogen (Variable für Übergabe an Pozedur)
  end;

var
  Form1: TForm1;
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Variablen in Objektnamen verwenden?

  Alt 22. Mär 2011, 07:45
Delphi-Quellcode:
procedure TForm1.BildKlick(Nummer,x,y : integer); // Übergabewerte
                                                  // Koordinaten der Karte (x,y)
                                                  // Nummer der Karte (1-30)
var Karte1,Karte2:Integer;
                                         // erste gezogene Karte = Karten[x1,y1]
                                         // Karte1 = Position der Karte in Form1
begin
der Bereich
var Karte1,Karte2:Integer; sorgt für die Schutzverletzungen, nimm die Deklaration mal in den private Bereich mit auf...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Sluak

Registriert seit: 21. Mär 2011
7 Beiträge
 
#6

AW: Variablen in Objektnamen verwenden?

  Alt 22. Mär 2011, 10:48
der Bereich
var Karte1,Karte2:Integer; sorgt für die Schutzverletzungen, nimm die Deklaration mal in den private Bereich mit auf...
Und was genau bewirkt das ganze?

Also bei mir ist es so gewesen, dass das Programm abstürzte, wenn ein Paar gefunden wurde. Allerdings passierte das nur manchmal und nicht immer.


Habe es inzwischen gelöst und das Programm ist fertig. Dazu habe ich ein Array genommen, in dem steht, welche Karten noch nicht gefunden wurden. Dann eben per Schleife das Deckblatt bei einem Spielerwechsel hinzufügen und bei den schon gezogenen mit .hide einfach das Bild vestecken

Danke euch allen, eure Tipps haben meine Arbeit wirklich extrem erleichtert.
  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 08:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz