Autor |
Beitrag |
speck12
      
Beiträge: 36
|
Verfasst: Mo 21.07.08 21:10
Hallo allerseits!
ich versuche zur Zeit einen Tetrisklon zu schreiben. Jetzt habe ich allerdings ein Problem.
Die Steine werden in einem Array[1..4,1..4] dargestellt. Das Spielfeld in einem Array[1..24,1..32]. Jetzt meine ich allerdings einen Denkfehler bei der Verknüpfung beider zu haben, da
{1. Die Steine gepiegelt und gedreht gezeigt werden} hat sich erledigt !
2. Nicht bis nach unten fallen, sondern nur bis zum 24. Kästchen und dann um eins nach rechts wandern, obwohl
nur der y-Wert erhöht wird
Außerdem scheint irgendwas mit dem Intervall des Timers nicht zu stimmen, denn anfangs macht es keinen unterschied, ob ich ihn auf 1000ms oder 200ms stelle. Erst wenn ich einmal auf 10ms und dann auf 200ms stelle, zeigt sich ein Unterschied.
hier der Code der Tetris_unit :
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234:
| unit tetris_unit;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TTetris = class(TObject) color : TColor; typ : integer; position : integer; a : Array[1..4,1..4] of Boolean; constructor Create(Farben : TColor); procedure Rotate; virtual ; Destructor Destroy(); override; end;
TTetris1 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris2 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris3 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris4 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end; TTetris5 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris6 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris7 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
implementation
constructor TTetris.Create(Farben : TColor); begin Inherited Create; color := Farben ; typ := 0; position := 0;
end;
procedure TTetris.Rotate; begin end;
destructor TTetris.Destroy; begin Inherited Destroy; end;
constructor TTetris1.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 1;
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false; a[1,2] := TRUE ; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := false; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false;
end;
procedure TTetris1.Rotate; begin end;
destructor TTetris1.Destroy; begin Inherited Destroy; end;
constructor TTetris2.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 2;
a[1,1] := false; a[1,2] := false; a[1,3] := false; a[1,4] := false; a[2,1] := false; a[2,2] := TRUE ; a[2,3] := false; a[2,4] := false; a[3,1] := TRUE ; a[3,2] := TRUE ; a[3,3] := TRUE ; a[3,4] := false; a[4,1] := false; a[4,2] := false; a[4,3] := false; a[4,4] := false;
end;
procedure TTetris2.Rotate; begin end;
destructor TTetris2.Destroy; begin Inherited Destroy; end;
constructor TTetris3.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 3 ;
a[1,1] := false; a[1,2] := TRUE ; a[1,3] := false; a[1,4] := false; a[2,1] := false; a[2,2] := TRUE ; a[2,3] := false; a[2,4] := false; a[3,1] := TRUE ; a[3,2] := TRUE ; a[3,3] := false; a[3,4] := false; a[4,1] := false; a[4,2] := false; a[4,3] := false; a[4,4] := false; end;
procedure TTetris3.Rotate; begin end;
destructor TTetris3.Destroy; begin Inherited Destroy; end;
constructor TTetris4.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 4;
a[1,1] := false; a[1,2] := TRUE ; a[1,3] := false; a[1,4] := false; a[2,1] := false; a[2,2] := TRUE ; a[2,3] := false; a[2,4] := false; a[3,1] := false; a[3,2] := TRUE ; a[3,3] := TRUE ; a[3,4] := false; a[4,1] := false; a[4,2] := false; a[4,3] := false; a[4,4] := false; end;
procedure TTetris4.Rotate; begin end;
destructor TTetris4.Destroy; begin Inherited Destroy; end;
constructor TTetris5.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 5;
a[1,1] := false; a[1,2] := TRUE ; a[1,3] := false; a[1,4] := false; a[2,1] := false; a[2,2] := TRUE ; a[2,3] := false; a[2,4] := false; a[3,1] := false; a[3,2] := TRUE ; a[3,3] := false; a[3,4] := false; a[4,1] := false; a[4,2] := TRUE ; a[4,3] := false; a[4,4] := false; end;
procedure TTetris5.Rotate; begin end;
destructor TTetris5.Destroy; begin Inherited Destroy; end;
constructor TTetris6.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 6;
a[1,1] := false; a[1,2] := false; a[1,3] := false; a[1,4] := false; a[2,1] := false; a[2,2] := TRUE ; a[2,3] := TRUE ; a[2,4] := false; a[3,1] := TRUE ; a[3,2] := TRUE ; a[3,3] := false; a[3,4] := false; a[4,1] := false; a[4,2] := false; a[4,3] := false; a[4,4] := false; end;
procedure TTetris6.Rotate; begin end;
destructor TTetris6.Destroy; begin Inherited Destroy; end;
constructor TTetris7.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 7;
a[1,1] := false; a[1,2] := false; a[1,3] := false; a[1,4] := false; a[2,1] := TRUE ; a[2,2] := TRUE ; a[2,3] := false; a[2,4] := false; a[3,1] := false; a[3,2] := TRUE ; a[3,3] := TRUE ; a[3,4] := false; a[4,1] := false; a[4,2] := false; a[4,3] := false; a[4,4] := false; end;
procedure TTetris7.Rotate; begin end;
destructor TTetris7.Destroy; begin Inherited Destroy; end;
end. |
und hier der main unit:
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, tetris_unit, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) feld: TImage; Timer1: TTimer; Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private Steinliste : TList; Spielfeld : Array[1..32,1..24] of integer; y : integer; buffer : TBitmap; procedure zeichne_spielfeld; procedure buffering; procedure zufall; procedure bewegen; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.zeichne_spielfeld; begin feld.Canvas.Draw(0,0,buffer); end;
procedure TForm1.zufall; var n,i : integer; farbe : TColor; begin
randomize; n := random(7) + 1; farbe := random($ffffff);
case n of 1: Steinliste.Add(TTetris1.Create(farbe)); 2: Steinliste.Add(TTetris2.Create(farbe)); 3: Steinliste.Add(TTetris3.Create(farbe)); 4: Steinliste.Add(TTetris4.Create(farbe)); 5: Steinliste.Add(TTetris5.Create(farbe)); 6: Steinliste.Add(TTetris6.Create(farbe)); 7: Steinliste.Add(TTetris7.Create(farbe)); end;
for i := 0 to Steinliste.Count -1 do TTetris(Steinliste.Items[i]).position := random(21) +1;
end;
procedure TForm1.buffering; var m,n : integer; begin with buffer do begin Height := 640; Width := 480;
Canvas.Brush.Color := clCream;
Canvas.Pen.Color := clBlack;
for n := 1 to 32 do for m := 1 to 24 do begin Canvas.Rectangle((m-1)*20,(n-1)*20,m*20,n*20); end; end; end;
procedure TForm1.bewegen; var i,m,n : integer; begin with TTetris(Steinliste.Items[0]) do begin
if a[1,1] then spielfeld[TTetris(Steinliste.Items[0]).position,y] := 1; if a[1,2] then spielfeld[TTetris(Steinliste.Items[0]).position,y+1] := 1; if a[1,3] then spielfeld[TTetris(Steinliste.Items[0]).position,y+2] := 1; if a[1,4] then spielfeld[TTetris(Steinliste.Items[0]).position,y+3] := 1;
if a[2,1] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y] := 1; if a[2,2] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+1] := 1; if a[2,3] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+2] := 1; if a[2,4] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+3] := 1;
if a[3,1] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y] := 1; if a[3,2] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+1] := 1; if a[3,3] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+2] := 1; if a[3,4] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+3] := 1;
if a[4,1] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y] := 1; if a[4,2] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+1] := 1; if a[4,3] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+2] := 1; if a[4,4] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+3] := 1;
end;
buffering;
with buffer do begin Canvas.Brush.Color := TTetris(Steinliste.Items[0]).color; Canvas.Pen.Color := clBlack;
for n := 1 to 32 do for m := 1 to 24 do begin if spielfeld[m,n] = 1 then begin Canvas.Rectangle((m-1)*20,(n-1)*20,m*20,n*20); spielfeld[m,n] := 0; end; end; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin y := 0; Steinliste := TList.Create; buffer := TBitmap.Create; buffering; zeichne_spielfeld; zufall; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Inc(y); bewegen; zeichne_spielfeld; end;
procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled := true; end;
end. |
evlt liegt das Problem aber auch an etwas komplett anderem.
habe hier noch die exe angefügt, damit ihr seht, was ich meine.
Veilleicht sieht jemand den Fehler..
Danke im Vorraus
--- EDIT: ---
mittlerweilte habe ich das Problem mit den verdrehten Steinen in den Griff bekommen.
Ein Beispiel:
ich habe diesen Stein: 0000
0x00
xxx0
0000
und möchte ihn in einem Array[1..4,1..4] of Boolean darstellen, so muss ich es folgenderweise machen:
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false;
a[1,2] := false; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false;
a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := true ; a[4,3] := false;
a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false;
hier nun die neuen codes zum Vergleich
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, tetris_unit, StdCtrls, ExtCtrls, Grids;
type TForm1 = class(TForm) feld: TImage; Timer1: TTimer; Button1: TButton; Edit1: TEdit; Edit2: TEdit; StringGrid1: TStringGrid; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Steinliste : TList; Spielfeld : Array[1..32,1..24] of integer; y : integer; buffer : TBitmap; procedure zeichne_spielfeld; procedure buffering;
procedure zufall; procedure bewegen; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.zeichne_spielfeld; begin feld.Canvas.Draw(0,0,buffer); end;
procedure TForm1.zufall; var n,i : integer; farbe : TColor; begin
randomize; n := random(7) + 1; farbe := random($ffffff);
case n of 1: Steinliste.Add(TTetris1.Create(farbe)); 2: Steinliste.Add(TTetris2.Create(farbe)); 3: Steinliste.Add(TTetris3.Create(farbe)); 4: Steinliste.Add(TTetris4.Create(farbe)); 5: Steinliste.Add(TTetris5.Create(farbe)); 6: Steinliste.Add(TTetris6.Create(farbe)); 7: Steinliste.Add(TTetris7.Create(farbe)); end;
for i := 0 to Steinliste.Count -1 do TTetris(Steinliste.Items[i]).position := random(21) +1;
end;
procedure TForm1.buffering; var m,n : integer; begin with buffer do begin Height := 640; Width := 480;
Canvas.Brush.Color := clCream; Canvas.Pen.Color := clBlack;
for n := 1 to 32 do for m := 1 to 24 do begin Canvas.Rectangle((m-1)*20,(n-1)*20,m*20,n*20); end; end; end;
procedure TForm1.bewegen; var m,n : integer; begin with TTetris(Steinliste.Items[0]) do begin
if a[1,1] then spielfeld[TTetris(Steinliste.Items[0]).position,y] := 1; if a[1,2] then spielfeld[TTetris(Steinliste.Items[0]).position,y+1] := 1; if a[1,3] then spielfeld[TTetris(Steinliste.Items[0]).position,y+2] := 1; if a[1,4] then spielfeld[TTetris(Steinliste.Items[0]).position,y+3] := 1;
if a[2,1] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y] := 1; if a[2,2] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+1] := 1; if a[2,3] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+2] := 1; if a[2,4] then spielfeld[TTetris(Steinliste.Items[0]).position+1,y+3] := 1;
if a[3,1] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y] := 1; if a[3,2] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+1] := 1; if a[3,3] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+2] := 1; if a[3,4] then spielfeld[TTetris(Steinliste.Items[0]).position+2,y+3] := 1;
if a[4,1] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y] := 1; if a[4,2] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+1] := 1; if a[4,3] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+2] := 1; if a[4,4] then spielfeld[TTetris(Steinliste.Items[0]).position+3,y+3] := 1;
end;
buffering;
with buffer do begin Canvas.Brush.Color := TTetris(Steinliste.Items[0]).color; Canvas.Pen.Color := clBlack;
for n := 1 to 32 do for m := 1 to 24 do begin if spielfeld[m,n] = 1 then begin Canvas.Rectangle((m-1)*20,(n-1)*20,m*20,n*20); Edit2.Text := IntToStr(m); Edit1.Text := IntToStr(y); spielfeld[m,n] := 0; end; end; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin y := 0; Steinliste := TList.Create; buffer := TBitmap.Create; buffering; zeichne_spielfeld; zufall; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Inc(y); bewegen; zeichne_spielfeld; end;
procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled := true; end;
procedure TForm1.Button2Click(Sender: TObject); var m,n : integer; begin Edit1.Text := IntToStr(TTetris(Steinliste.Items[0]).typ); for m := 1 to 4 do for n := 1 to 4 do if TTetris(Steinliste.Items[0]).a[m,n] then Stringgrid1.Cells[m-1,n-1] := 'x';
end;
end. |
und
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234:
| unit tetris_unit;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TTetris = class(TObject) color : TColor; typ : integer; position : integer; a : Array[1..4,1..4] of Boolean; constructor Create(Farben : TColor); procedure Rotate; virtual ; Destructor Destroy(); override; end;
TTetris1 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris2 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris3 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris4 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end; TTetris5 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris6 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
TTetris7 = class(TTetris) constructor Create(Farbe : TColor); procedure Rotate; override ; Destructor Destroy(); override; end;
implementation
constructor TTetris.Create(Farben : TColor); begin Inherited Create; color := Farben ; typ := 0; position := 0;
end;
procedure TTetris.Rotate; begin end;
destructor TTetris.Destroy; begin Inherited Destroy; end;
constructor TTetris1.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 1;
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false; a[1,2] := TRUE ; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := false; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false;
end;
procedure TTetris1.Rotate; begin end;
destructor TTetris1.Destroy; begin Inherited Destroy; end;
constructor TTetris2.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 2;
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false; a[1,2] := false; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := TRUE ; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false;
end;
procedure TTetris2.Rotate; begin end;
destructor TTetris2.Destroy; begin Inherited Destroy; end;
constructor TTetris3.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 3 ;
a[1,1] := false; a[2,1] := TRUE ; a[3,1] := false; a[4,1] := false; a[1,2] := false; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := false; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false; end;
procedure TTetris3.Rotate; begin end;
destructor TTetris3.Destroy; begin Inherited Destroy; end;
constructor TTetris4.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 4;
a[1,1] := false; a[2,1] := TRUE ; a[3,1] := false; a[4,1] := false; a[1,2] := false; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := false; a[2,3] := TRUE ; a[3,3] := TRUE ; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false; end;
procedure TTetris4.Rotate; begin end;
destructor TTetris4.Destroy; begin Inherited Destroy; end;
constructor TTetris5.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 5;
a[1,1] := false; a[2,1] := TRUE ; a[3,1] := false; a[4,1] := false; a[1,2] := false; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := false; a[2,3] := TRUE ; a[3,3] := false; a[4,3] := false; a[1,4] := false; a[2,4] := TRUE ; a[3,4] := false; a[4,4] := false; end;
procedure TTetris5.Rotate; begin end;
destructor TTetris5.Destroy; begin Inherited Destroy; end;
constructor TTetris6.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 6;
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false; a[1,2] := false; a[2,2] := TRUE ; a[3,2] := TRUE ; a[4,2] := false; a[1,3] := TRUE ; a[2,3] := TRUE ; a[3,3] := false; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false; end;
procedure TTetris6.Rotate; begin end;
destructor TTetris6.Destroy; begin Inherited Destroy; end;
constructor TTetris7.Create(Farbe : TColor); begin Inherited Create(Farbe); typ := 7;
a[1,1] := false; a[2,1] := false; a[3,1] := false; a[4,1] := false; a[1,2] := TRUE ; a[2,2] := TRUE ; a[3,2] := false; a[4,2] := false; a[1,3] := false; a[2,3] := TRUE ; a[3,3] := TRUE ; a[4,3] := false; a[1,4] := false; a[2,4] := false; a[3,4] := false; a[4,4] := false; end;
procedure TTetris7.Rotate; begin end;
destructor TTetris7.Destroy; begin Inherited Destroy; end;
end. |
die zwei anderen Probleme bestehen allerdings noch immer...
mfg
Moderiert von Narses: Trennzeile aus Underscores entfernt
Einloggen, um Attachments anzusehen!
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 22.07.08 10:41
Delphi-Quelltext 1: 2: 3: 4: 5:
| with TTetris(Steinliste.Items[0]) do begin if a[1,1] then spielfeld[TTetris(Steinliste.Items[0]).position,y] := 1; ... end |
Erstens solltest du dafür eine Schleife verwenden und zweitens solltest du die y-Position überprüfen, bevor du darein schreibst. (Ich hoffe, du weißt, wie intern Arrays im Speicher abgelegt werden und kannst darauf schließen, warum deine Steine nach rechts rücken!)
und drittens:
wenn du schon "with ... do" benutzt, dann solltest du dies auch nutzen...
Du solltest auch noch mal deine Spielfeld-Logik überdenken, denn es ist schlecht, wenn nach jeder Bewegung das Spielfeld wieder gelöscht wird (weil dann keine Steine unten liegen bleiben...)
Und der Hauptfehler bei deinem Programm:
Du solltest GUI und Logik strikt voneinander trennen... (also keine Mischmasch-Funktionen bzw. -Prozeduren wie z.B. bewegen. Erzeuge dir lieber eine eigene Klasse für die Tetris-Logik).
|
|
speck12 
      
Beiträge: 36
|
Verfasst: Di 22.07.08 13:08
hi
vielen Dank für deine Antwort!
Zweitens und drittens werd ich auf jeden Fall mal berücksichtigen.
Zitat: | (Ich hoffe, du weißt, wie intern Arrays im Speicher abgelegt werden und kannst darauf schließen, warum deine Steine nach rechts rücken!) |
Hier liegt wohl mein Problem, da ich leider nicht weiß, wie diese im Speicher abgelegt werden...
Kann mir das evtl jemand erklären oder kennt jemand ein gutes Tutorial zu diesem Thema?
danke und mfg
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Di 22.07.08 17:27
Kannst du mal bei Projekt --> Optionen --> Compiler die "Bereichsüberpfüfung" einschalten? (hoffe die ist dort; bei Delphi 7 jednefallsch schon  ). Das von dir beschriebene Verhalten tritt eigentlich meistens auf wenn man den Bereich eines Arrays verletzt.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
speck12 
      
Beiträge: 36
|
Verfasst: Di 22.07.08 18:34
Hi
also ich habe die Bereichsüberprüfung eingeschaltet (habe auch delphi 7), jedoch kommt da keine meldung. Oder muss ich dann noch wo anders nachschauen?
mfg
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Di 22.07.08 22:06
evetuell irgtendwas am code ändern und dann neucompilieren, bei mir wirken sich schalter oft erst aus wenn ich was am code geändert habe - delphi ist da manchmal estwas langsam. wenn dann nix kommt lags halt an was anderem ^^
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
|