![]() |
Hilfe meine Dame-Spiel geht nicht :(
Liste der Anhänge anzeigen (Anzahl: 1)
:cry:
kann mir jemand aushelfen bei meinen dame spiel? Ich weiß nicht warum es fasch abläuft und habe mich echt lange damit beschäftigt. Wenn ihr interrese habt dann könnt ihr mir ja helfen. danke, danke, danke Fastdeath ps: habe den quelltext für euch kommentiert hoffe ihr blickt durch |
Re: Hilfe meine Dame-Spiel geht nicht :(
es scheint ein fehler in der logik zu sein die phase 3 oder 4 fängt nie an.
|
Re: Hilfe meine Dame-Spiel geht nicht :(
Der Quelltext ist sehr krass, ich habe nur mal eben in Unit1.pas reingeschaut.
Ich bin mir ganz sicher, dass man das mit einem Bruchteil des Codes hinbekommen könnte.. Tut mir leid dass ich jetzt keine wirkliche Hilfe gegeben habe, vielleicht schaue ich zuhause mal rein. |
Re: Hilfe meine Dame-Spiel geht nicht :(
-
Edit: Sorry |
Re: Hilfe meine Dame-Spiel geht nicht :(
Deine Dame-Threads werden aber auch immer mehr...
Wie auch immer, wenn dein Problem ist, dass Spieler "O" nicht setzen kann, liegt's daran dass du das noch nicht programmiert hast. Das Bewegen der Steine von Spieler "X" funktionierte als ich es getestet habe nicht immer aber hin und wieder (wobei das auch an irgendwelchen Dameregeln liegen könnte die ich nicht kenne) Dann beschreibe doch bitte was genau in deinem Quelltext passiert. Da ich Delphi 4 habe kann ich nur den Quelltext sehen und das Programm auch nicht aus Delphi heraus starten. Kommentare sind auch nicht drin. |
Re: Hilfe meine Dame-Spiel geht nicht :(
Wenn du schon für jedes Feld ein Label nimmst. Dann nimm doch gleich ein Array und erstell die Labels zur Laufzeit.
Ich würde jedenfalls den ganzen Code in die Tonne schmeißen. Ich denke ein DrawGrid würde sich hier anbieten. Dazu würde ich Klassen nehmen, TSpielstein wo die Position, der Typ und die Farbe enthalten ist und die Klasse TSpieler, die ein Array von Spielsteinen besitzt und wo auch die verbleibende Anzahl vermerkt ist. |
Re: Hilfe meine Dame-Spiel geht nicht :(
ok so sollte der quell text funktionnieren
das spiel basiert auf labels und arbeitet mit deren inhalt mit den clicken auf spielstart begint das spiel: - j (die variable die die phasen des spiels beschreibt) wird auf 1 gesetzt - das spielfeld wird gemahlt nun gehts los : ein klick auf ein spielfeld löst eine onclick prozedure aus beim ersten click ist j=1 also beginnt die 1.phase: 'die spieler wählt spielstein aus phase' der sender der onclick prozedure ist gleichzeitig das eingelesene spiellabel jedes der 64 möglichen spiellabels labels kriegt eine position zugeorndnet spielfeld 11 = label11 = x=1 y=1 ... spielfeld 24 = label24 = x=2 y=4 ... usw. die prozedure ist zu ende und j wird auf 2 erhöht beim 2. klick ist j=2 also beginnt die 2 phase: 'die spieler wählt spielstein zum hin bewegen oder zum hin springen aus' zuerst werden die labels errechnet wo man sich hinbewegen oder springen kann mit den in phase 1. erkannten x und y werte Bsp.: eins nach oben und nach vorne x+1 und y+1= sz1x und sz1y (es gibt 4 richtungen in die man sich bewegen kann und in die man sprnigen kann) nun errechnet das programm mit den koordinaten für die bewegungen die passenden labels jetzt unterscheiden wir ob das spiellabel eine dame oder ein normaler spielstein ist (XX oder X) denn der normale spielstein kann blos in 2 der 4 richtungen springen oder sich bewegen bei der bewegegung wird das spiel label auf '' gesetzt und das angeklickte label wenn alles stimmt auf 'X' bzw. 'XX' gesetzt bei einen sprung für die varriabel k dazu das j wieder später um ein runter gesetzt wird damit man noch mal an der Reihe ist am ende wird wieder j um 1 erhöht jetzt folgen phasen 3 und 4 die sind gleich wie 1 und 2 nur funktionen mit "O" und "OO" natürlich bewegen sich die steine auch in die andere richting sobald sich j auf 5 erhöht wird es wieder auf 1 zuruck gesetz spieler X fängt wieder mit phase 1 an aber es geht nicht wie es sollte :( |
Re: Hilfe meine Dame-Spiel geht nicht :(
Zitat:
Delphi-Quellcode:
Mehr als bis 3 geht das ganze gar nicht
j:=j+1;
if j=3 then j:=1; und die Prüfung auf j = 5 ist im ganzen Code nicht vorhanden |
Re: Hilfe meine Dame-Spiel geht nicht :(
stimmt ich komme nicht auf fünf ich habe euch die version mit
Delphi-Quellcode:
reingestellt
if j=3 then j:=1;
aber verändert man es auf 5 gehts genau so wenig ich wollte nur prüfen ob überhaupt die phasen 1 und 2 richtig ablaufen |
Re: Hilfe meine Dame-Spiel geht nicht :(
So, endlich Feierabend....
Patrick war so ehrlich und hat es ausgesprochen und da möchte ich mich anschließen. Ich meine auch, dass der Quelltext in die Tonne gehört und du das geplanter angehen musst. Bei dem Stil verlierst du ganz schnell den Überblick, und wie ich das sehe fehlt da noch erheblich viel im Quelltext. Wenn du nicht glaubst, dass das z.B. mit Hilfe von Klassen und Objekten einfacher geht, oder dass das komplizierter wäre, schau dir meinen Beispiel-Code hier mal an. Das bildet einiges bei dir ab und ist wesentlich übersichtlicher. Das mit den Labels verstehst du in ein paar Monaten selbst nicht mehr und spätestens wenn ein Programm größer und komplexer wird (okay, das trifft auf dieses Spiel vielleicht nicht zu) ist diese Unstruktur das Todesurteil. Schau dir mal folgenden Code an, das stellt eine Tabelle mit Spielfeldern dar. Da fehlt zwar noch einiges, aber das ist ein gutes Beispiel, um den OO-Ansatz (im Minimalumfang) zu zeigen. Im FormCreate() werden die Array mit Instanzen von TFeld befüllt. Jedes dieser Felder kann man dann im weiteren Verlauf des Spiels ganz einfach verwenden, wie es auch im BitBtn1Click() gezeigt wird. Ich hoffe das hilft dir etwas weiter und zeigt, dass dieser Ansatz vernünftiger ist.. :angel: Meine Empfehlung ist es, es direkt richtig zu machen. Damit erspart man sich viel Verzeiflung und Enttäuschung.. das ist meine Erfahrung.
Delphi-Quellcode:
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TFeld = class; TForm1 = class(TForm) DrawGrid1: TDrawGrid; procedure FormCreate(Sender: TObject); procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); private Fields: array[0..2, 0..2] of TFeld; public end; TFeld = class public Text: string; X: Integer; Y: Integer; constructor Create(X, Y: Integer); procedure Draw(Canvas: TCanvas; Rect: TRect); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); begin Fields[1][1].Text := '1'; DrawGrid1.Repaint; end; procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin Fields[ACol][ARow].Draw(TDrawGrid(Sender).Canvas, Rect); end; procedure TForm1.FormCreate(Sender: TObject); var x, y: Integer; begin for x := 0 to High(Fields) do for y := 0 to High(Fields[x]) do begin Fields[x][y] := TFeld.Create(x, y); Fields[x][y].Text := 'X'; end; end; { TFeld } constructor TFeld.Create(X, Y: Integer); begin Self.Text := ''; Self.X := X; Self.Y := Y; end; procedure TFeld.Draw(Canvas: TCanvas; Rect: TRect); begin Canvas.TextOut(Rect.Left + 5, Rect.Top + 5, Text); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz