Autor |
Beitrag |
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 23.06.10 17:34
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 28.06.10 17:24
jaenicke hat folgendes geschrieben : | Globale Variablen gehören eben nicht zu einem bestimmten Objekt, sondern zu der Unit, in der die Klasse, also der Konstruktionsplan der Objekte, steht. |
jaenicke hat folgendes geschrieben : | Zusätzlich sind globale Variablen nicht gerade übersichtlich, sagtest du ja schon, und objektorientiert schon gar nicht. |
Stimmt ja alles, nur jetzt möchte ich in einer anderen Unit (Unit2) den Spieler ermitteln, der den 1. Stein legen darf: Wer (Programm oder Mensch) den Stein mit insgesamt mehr Punkten hat, beginnt. Und schon muss zumindest TDomino eine globale Variable sein, denn wenn das im private-Teil von Unit1 steht, kann ich es ja on einer anderen Unit nicht nutzen!
Wie macht man es also?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 29.06.10 19:40
Hallo!
@ Bergmann89:
Würdest du eher
a) jedem Spieler (Mensch/Programm) am Spielbeginn per Random bestimmte Steine, d. h. ein eigenes Array zuweisen, oder
b) mit einem gemeinsamen Array arbeiten, aus dem jeder Spieler jeweils einen Stein entnimmt?
Diese Frage ist mir enorm wichtig, denn momentan arbeitet das Programm mit nur einem Steine-Array!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Bergmann89
      
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)
|
Verfasst: Mi 30.06.10 15:51
Hey,
eig is das doch egal, oder? Kann man so oder so machen. Wenn du es jetzt schon mit einem Array für alle hast dann lass es so, kannst ja später noch als Option einbauen, das jeder sein eigenes hat...
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 30.06.10 18:13
Bergmann89 hat folgendes geschrieben : | eig is das doch egal, oder? |
Ich weiss nicht, ob es egal ist, denn jetzt stehen beiden Spieler alle Steine zur Verfügung, dann aber hat jeder Spieler nur seine Steine. Ich weiss nicht, was besser ist!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 04.07.10 14:15
Hallo!
Es muss doch möglich sein, mit dem Array DominoList alle bisher abgelegten Steine neu zu zeichnen. Man soll während des Spiels eine andere Farbe einstellen können, dies übermalt aber alle abgelegten Steine. Also muss ich sie neu zeichnen. Dazu muss ich zwar noch einen Integer einbauen, der das Bitmap angibt, das gezeichnet werden muss, aber daran scheitert es nicht.
Das funktioniert nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var i, n: Integer; bmp: TBitmap; begin bmp := TBitmap.Create;
for i := 0 to High(DominoList) do begin Domino := DominoList[i];
ImageList1.GetBitmap(0, bmp); for n := 0 to Domino.Rotate do Drehen90Grad(bmp);
DrawStone(bmp); end;
bmp.Free; end; |
Was mache ich falsch?
//Edit:
Im Prinzip nichts, habe nur vergessen, den Zähler für's Drehen nach 4x auf 0 zurückzusetzen und kam dabei auf mehrere tausend Mal Drehen, was das Programm natürlich einige Zeit beschäftigte und es dadurch auf nichts mehr reagierte!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 05.07.10 17:47
Hallo!
Es gibt doch noch ein Problem: Ich kriege die Berechnung des rechten bzw. unteren Randes nicht hin. Entweder setzt das Programm Steine auch ausserhalb des Spielfeldes, oder es erkennt weder für sich noch für mich einen Stein als passend, wenn dieser zB. ganz rechts angefügt werden muss.
Mit folgendem Code passiert das:
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:
| function TForm1.FindAllPossiblePlaces(d: TDomino): Integer; var x, y, n, h: Integer; begin d.X := 0; d.Y := 0; d.Rotate := 0; n := 0; h := 0; SetLength(DominoPossibleList, 0);
for x := 0 to iBoardWidth do for y := 0 to iBoardHeight do begin
if (d.X*iStoneWidth < iBoardWidth-iStoneWidth) and (d.Y*iStoneWidth < iBoardHeight-iStoneWidth) then AddToPossiblePlaces(d);
RotateDomino(d);
if h >= 4 then h := 0;
Inc(h); d.Rotate := h;
Inc(n);
if n = 3 then begin Inc(d.X); n := 0; end;
if d.X >= iBoardWidth-1 then begin d.X := 0; Inc(d.Y); end;
if d.Y >= iBoardHeight-1 then break; end;
Result := High(DominoPossibleList); end; |
Die Grafik verdeutlicht nochmal, was ich meine!
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!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 07.07.10 19:36
Hallo!
Das Programm ist mittlerweile so komplex geworden, dass eine einfache Antwort nicht so schnell möglich ist,
aber ich war ja nicht faul und habe *gedacht* und auch probiert und siehe da:
Ich denke, das ist es jetzt:
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:
| function TForm1.FindAllPossiblePlaces(d: TDomino): Integer; var x, y, n, h: Integer; b: Boolean; begin d.X := 0; d.Y := 0; d.Rotate := 0; n := 0; h := 0; SetLength(DominoPossibleList, 0);
for x := 0 to iBoardWidth do for y := 0 to iBoardHeight do begin if (d.X*iStoneWidth < iBoardWidth) and (d.Y*iStoneWidth < iBoardHeight) then begin b := True;
if (d.X*iStoneWidth+iStoneWidth = iBoardWidth) and (d.Dir = diHorz) then b := False;
if (d.Y*iStoneWidth+iStoneWidth = iBoardHeight) and (d.Dir = diVert) then b := False;
if b then AddToPossiblePlaces(d); end;
RotateDomino(d);
|
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 17.07.10 19:25
Hallo!
Sorry, dass ich mich ein weiteres Mal in Serie melde, aber der Code FindAllPossiblePlaces stimmt immer noch nicht. Entweder bekomme ich es hin, dass er Steine nicht unten bzw. rechts ausserhalb des Spielfeldes anlegt, also korrekt arbeitet, aber dafür nicht alle möglichen Plätze innerhalb des Spielfeldes findet.
Oder er findet alle Plätze, legt dafür aber unten bzw. rechts ausserhalb des Spielfeldes an.
Ich möchte aber, dass er alle möglichen Plätze innerhalb des Spielfeldes findet! Ich kriege das einfach nicht hin.
So findet er nicht alle möglichen Plätze im Spielfeld, legt aber stets korrekt an:
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:
| function TForm1.FindAllPossiblePlaces(d: TDomino): Integer; var x, y, n, h: Integer; b: Boolean; begin d.X := 0; d.Y := 0; d.Rotate := 0; n := 0; h := 0; SetLength(DominoPossibleList, 0);
for x := 0 to iBoardWidth do for y := 0 to iBoardHeight do begin if (d.X*iStoneWidth <= iBoardWidth-iStoneWidth) and (d.Y*iStoneWidth <= iBoardHeight-iStoneWidth) then begin b := False;
if (d.Dir = diHorz) then if (d.X < 16) and (d.Y < 14) then b := True; if (d.Dir = diVert) then if (d.X < 17) and (d.Y < 13) then b := True;
if b then AddToPossiblePlaces(d); end;
RotateDomino(d);
if h >= 4 then h := 0;
Inc(h); d.Rotate := h;
Inc(n);
if n = 3 then begin Inc(d.X); n := 0; end;
if d.X >= iBoardWidth-1 then begin d.X := 0; Inc(d.Y); end;
if d.Y >= iBoardHeight-1 then break; end;
Result := High(DominoPossibleList); end; |
//Edit: Code ist jetzt etwas vereinfacht, das löst das Problem aber nicht!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|