| Autor |
Beitrag |
Timo93 
      
Beiträge: 23
|
Verfasst: Sa 25.06.11 22:24
Okay. Hab ich gemacht.....kann ich die Werte die bei diesem Vorgang rauskommen auch i.wo einsehen?
IndexZ := ((Mouse.CursorPos.X -50) div 50);
IndexB := ((Mouse.CursorPos.Y -50) div 50);
...keine Ahnung, ob ich das jetzt richtig verstanden habe.
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Sa 25.06.11 22:39
Die Werte kannst du dir ja einfach in nem Label o.ä. reinschreiben und so einsetzen, oder du nutzt den Debugger ^^
Und nein so wirds nicht gehen mouse.cursorpos liefert dir die Position des Mauszeigers auf dem Desktop. Um das auf dein Image anzugleichen, müsstest du noch die Position deiner Form auf dem Desktop und die Position deines Images auf der Form davon abziehen - oder du nimmst gleich die X und Y Werte die dir OnMouseDown liefert.
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Sa 25.06.11 22:48
Kannst du mir nen kleinen Anstoss geben?
Wie schreib ich das denn, dass da nur die MousePosition im Image genommen werden soll und durch die Breite geteilt werden soll......
Bestimmt hast du dir schon mit der Hand an die Stirn geschlagen, wenn du meine unwissenden Beiträge hier liest
Timo
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Sa 25.06.11 23:12
Okay....hab zu voreilig geschrieben.....
Habs jetzt kapiert, was du mit den x, y werten direkt aus OnMouseDown gemeint hattest und die Felder sind so anklickbar.
Wie kann ich das jetzt aber auf die Figuren übertragen? 
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: So 26.06.11 10:31
Denk halt mal nach, wenn du bei jeder Kleinigkeit hier sofort nachfragst wird das bestimmt nichts 
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: So 26.06.11 11:08
Also ich hab jetzt schon ne Weile nachgedacht
Aber ich komm einfach nicht drauf, wie ich diese Indexe.....(geht ja dann 2 mal von 1 bis  in die Prüfung der Schachzüge einbauen kann....
Warum muss ich immer nur so schwere Sachen machen -.- ^^
Timo
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: So 26.06.11 21:59
Jannik  Ich hab schon voll die Fortschritte gemacht....vielen Dank dir
Das Programm läuft jetzt soweit, dass die Bauern machen was sie solln
Allerdings ist das alles noch relativ Theoretisch und man sieht noch nichts.......
ich hänge gerade an dem Punkt, die Images der Bauern auf die Anwendungen zu übertragen....d.h welches Image ist auf welchem Feld....
ich hoffe aber, dass ich das noch hinbekomme
Wollte mich nur nochmal bedanken.
Viele Grüße Timo
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: So 26.06.11 22:10
Immer wieder gerne 
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 14:51
Hey Jannik....nochmal ne Frage....wie kann ich den da z.B ein Bild für alle 8 schwarzen Bauern einfügen.... oder wie stell ich das am besten dar?
Timo
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mo 27.06.11 17:02
Angenommen du hast das Bild eines Bauern in bauer.bmp gespeichert und der Hintergrund vom Bauernbild ist in der Farbe clFuchsia:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var bit:tbitmap;
bit:=tbitmap.Create(); bit.LoadFromFile('bauer.bmp'); bit.TransparentColor:=clFuchsia; bit.Transparent:=true;
image1.canvas.draw(20,20,bit); |
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 18:40
Muss ich das dann für jede Figur extra machen?
oder geht das dann so ähnlich:
Delphi-Quelltext 1: 2: 3: 4: 5:
| for i:= 1 to 8 do begin if Figur = Bauer then begin ImSpielfeld.canvas.draw((50*i)+10,105,bit); end; end; | Weil wie kann ich die Figuren denn jetzt bewegen, wenn z.b der Bauer von B1 auf C1 will?
Timo
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mo 27.06.11 18:57
So wie du's geschrieben hast geht es ungefähr.
Wenn du keine animierte Bewegung brauchst, ist das Bewegen doch ganz einfach, du setzt in deinem Spielfeldarray die alte Position des Bauern auf "leer" und die neue Position auf "Bauer". Dann einmal das SPielfeld neuzeichnen und schon hat sich dein Bauer bewegt.
P.S. Wenn der Bauer von B1 auf C1 will, sollte ihm jemand sagen, dass er das nicht darf ^^
|
|
beastofchaos
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: Mo 27.06.11 19:33
Nochmal zur Mouse-Position: Es gibt auch die Methode von Klassen namens "ScreenToClient(Mouse.CursorPos)". Das kansnte für Images, Forms, etc. benutzen ohne, dass du selbst das berechnen musst  (Spart Quelltext)
Gruß, Thomas
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 19:42
@ beastofchaos
Jo hatte ich schon versucht, aber dann durch das einfügen von Indexen übebrückt bei OnMouseDown....
somit hat gerade jedes Feld seinen eigenen Index....
@ Jannik: wie kann ich das denn neu zeichnen lassen?
Bisher ist es schon so, dass da dann dransteht, wenn der Bauer von B1 auf C1 gezogen ist:
wenn ich C1 anklicke := Sie haben einen schwarzen Bauern ausgewählt.
und wenn ich B1 anklicke := Spielfeld ist leer, es wurde keine Figur ausgewählt.
Allerdings bewegen sich die Images die ich für die Bauern eingefügt habe nicht mit, wenn sich ein Bauer bewegt
Ich muss also 'Bauer' irgendwie ein Image zuordnen....das bekomm ich aber i.wie nicht gebacken.
Bisschen komisch.....
Grüße
Timo
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 27.06.11 19:47
Hast du jetzt einzelne Images für die Figuren?
Das war gerade das, was du nicht machen solltest.
Du musst die Bilder in ein TBitmap laden, und dann wie oben mit canvas.draw zeichnen. Siehe auch den Beitrag von Jann1k.
Bedenke: Bitmap!=Image.
Mit canvas.refresh entfernst du alles gezeichnete.
Dann musst du mit draw nochmal alle Figuren mit den geänderten Koordinaten zeichnen.
Am besten machst du dir eine Klasse Figur, welche Koordinaten und Bild speichert sowie eine Methode zur Validitätsprüfung der Züge bereitstellt.
mfg Boldar
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 20:13
Jap....hab's wieder geändert.
Hab die Images raus und über das Bitmap die Figuren zeichnen lassen.
Delphi-Quelltext 1: 2: 3: 4:
| for i:= 1 to 8 do begin ImSpielfeld.canvas.draw(50*i+10,104,bit); ImSpielfeld.canvas.draw(50*i+10,354,sec); end; |
bit sind die schwarzenBauern
sec sind die weißenBauern
Jetzt sieht das schonmal ganz gut aus und ich hab auch nicht Hunderte Images für die ganzen Bauern
Wo mach ich das am besten rein mit dem Canvas.refresh und dem Zeichnen?
Geht das bei dem Button der die Züge ausführt?
Da wird grade alles geändert....
Timo
Danke für die schnelle Antwort Boldar
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mo 27.06.11 20:16
Naja, ich würde das Zeichnen überall dort hinmachen, wo sich etwas ändert. D.h. nach jedem Zug.
Für diesen Beitrag haben gedankt: Timo93
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 20:52
Also mach ich das bei dem Button 'Mach den Zug!' rein  . Alles klar.
Wie kann ich denn das Feld speichern, wie es vorm letzten Zug war....dass ich das dann wieder öffne und nur einen Zug hinzufüge.
oder was macht Canvas.Refresh genau? Alle gezeichneten Figuren löschen? 
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 27.06.11 21:13
refresh löscht alles.
Das heisst, du musst danach alles neuzeichnen.
Am besten machst du dir da eine Prozedur. Wenn du die Figuren als Objekte hast, kannst du die in einem array verwalten und dann das array mit ner schleife durchgehen und alle zeichnen. Mach dir dafür am besten eine zeichenprozedur, in der zuerst refresh aufgerufen wird und dann alles neugezeichnet wird.
|
|
Timo93 
      
Beiträge: 23
|
Verfasst: Mo 27.06.11 21:53
Hab das jetzt hinbekommen, dass sich die Figur immer richtig zeichnet, bei nem Zug von nem Bauer. (Ohne alles zu löschen)
Nächstes Problem: An der Ausgangsposition des Bauern ist immer noch das Bild eines Bauern gemalt...kann man das übermalen, oder wieder löschen?
Timo
|
|