Kartenspiel
Die Mausfunktionen Mousedown etc sind bereits ab TControl da.EugenE hat geschrieben:hat man sowas wie onClick für diesen CustomControl , falls wie kann man dann herausfinden welches Bild angeklickt wurde bzw ob ein Bild angeklickt wurde
Die kannst du überschreiben. Dann kriegst du X,Y.
Mit deinen Bildern musst du halt eine Objektliste machen, wobei die Objekte Left, Right, Bitmap und allenfalls z-Index halten müssen.
Dann musst du die Liste durchrattern und schauen, welches Bild im Bereich X,Y ist.
mit PtInRect().
Bei überlappenden Bildern vorher noch sortieren nach z-Index.
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
hm habe versucht einpaar Sachen von "Torry's Delphi Pages" nach Lazarus zu konvertieren
gingen aber alle nicht
Diese Projekte fand ich und alle die mit Source waren gingen nicht
http://www.torry.net/quicksearchd.php?S ... &Title=Yes" onclick="window.open(this.href);return false;
vllt kann einer von euch das für Lazarus konvertieren , egal welche hauptsache man kann dann die Karten verschieben und aufeinander stapeln .
Ich würde es selbst machen aber dazu fehlt mir das nötige Know-How ^^
gingen aber alle nicht

Diese Projekte fand ich und alle die mit Source waren gingen nicht

http://www.torry.net/quicksearchd.php?S ... &Title=Yes" onclick="window.open(this.href);return false;
vllt kann einer von euch das für Lazarus konvertieren , egal welche hauptsache man kann dann die Karten verschieben und aufeinander stapeln .
Ich würde es selbst machen aber dazu fehlt mir das nötige Know-How ^^
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Willst du es wirklich so kompliziert mit er extra Komponente machen?
Wenn es dir um die Bilder geht, liesen die sich doch recht einfach erstellen, bzw. man könnte eventuell auf die Cards.dll zurückgreifen.
Und wenn du dir Karten als Bitmap hast, kannst du sie doch direkt auf das Canvas zeichnen, ohne diesen Umweg, über eine extra Komponenten.
Wenn es dir um die Bilder geht, liesen die sich doch recht einfach erstellen, bzw. man könnte eventuell auf die Cards.dll zurückgreifen.
Und wenn du dir Karten als Bitmap hast, kannst du sie doch direkt auf das Canvas zeichnen, ohne diesen Umweg, über eine extra Komponenten.
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Habe ein Fehler unzwar habe ich die Karten einmal mit Canvas mit einem kleinen text beschriftet , wenn ich jez auf "Neues Spiel" gehe müssten eigentlich die beschriebenen Karten angezeigt werden , doch es wird nichts angezeigt
Habe mal den ganzen Projekt-Ordner mit angehängt , falls jemand bischen Zeit und den Code kurz Überfliegen konnte wäre nett
Hoffe jemand findet den / die Fehler im Code
Habe mal den ganzen Projekt-Ordner mit angehängt , falls jemand bischen Zeit und den Code kurz Überfliegen konnte wäre nett

Hoffe jemand findet den / die Fehler im Code
Zuletzt geändert von EugenE am Mo 19. Mär 2007, 00:42, insgesamt 1-mal geändert.
Hab's mal kurz angeschaut.
Dass du nichts siehst liegt daran dass deine Bitmaps keine Dimension haben.
Also mach:
fBilder := TBitmap.Create;
fBilder.Width:=50;
fBilder.Height:=50;
Dass es ewig dauert liegt daran dass du im Loop immer Randomize aufrufst.
Das reicht wenn du das einmal in StartenClick machst.
Ansonsten würde ich dir raten mit TList statt Array of integer zu arbeiten.
Das ist viel übersichtlicher und die Funktionen sind alle schon da und gut getestet. z.B:
inArray -> IndexOf
DeleteArrayElement -> Delete
Dass du nichts siehst liegt daran dass deine Bitmaps keine Dimension haben.
Also mach:
fBilder := TBitmap.Create;
fBilder.Width:=50;
fBilder.Height:=50;
Dass es ewig dauert liegt daran dass du im Loop immer Randomize aufrufst.
Das reicht wenn du das einmal in StartenClick machst.
Ansonsten würde ich dir raten mit TList statt Array of integer zu arbeiten.
Das ist viel übersichtlicher und die Funktionen sind alle schon da und gut getestet. z.B:
inArray -> IndexOf
DeleteArrayElement -> Delete
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Eigenartiger Weise werden Images, auch wenn man beispielsweise nur ne Linie rein zeichnet, schwarz.
Aber du kannst einfach davor ein Canvas.Fillrect(0,0.Image.width, image.heigh) setzen, wodurch das Image mit der eingestellten Farbe (standardmäßig eigentlich Weiß) gefüllt wird, anschließend kannst du normal zeichnen und das Image wird nichtmehr Schwarz.
Eventuell, sollte ne andere farbe gezeichnet werden, kannst du die ja vorher mit Canvas.Color := clWhite umstellen.
Aber du kannst einfach davor ein Canvas.Fillrect(0,0.Image.width, image.heigh) setzen, wodurch das Image mit der eingestellten Farbe (standardmäßig eigentlich Weiß) gefüllt wird, anschließend kannst du normal zeichnen und das Image wird nichtmehr Schwarz.
Eventuell, sollte ne andere farbe gezeichnet werden, kannst du die ja vorher mit Canvas.Color := clWhite umstellen.
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
ui *freu* jez die blöcke weiß und der text wird auch angezeigt ,
vielen vielen vielen dank
EDIT:
Nächstes Problem (war klar -.-):
Die Bilder haben alle eine Breite von 100
Die (mindestens) 6 Bilder sollen gleichmäßig in dem Feld mit der Breite 518 angezeigt werden, wenn die Bilder nicht drauf passen sollen die Bilder nebeneinander Gestapelt werden also die Nächstliegende Karte zB zur hälfte auf der vorherigen
Ich habe das versucht
doch dieser Code nutzt nicht den Gesammten Platz aus, weiß jemand die richtige Formel? oder ist mein ganzer Ansatz grundlegend Falsch?
EDIT2:
Habe es gelöst musste nur die Prozentuale Positionierung nehmen und schon wird alles schön gleichmäßig angezeigt^^
vielen vielen vielen dank

EDIT:
Nächstes Problem (war klar -.-):
Die Bilder haben alle eine Breite von 100
Die (mindestens) 6 Bilder sollen gleichmäßig in dem Feld mit der Breite 518 angezeigt werden, wenn die Bilder nicht drauf passen sollen die Bilder nebeneinander Gestapelt werden also die Nächstliegende Karte zB zur hälfte auf der vorherigen
Ich habe das versucht
Code: Alles auswählen
temp := 0;
temp2 := Spielerhand.Width div (Length(Form1.karten_spieler));
for i := 0 to Length(Form1.karten_spieler) do
begin
Canvas.Draw(temp+2,3,fBilder[Form1.karten_spieler[i]]);
temp := temp + (temp2 div 2);
end;
EDIT2:
Habe es gelöst musste nur die Prozentuale Positionierung nehmen und schon wird alles schön gleichmäßig angezeigt^^
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
theo hat geschrieben:Nö. Objekte:EugenE hat geschrieben:also soll ich ersma 4 array's erstellen und dann die bilderdaten darin speichern?oder geht das auch alles in eine arrayvariable?
TMoveBitmap=class
fLeft:Integer;
...
fBitmap:TBitmap;
...
end;
Dann eine TObjectList mit diesen füllen.
Habe das jetzt versucht, die TMoveBitmap besitzt die Werte , diese Klasse füge ich dann in eine ObjectList ein aber die Liste enthält dann keine Werte wie zB. fLeft usw ,
was habe ich falsch gemacht?^^