Kartenspiel

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Schau dir mal die Funktionen mit message an in TWinControl die musst du überschreiben bzw events die die auslösen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

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 Mausfunktionen Mousedown etc sind bereits ab TControl da.
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.

EugenE
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:

Beitrag von EugenE »

also soll ich ersma 4 array's erstellen und dann die bilderdaten darin speichern?oder geht das auch alles in eine arrayvariable?

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

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?
Nö. Objekte:

TMoveBitmap=class
fLeft:Integer;
...
fBitmap:TBitmap;
...
end;

Dann eine TObjectList mit diesen füllen.

EugenE
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:

Beitrag von EugenE »

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 ^^

monta
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:

Beitrag von monta »

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.

EugenE
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:

Beitrag von EugenE »

ja das zeichen ist ja kein problem^^ , das verschieben, das drag&drop auf andere karten usw das macht mir probleme ich weiß nicht wie ich es realisieren soll :(

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie wärs denn mit Drag&Drop ? Nimm einfach für jede Karte ne Image Komponente und verschieb die.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
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:

Beitrag von monta »

Alternativ gehts auch ohne.

Du kannst es ja auch so machen, das man einfach auf die Karte klickt und als zweites auf die Stelle, wo sie hin soll und dann kannst du die Karte verschiebene, ohne das sie die ganze Zeit am Mauszeiger 'klebt'.

EugenE
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:

Beitrag von EugenE »

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
Zuletzt geändert von EugenE am Mo 19. Mär 2007, 00:42, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

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

EugenE
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:

Beitrag von EugenE »

hm das mit der TList nehme ich mir später zu herzen ;)

habe jez den Bildern eine Feste Höhe/Breite zugewiesen , diese sind aber schwarz was muss ich noch dazu schreiben?

monta
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:

Beitrag von monta »

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.

EugenE
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:

Beitrag von EugenE »

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

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;
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^^

EugenE
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:

Beitrag von EugenE »

theo hat geschrieben:
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?
Nö. Objekte:

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?^^

Antworten