Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 15:53 
Hallo!

Ich möchte ein Domino-Programm schreiben, habe bisher aber nur die Steine und 1 Bitmap, mit dem ich diese über das Spielfeld bewegen und um 90° drehen kann. Das Spielfeld ist ebenfalls ein Bitmap. Durch Mausklick wird der "Stein" abgelegt, indem er einfach an der aktuellen Position auf das Spielfeld-Bitmap gezeichnet wird:
ausblenden Delphi-Quelltext
1:
Board.Canvas.Draw(imgStein.Left, imgStein.Top, imgStein.Picture.Graphic);					


Ich denke, das ist recht gut und einfach gelöst so, denn abgelegte Steine werden ja nicht mehr bewegt.

Doch nun weiss ich nicht weiter: Wie merke ich mir im Programm, wo welcher Stein abgelegt wurde und wieviele Punkte er jeweils hat, damit ich weiss, wo und wie (senk- oder waagrecht) ich neue Steine anfügen kann?

Ich dachte zunächst an ein Array oder eine Liste mit Angaben wie X-, Y-Position, Anzahl der Punkte, senk- oder waagrechte Lage, so etwas in der Art. Aber ich komme nicht weiter.

Habt ihr Ideen, wie man eine einfache Steine-Verwaltung machen könnte?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Fr 04.06.10 16:22 
Mach einfach ein Array von einem Record:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type TDirection = (dWaagerecht, dSenkrecht);
type TDominostein = record
  X, Y: Integer;
  Points: Integer;
  Direction: TDirection;
end;

{...}

var
  Dominos: array of TDominostein;
  //weitere Anweisungen

Grüße,
Stundenplan.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 16:58 
user profile iconStundenplan hat folgendes geschrieben Zum zitierten Posting springen:
Mach einfach ein Array von einem Record:

Danke für deinen Tipp! Ich fürchte aber, ich weiss nicht so recht, wie ich das handhaben soll, was dort eingetragen wird und wie. Vor allem, wie ich abfragen soll, ob ein anderer Stein passt.
Im Moment habe ich keinen Plan...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 04.06.10 18:07 
Hey,

ich würd mir ein 2D-Array so groß wie das Spielfeld machen, un da dann sie Punkte eintragen. Und befvor du einen neuen Stein ablegst, guckst du im Array ob die 2 anliegenden Felder belegt sind, wenn ja dann musst du noch gucken ob die Zahl stimm. Wenn das auch der Fall ist, dann kannst du den Stein dort ablegen und die 2 Zahlen des Steins im Array ablegen.

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 18:15 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
ich würd mir ein 2D-Array so groß wie das Spielfeld machen, un da dann sie Punkte eintragen.

Daran habe ich auch schon gedacht, es aber wieder verworfen, denn dabei muss das Spielfeld dem Array entsprechen, wie beim Schach, oder? Ich will nämlich Steine ablegen, wo ich will - es gibt keine Felder, die einem "Platz" im Array entsprechen würden.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 04.06.10 18:19 
Hey,

das geht auch. DU musst dir dann halt nur ne Prozedur schreiben, die das Array an der entsprechenden Stelle vergrößert un die Daten ggf. verschiebt. Wenn du rechts bzw. unten erweitern willst, dann is das ganz einfach, einfach die Größe des Array ändern. Wenn du oben bzw. links erweitern willst, dann musst du erst das Array vergrößern un dann die Daten nach rechts bzw. unten erschieben. So schwer is das eig gar nich ;)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 18:42 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
das geht auch. DU musst dir dann halt nur ne Prozedur schreiben, die das Array an der entsprechenden Stelle vergrößert un die Daten ggf. verschiebt. Wenn du rechts bzw. unten erweitern willst, dann is das ganz einfach, einfach die Größe des Array ändern. Wenn du oben bzw. links erweitern willst, dann musst du erst das Array vergrößern un dann die Daten nach rechts bzw. unten erschieben. So schwer is das eig gar nich ;)

Ich weiss nicht, wie ich das machen soll! Es ist einfach, das Image mit dem jeweiligen Stein zu platzieren, aber es ist dann ja nur noch eine Zeichnung.

Ich möchte nur ein einziges Image zum Setzen der Steine verwenden, ziehe es dann an sie richtige Position und klicke darauf, um den Stein abzulegen. Dann wird die Grafik auf das Board gezeichnet und das Stein-Image wird leer, damit man einen neuen Stein aufnehmen kann.

Ich kriege die Grafik mit dem Array im Kopf nicht zusammen. Das Array an sich ist keine grosse Sache, es muss nicht mal dynamisch erweiterbar sein, sondern nur soviele Positionen haben, wie es Steine gibt. Alles, was im Array kein Stein ist, ist eben leer. Logisch.
Ich muss, denke ich, beim Ablegen jedesmal folgende Werte hineinschreiben: X- Y-Position des Steins, waag- oder senkrecht, Punktanzahl links bzw. oben, rechts bzw. unten.
Aber:
1. Wo im Array schreibe ich das? 1. Stein, 1. Position im Array, 2. Stein, 2. Position, 3.-3., 4.-4. usw.?
2. Wie soll das Programm am Board erkennen, wo welcher Stein liegt? Es ist ja alles bloss eine Grafik ohne Koordinaten!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 04.06.10 18:51 
@1: rischtisch
@2: Eben weil es bloß eine Grafik ist speichert man die Daten ja im Array. Wen du es mit TDominostein machen willst, wie Stundenplan es geschriben hat, dann reicht ein eindimensionales Array, mit der Größe gleich der Anzahl der Steine. Mithilfe der Daten im Array prüfst du dann ob ein Stein abgelegt werden darf oder nicht, wenn ja legst du ihn so ab wie du das grad beschrieben hast und trägst einen neuen Stein ins Array ein. Wenn der Stein nicht passt machst du einfach nix, bzw. sagst dem User, das er da keinen Stein ablegen darf.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 19:06 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Wen du es mit TDominostein machen willst, wie Stundenplan es geschriben hat, dann reicht ein eindimensionales Array, mit der Größe gleich der Anzahl der Steine.

Soweit klar!

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Mithilfe der Daten im Array prüfst du dann ob ein Stein abgelegt werden darf oder nicht

Ich kriege das nicht in meinen Kopf: Wie soll das Program wissen, ob ich den Stein an einer bestimmten Stelle ablegen darf? Ich meine, wie weiss es, welche Position im Array abgefragt werden muss?

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
wenn ja legst du ihn so ab wie du das grad beschrieben hast und trägst einen neuen Stein ins Array ein.

Wieder taucht die Frage auf: Wie weiss das Program, an welche Position im Array geschrieben werden mus? >>> :idea: Ach ja, mit dem Stein weiss es das! 15. Stein = 15. Position!

Ich glaube, ich begreife das langsam: Ist ja vollkommen wurscht, wie das grafisch aussieht und ob ein Stein Left 27, Top 88 liegt oder sonstwo! Jeder Stein repräsentiert einen Arrayplatz, und dort sind seine Werte gespeichert, und damit weiss ich als Spieler und das Programm weiss als Spieler, ob das Ablegen möglich ist oder nicht!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 04.06.10 19:18 
Rischtisch, und das Programm muss nich wissen, wo der Stein im Array liegt, den es prüfen muss. Das Programm prüft einfach jeden Stein^^ Wie heißt es doch so schön, der PC is SCHNELL, aber DUMM :)

so sieht das ganze dann aus:
ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
type
  TDirection = (diVert, diHorz);
  TDomino = packed record
    //X-Koordinate des oberen/linken Steins
    // Y-Koodinate des oberen/linken Steins
    // |  PunktWert des oberen/linken Steins
    // |  |   PunktWert des unteren/rechten Steins
    X, Y, P1, P2: Integer;
    Dir: TDirection;
  end;
  TDominoArray = array of TDomino;

var
  DominoList: TDominoArray;

//berechnet den Abstand zwischen 2 Punkten
//@P1: Punkt 1;
//@P2: Punkt 2;
//@result: Abstand der Beiden Punkte;
function GetDist(P1, P2: TPoint): Integer;
begin
  result := Abs(P1.X-P2.X) + Abs(P1.Y-P2.Y);
end;

//Prüft ob ein Domino abgelegt werden kann oder nicht und
//legt ihn ggf in das Array
//@d: Domino der geprüft/abgelget werden soll;
//@result: TRUE wenn Stein abgelegt wurde, sonst FALSE;
function TForm1.CheckDomino(d: TDomino): Boolean;
var
//aktueller Domino der Liste
  d2: TDomino;
//Koordinaten des oberen/linken Teils des Domino
//|   Koordinaten des unteren/rechten Teils des Domino
//|   |   Koordinaten des oberen/linken Teils von d2
//|   |   |   Koordinaten des unteren/rechten Teils von d2
  P1, P2, P3, P4: TPoint;
//Schleifenariable
  i: Integer;
begin
  result := false;

  //die beiden Punkte des Domino ermitteln
  P1 := Point(d.X, d.Y);
  if d.Dir = diVert then begin
    P2 := Point(d.X + 1, d.Y);
  end else begin
    P2 := Point(d.X, d.Y + 1);
  end;

  for i := 0 to High(DominoList) do begin
    d2 := DominoList[i];
    //die beiden Punkte des Domino ermitteln
    P3 := Point(d.X, d.Y);
    if d.Dir = diVert then begin
      P4 := Point(d.X + 1, d.Y);
    end else begin
      P4 := Point(d.X, d.Y + 1);
    end;

    //Dominozahlen Prüfen
    //d oben/links MIT d2 oben/links
    if (GetDist(P1, P3) = 0then exit; //Abstand ist 0, beide Steine liegen aufeinander
    if (GetDist(P1, P3) = 1and (d.P1 <> d2.P1) then exit; //Abstand ist 1, aber Steine haben nicht den selben Wert
    //d oben/links MIT d2 unten/rechts
    if (GetDist(P1, P4) = 0then exit;
    if (GetDist(P1, P4) = 1and (d.P1 <> d2.P2) then exit;
    //d unten/rechts MIT d2 oben/links
    if (GetDist(P2, P3) = 0then exit;
    if (GetDist(P2, P3) = 1and (d.P1 <> d2.P1) then exit;
    //d unten/rechts MIT d2 unten/rechts
    if (GetDist(P2, P4) = 0then exit;
    if (GetDist(P2, P4) = 1and (d.P1 <> d2.P2) then exit;
  end;
  //Wenn hier noch nicht beendet, dann passt der Stein
  //also Stein in die Liste eintragen
  SetLength(DominoList, Length(DominoList) + 1); //Array um 1 Element erweitern
  DominoList[High(DominoList)] := d; //Stein in Letztes Element eintragen
 
  result := true
end;

ich habs nich getestet, aber eig sollte es so hin haun, wenn nich hast du n Ansatz an dem du weiter arbeiten kannst

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 19:44 
Zuerst: Vielen Dank, das hätte ich nicht hinbekommen!
Nun ja, der 1. Stein klappt ja, aber jeder weitere nicht: :(
ausblenden Delphi-Quelltext
1:
  if not CheckDomino(aValue) then Caption := Caption+'NO!';					

Die ganze Prozedur sieht so aus:
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:
procedure TForm1.imgSteinClick(Sender: TObject);
var
  aValue: TDomino;
begin
 if isClick then  //OnClick nicht nach Verschieben+Maustaste loslassen auslösen
 begin
  aValue.X := Left;
  aValue.X := Top;
  aValue.P1 := 4;
  aValue.P2 := 2;
  aValue.Dir := diVert;

  if not CheckDomino(aValue) then caption := caption+'NO!'//
  else
  with (Sender as TImage) do
  begin
   Board.Canvas.Draw(Left, Top, Picture.Graphic);
   Picture.Bitmap := nil;
  end;
 end;

 isClick := True;
end;

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 04.06.10 20:09 
Hey,

du hast die Position des Steins ja fest im Code, da musst du Mausabhängige Koordinaten berechnen. Angenommen jder Stein is 32*64, also muss jedes Feld 32*32 sein, dann wären die FeldKoordinaten so:
ausblenden Delphi-Quelltext
1:
2:
  aValue.X := Left div 32;
  aValue.Y := Top div 32

Außerdem hast du zwei mal aValue.X ;)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 04.06.10 20:40 
Das Programm macht noch nicht viel, daher weise ich jetzt erstmal einfach iP1 und iP2 die Punktewerte zu. Es macht selbst noch gar nichts.

Also: Ich habe zur Zeit nur 1 Stein (3:6) im Spiel, also:
ausblenden Delphi-Quelltext
1:
2:
iP1 := 3;
iP2 := 6;

Das erste Setzen ist ok.

Dann weise ich zu:
ausblenden Delphi-Quelltext
1:
2:
iP1 := 6;
iP2 := 3;

Aber ab da klappt es schon nicht mehr.

Das BoardImage befindet sich an Left := 0, Top := 0. Die Steine sind 38x74 Pixel gross.

Das klappt auch nicht:
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:
26:
procedure TForm1.imgSteinClick(Sender: TObject);
var
  aValue: TDomino;
begin
 if isClick then  {OnClick nicht nach Verschieben+Maustaste loslassen auslösen}
 begin
(*  aValue.X := Left;
  aValue.X := Top;
*)

  aValue.X := (Sender as TImage).Left div 38;
  aValue.Y := (Sender as TImage).Top div 38;
  aValue.P1 := iP1;//3;
  aValue.P2 := iP2;//6;
  aValue.Dir := diVert;

  if not CheckDomino(aValue) then caption := caption+'NO!'//
  else
  with (Sender as TImage) do
  begin
   Board.Canvas.Draw(Left, Top, Picture.Graphic);
//   Picture.Bitmap := nil;
  end;
 end;

 isClick := True;
end;

Ausserdem verstehe ich immer noch nicht, wie das Programm das Array mit den Mauskooedinaten vergleichen soll, man kann doch nicht pixelgenau einen bestimmten Punkt treffen!
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 05.06.10 00:18 
Hey,

das Programm prüft die Steine ja auch nicht pixelgenau, sondern die Variable X bzw. Y von TDomino gibt die Feldposition an. Ich bin grad bisl durcheinander, was deine Images angeht. Kannst du das Projekt mal hochladen, da guck ich mir das ma an...

€: Ich hab mir ma schnell was zusammen gebastelt. Ich denke es sollte ausreichend kommentiert sein, das du es verstehst. Wenn du trotzdem noch fragen hast, dann kannst du ja nochma schreiben.

MfG Bergmann.
Einloggen, um Attachments anzusehen!
_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 05.06.10 09:28 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
€: Ich hab mir ma schnell was zusammen gebastelt.

Alle Achtung!

Ich habe es so, dass ich die Steine beliebig verschieben kann. Das klappt aber dann mit dem Array zusammen nicht.
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 05.06.10 17:31 
Hey,

in meiner Check-Funktion war ein kleiner Fehler drin. Jetz funktioniert es soweit, das du den 6-3-Stein drehen un platzieren kannst. Überall wo ich im Code was geändert hab hab ich n Kommentar drüber geschrieben. Dann is mir noch aufgefallen, das du globale Variablen benutzt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  Form1: TForm1;
  isClick: Boolean;
  iP1, iP2: Integer;
  DominoList: TDominoArray;

Die sollte man wenn möglich umgehen, die kannst du bei der private Deklaration von Form1 mit rein schreiben (wie ich es mit dem Domino gemacht hab). Und noch ein kleiner Tipp: guck dir ma den Debugger an, da kann man Schritt für Schritt den Code ausführen ( F7 bzw. F8 ), so merkt man wenn was nich stimmt. Wenn du ne Variable markierst un dann STRG+F5 drückst kannst du dir den Wert der Variable angucken. So findet man schnell und sicher Fehler ;)

MfG Bergmann
Einloggen, um Attachments anzusehen!
_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 05.06.10 18:08 
Hallo Bergmann89!
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Dann is mir noch aufgefallen, das du globale Variablen benutzt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  Form1: TForm1;
  isClick: Boolean;
  iP1, iP2: Integer;
  DominoList: TDominoArray;

Die sollte man wenn möglich umgehen, die kannst du bei der private Deklaration von Form1 mit rein schreiben (wie ich es mit dem Domino gemacht hab).
Das wusste ich nicht! Dass man globale Variablen vermeiden sollte, weiss ich, aber warum, weiss ich nicht! Was ist der Unterschied?

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du ne Variable markierst un dann STRG+F5 drückst kannst du dir den Wert der Variable angucken. So findet man schnell und sicher Fehler ;)
STRG+F5 wusste ich auch nicht!

Ich werd's mir anschauen! Danke für deine Geduld und Hilfe!

Grafische Programme - also Spiele - liegen mir offenbar nicht so. Ich hab's mir einfacher vorgestellt. War nahe daran, das Projekt aufzugeben, ich habe z.B. noch keine Ahnung, wie ich das Programm spielen lasse; da gibt es noch so viel... :nixweiss: :?

Dein Code hat einen entscheidenden Vorteil: Er funktioniert! Aber leider verstehe ich ihn nicht. Also, das Prinzip schon, aber nicht so wirklich...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 05.06.10 18:30 
Glück auf, Bergmann!

Habe es erst jetzt getestet! Das ist ja mein Programm! Danke für die Korrektur meines Programms! So stelle ich mir das vor! (Habe zuerst die .exe ausgeführt und dann nur kurz den Sourcecode angeschaut).

Muss erst mal durch den Code durchsteigen, wird sicher etwas dauern! Aber - ja, genau so! :D
Wenn das was wird, wird sicher "bergmann89" im Info aufscheinen!

Ok, andere Steine kommen noch, aber es funktioniert!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 05.06.10 18:38 
Hey,

warum man globale Variablen nur ur Nt verwenden sollte weiß ich eig auch nich geanz genau^^ Warscheinlich der Übersicht halber, bzw um Ressourcen zu sparen, denn globale Variablen belegen immer Speicher, Objekt-Variablen nur dann, wenn das Objekt daszu exestiert.

Für einen Anfänger sind Spiele mit grafischen Elementen immer die nächste Herausvorderung. Aber ich weiß ja nich was du bis jetzt so alles schon gemacht hast. Dir wird es jetzt vlt schwer fallen, aber wenn du das jetzt durchziehst sollte es dich einen ganzen Schritt weiter bringen.
Oder du legst das Projekt erstmal auf Eis und probierst dich an was einfachen, um das Verständniss fürs Programmieren zu bekommen. Sowas wie Taschenrechner, Notepad-Klone, ... sind relativ einfache Programme. Danch kann man sich dann mit Hex-Editoren, kleinen Spielen oder ähnlichen beschäftigen. Und was du dir auch auf alle Fälle angucken solltest ist DAS da steht das Wichtigste drin, was man über Delphi und das Porgrammieren wissen sollte. Und man kann auch immer mal nachgucken wenn man nicht weiter weiß.

So viel hab ich am Code gar nicht geändert, vlt 20 Zeilen oder so. Wenn du Fragen hast schreib einfach, dann helfen wir weiter.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 06.06.10 09:17 
Hallo!

Habe bis jetzt kaum Programme mit Grafik gemacht, ansonsten schon auch grössere Sachen als "nur" einen Taschenrechner (ist auch interessant gewesen)!

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du Fragen hast schreib einfach, dann helfen wir weiter.

Naja, ist nach der ganzen Hilfe ja unverschämt - aber ich frage mal: Wie könnte das Programm als Spieler selbst einen Stein setzen? Ich möchte jetzt keinen Code, aber vielleicht ein paar Tipps oder eine Beschreibung!

Mein Gedanke: Merken, wo jeder Stein liegt, angrenzende Koordinaten errechnen und durchprobieren, ob dort ein Stein passt. Theoretisch...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!