Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lösung für 2D Brett (https://www.delphipraxis.net/133988-loesung-fuer-2d-brett.html)

SimStar001 14. Mai 2009 16:14

Re: Lösung für 2D Brett
 
kannst du bitte mal noch deine ganzen variablen posten, damit wir genau wissen wie due deine sachen nun aufgebaut hast, das macht es einfacher, und du bekommst genau den tip den du brauchst!

Danke

SimStar001 14. Mai 2009 16:23

Re: Lösung für 2D Brett
 
jetzt weiß ich was du meinst:

also ich würde ein array erzeugen, was generell alle bilder enthält:

so z.b:

Delphi-Quellcode:
var AlleMeineBilder : array [0..xyz] of Bitmap;

// dann beim erzeugen der Form

AlleMeineBilder[0].bitmap.assign('Pfad der Datei');
...

// dann kannst du im code deinen Feldern ein Bild aus diesem Array zuweisen, je nach Bedingung die hast.
was dein "Problem" mit if else angeht, da kannst du zum beispiel einfach eine case Abfrage erstellen:

Delphi-Quellcode:
case feldarray[1].bildindex of
  0 : Feldarray[1].Loadfromfile(BildMitBildindex1);
  1 : Feldarray[1].Loadfromfile(BildMitBildindex2);
...
  end;

KahPee 14. Mai 2009 17:22

Re: Lösung für 2D Brett
 
Die unten dargestellte Variante ist schon sehr gut, allerdings hat die noch einen Haken: Ich müsste das ganze für jedes der 49 Felder machen. Schöner wäre, wenn sich eine Prozedur entwickeln lässt, die für alle Felder funktioniert. Geht das evtl über ein dynamisches Array? (Feldarray ist übrigens ein zweidimendsionaler Array[x,y])

Die andere Alternative, die weiterhin ne ganze Ecke eintippen erfordert wäre eine Funktion bei der man Variablen für x und y beim Aufrufen der Funktion abfragen müsste, das geht zur Not auch wenn es keine elegantere Variante gibt.

________
abgesehen von der oberen Frage: Funktioniert folgendes?:

Delphi-Quellcode:
Feldarray[0..7][0..7].Loadfromfile(BildMitBildindex1);
Feldarray[4][4].Loadfromfile(BildMitBildindex2);
am Anfang müssen nämlich alle Felder ein Default-Bild zugewiesen bekommen. Alle bis auf das Feld (4,4) das kriegt eine andere Grafik zugewiesen. Aber im prinzip müsste das so klappen oder?
Wie kann ich die so erzeugten Grafiken nun noch An- und Ausschalten? Funktioniert das dann auch über: Feldarray[x,y].visible:=true/false?

SimStar001 15. Mai 2009 13:19

Re: Lösung für 2D Brett
 
Hallo, im Prinzip geht alles.

Du kannst alles auch mit dynamischen arrays machen, aber wenn es bei deinem Programm immer die selbe größe ist wäre es quatsch.

Wenn du dein Array am Anfang mit einer Default Bitmap füllen willst, kannst du das ganze ganz einfach über eine Schleife machen.

einfach so:

Delphi-Quellcode:
for i := 0 to 6 do
          for u := 0 to 6 do
            Feldarray[i,u].loadfromfile(BildMitBildindexDefault);
nun möchtest du garantiert wissen wo sich jedes bild befinedet, also di x, y koordinaten haben.
Aus diesem Grund würde ich dir raten das ganze jetzt entweder in ein Record zu packen und dann ein Array von diesem Record zu erzeugen, oder das ganze als nächster schritt dann in eine eigene Klasse.

Für Record würde ichs so machen:

Delphi-Quellcode:
type TMeinSpielFeld = record
       Bild : TBitmap;
       Left : Integer;
       Top : Integer;
       // Du kannst hier noch andere Parameter definieren die du brauchst
       // Wie zum Beispiel:
       BildIndex : Integer;
       end;

var MeinSpielFeld : array [0..6,0..6] of TMeinSpielFeld;
Somit hättest du jetzt den Vorteil dass du ein Array hast, welches zu jedem Bitmap auch noch die Koordinaten beinhaltet und alle anderen Sachen die du dann noch Brauchst.

Jetzt kannst du auch einfach die x ( Left) und y (Top) Koordinaten abfragen:

Delphi-Quellcode:
x := MeinSpielFeld[0,0].Left;
y := MeinSpielFeld[0,0].Top;

//usw.

Das ganze als nächsten Schritt in eine Klasse zu packen ist aufwendiger, aber am Ende doch noch mehr von Vorteil. Aber das kannst du später alles immernoch machen.
Versuch das ganze ruhig ersteinmal so hinzubekommen.

KahPee 15. Mai 2009 15:22

Re: Lösung für 2D Brett
 
Nochmal vielen Dank für deine Hilfen, genau so hatte ich mir das inzwischen auch überlegt. Ich glaube, dass ich jetzt die Vorraussetzung für meine Programm zusammen habe. ich werde jetzt mal gucken wie weit ich komme...

mfg Kahpee

SimStar001 15. Mai 2009 15:33

Re: Lösung für 2D Brett
 
Bitte, bei fragen einfach wieder melden!

KahPee 15. Mai 2009 17:28

Re: Lösung für 2D Brett
 
So jetzt kommt das erste Problem:
ich habe einen Array für die Bilderliste erstellt:

Delphi-Quellcode:
piclist: array[0..11] of Tbitmap;

nun wollte ich jeder Variable von piclist ein Bild zuweisen:
Delphi-Quellcode:
piclist[0].assign(pictures/bildname.bmp);
allerdings bekomme ich da immer einen Fehler ausgegeben:
[Fehler] Unit1.pas(152): Undefinierter Bezeichner: 'pictures'

pictures/bildname.bmp ist der Pfad von dem Ort wo die exe das ganze Programm liegt ausgehend. also die exe das Projekt liegt in dem gleichen Ordner wie der Ordner pictures in welchem die Datei Bildname.bmp liegt.


was ist falsch? Muss das Bild vorher schon erzeugt werden mit: piclist[0].create? (was in meinem Programm eher hinderlich als hilfreich wäre...

mfg Kahpee

SimStar001 15. Mai 2009 17:44

Re: Lösung für 2D Brett
 
Hallo, also ersteinmal ist der Pfad den du übergibst ein String, d.h. du musst Ihn in Anführungszeichen schreiben.

Delphi-Quellcode:
piclist[0].assign('pictures/bildname.bmp');
desweiteren musst du auch einen vollständigen Pfad angeben, bsp:

Delphi-Quellcode:
piclist[0].assign('C:\pictures\Bildname.bmp');

KahPee 15. Mai 2009 17:59

Re: Lösung für 2D Brett
 
mh das ist ja eigentlich blöd, da so bei dem kopieren des Programms an einen Ort sich der Pfad auf einem anderen PC ja ändert, falls ich das Programm mal weitergeben will.
Außerdem kriege ich jetzt ne Fehlermeldung:

Delphi-Quellcode:
  piclist[0].assign('pictures/bild.bmp');
([Fehler] Unit1.pas(153): Inkompatible Typen: 'TPersistent' und 'String')



Nächstes Problem bei der konkreten Zuweisung:


ich habe einen Record deklariert in dem dann die Variable Feld.pic: Tbitmap vorkommt. Wie weise ich das nun zu:
Delphi-Quellcode:
Feld.pic.Loadfromfile(piclist[0]);
funktioniert nicht. ([Fehler] Unit1.pas(171): Inkompatible Typen: 'String' und 'TBitmap')

Und auch die Positionsangaben dazu funktionieren nicht:

Delphi-Quellcode:
Feld.pic.left:=x;
Feld.pic.top:=y;
[Fehler] Unit1.pas(172): Undefinierter Bezeichner: 'top'


Sorry, dass ich soviel Fragen stelle, ich bin noch in der Lernphase

Vielen Dank im voraus Kahpee

SimStar001 15. Mai 2009 18:10

Re: Lösung für 2D Brett
 
kleinen moment:

also das mit dem pfad ist einfach, das löst du so:
Delphi-Quellcode:
... assign(ExtractFilePath(ParamStr(0)) + '\pictures\Bild.bmp');


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.
Seite 3 von 4     123 4      

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