Autor Beitrag
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 22:23 
Genau deshalb doch refresh und neuzeichnen.
Du kriegst das sonst einfach nicht vernünftig hin.
Lies nochmal meinen Post oben und überlege, was ich dir damit sagen will; vorallem das mit der Zeichenprozedur.
Boldar
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 28.06.11 20:42 
Hallo mal wieder :D

Also @Boldar... ich hab bisher noch keine Ahnung, wie das mit Klassen funktioniert :D Und das mit Refresh hab ich mehrmals versucht...
Hab dann ne Weile überlegt und dann kam mir die Idee.....

Ich mal den Bauer einfach auf seiner Zukünftigen Position nochmal.... hab ich so gemacht:

ImSpielfeld.Canvas.Draw(IndexB*50+10,((IndexZ+o)*50)+5,bit);

Das funktioniert auch einwandfrei....allerdings ist dann an der Startposition des Bauern immernoch ein Bauer dargestellt....dieses Probelm wollte ich so beheben:

with ImSpielfeld.Canvas do begin
Brush.Color := clwhite;
with Spielfeld[IndexB,IndexZ] do rectangle(IndexB*50,IndexZ*50,IndexB*50+50,IndexZ*50+50);
end;

Allerdings fehlt hier noch eine if-Anweisung, wann er weiß und wann schwarz malen soll.....
Hast du da eventuell ne Idee für die Bedingung?
Hab's schon versucht mit

if (IdenxZ(AusgangspositionX) = 1 or 3 or 5 or 7) and (IdenxB(AusgangspositionY) = 1 or 3 or 5 or 7) then begin
....


Weil wenn beide Koordinaten ungerade bzw. gerade sind ist es schwarz und wenn ein Koordinat gerade und der Andere ungerade ist, ist es weiß....
Weiß jemand warum das nicht klappt? :D


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: Di 28.06.11 21:54 
Zitat:
Weil wenn beide Koordinaten ungerade bzw. gerade sind ist es schwarz und wenn ein Koordinat gerade und der Andere ungerade ist, ist es weiß....
Weiß jemand warum das nicht klappt? :D


Das klappt schon in der Theorie nicht, weil deine Annahmen falsch sind. Die Felder a1([1,1]) und a3([1,3]) sind beide schwarz. Eine richtige Bedingung wäre zB wenn (X+Y) mod 2 = 0 dann schwarz ansonsten weiß.

Im Übrigen ist dein Ansatz des "nur die Figur neuzeichnen die bewegt wird und die alte Position übermalen" etwas unschön. Es wäre gut (wie Boldar dir übrigens auch schon vorgeschlagen hat), wenn du dir eine Funktion schreibst, die dir das komplette Feld inklusive Figuren so wie es gerade abgespeichert ist zeichnet. So kannst du nämlich deine Spiellogik weitesgehend von der Darstellung des Spiels trennen und musst nicht einzelne Bereiche neuzeichnen. Nach einer Bewegung rufst du einfach die zeichenprozedur auf und schwupps hast du ein aktualisiertes Feld auf dem Bildschirm.
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 28.06.11 22:02 
jop :D vielen Dank dir Jannik :D das mit mod 2 = 0 oder <> 0 hat funktioniert.

Bei mir geht es jetzt nicht mehr um schön oder unschön... übermorgen ist bei uns Abgabetermin und das Programm läuft, wie es soll :D

dank allen, die mir hier geholfen haben. Ich bin grad soooo gut drauf :D
Hat aber i.wie viel Spaß gemacht....

Was meint ihr, würde mein "Können" in Delphi verbessern? Irgendwelche Übungen oder Programmvorschläge? :D

DAAAANNNNKEEEE euch :D !

Timo
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Mi 29.06.11 11:13 
Da du das jetzt schon einmla gemacht hast, ist das sicher langweilig, aber sonst mach dir dieses Programm nochmal und versuch das so anzugehen. Du willts im OnClick folgendes stehen haben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
CurrentFigur: TPoint;                                       // am schönsten wäre ein eigener Typ (z.B: TFigur), der Koordinaten, Farbe und so was enthält (schau dir dazu "record" an)
FigurClicked: Boolean;

Procedure Image1.OnClick(Sender: TObject)
var
  Maus: TPoint;
begin
  Maus := Image1.ScreenToClient(Mouse.CursorPos);
//  CurrentFigur := getFigur(Maus);                           // welche Figur ist angeklickt - bräuchtest du nur, wenn du mit mehr als mit TPoint als Figur arbeitest - so reicht auch:
  CurrentFigur := Maus;
  if FigurClicked
    begin
    Act(Maus, CurrentFigur);                                // führt den Zug durch
    FigurClicked := False;
    end;
  else if IsAFigur(CurrentFigur)                            // wenn auf eine Figur geklickt wird
    begin
    SetPositionPossibilities(CurrentFigur);                 // zeigt  dem Benutzer an, wo man hinspringen kann
    FigurCicked := True;
    end;
  else
    ShowMessage("Fehler !!");

  Image1.invalidate;                                        // zeichnet alles neu
end;


Dann musst du dir überlegen, wie du "function getFigur(P: TPoint)", "procedure Act(M: TPoint, Fig: TPoint)", "function IsAFigur(Fig: TPoint): boolean", "SetPositionPossibilities(Fig: TPoint)" und das "Image1.OnPaint" aufbaust ;)


Wenn du dann zur Objektorientierung gehst, kannst du daraus machen: "CurrentFigur.act", "CurrentFigur.IsAFigur", "CurrentFigur.SetPositionPossibilities", "CurrentFigur.draw".
Aber das ist ein anderes Thema :P

Gruß, Thomas
Timo93 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Sa 02.07.11 15:44 
Also....falls es euch interessiert :D

Mein Lehrer hat gemeint, es werden so zwischen 15 und 10 Punkten. :D
Ist ja schließlich mein erstes Jahr Info :D, da werden normalerweise noch nicht solche Projekte "versucht" oder auch beenden.
Wollte nur nochmal vielen lieben Dank sagen, weil ich finde, dass hier die Hilfe von Leuten in Foren teilweise viel zu wenig gewürdigt wird :D

Viele Grüße

Timo