Autor Beitrag
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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 :D

Timo
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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? :D
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 26.06.11 10:31 
Denk halt mal nach, wenn du bei jeder Kleinigkeit hier sofort nachfragst wird das bestimmt nichts ;)
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 26.06.11 11:08 
Also ich hab jetzt schon ne Weile nachgedacht :D

Aber ich komm einfach nicht drauf, wie ich diese Indexe.....(geht ja dann 2 mal von 1 bis 8) in die Prüfung der Schachzüge einbauen kann....
Warum muss ich immer nur so schwere Sachen machen -.- ^^

Timo
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 26.06.11 21:59 
Jannik :D Ich hab schon voll die Fortschritte gemacht....vielen Dank dir :D
Das Programm läuft jetzt soweit, dass die Bauern machen was sie solln :D

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

Wollte mich nur nochmal bedanken.

Viele Grüße Timo
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 26.06.11 22:10 
Immer wieder gerne ;)
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  
var bit:tbitmap;

  //bauernbild laden
  //das solltest du nicht bei jedem zeichnen neu machen
  //sondern nur einmal am anfang des programms
  bit:=tbitmap.Create();
  bit.LoadFromFile('bauer.bmp');
  //das bauer.bmp bitte durch eine relative Pfadangabe ersetzen

  //hier setzen wir die transparenz des Bildes
  //damit der hintergrund nicht mitgezeichnet wird
  bit.TransparentColor:=clFuchsia;
  bit.Transparent:=true;

  //mit draw zeichnen wir das Bauernbild auf unser Spielbrett
  //die ersten beiden Parameter bestimmen die Position des Bildes
  //der letzte gibt an, welches Bild gezeichnet wird
  image1.canvas.draw(20,20,bit);
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mo 27.06.11 18:40 
Muss ich das dann für jede Figur extra machen?
oder geht das dann so ähnlich:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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? :D
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 :D
Ich muss also 'Bauer' irgendwie ein Image zuordnen....das bekomm ich aber i.wie nicht gebacken.
Bisschen komisch.....

Grüße
Timo
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mo 27.06.11 20:13 
Jap....hab's wieder geändert.
Hab die Images raus und über das Bitmap die Figuren zeichnen lassen.
ausblenden 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 :D
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 :D

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mo 27.06.11 20:52 
Also mach ich das bei dem Button 'Mach den Zug!' rein :D. 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? :D
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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? :D

Timo