Autor |
Beitrag |
Agathe
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 08.03.16 18:32
Hallo,
ich muss in der Schule ein 4 Gewinnt Spiel mit Delphi 7 programmieren.
Ich bin grad bei der Erstellung des Spielfeldes. Es sollte jetzt fertig sein, wird aber wenn man F9 drückt nicht angezeigt. Weder ich noch meine Lehrerin wissen weiter - ich füge mal den Quelltext an.
Vielleicht kann mir ja einer von euch Computer-Füchsen helfen?
Lg
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: 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:
| unit UnitAbschluss;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TFeldBesetzung = (sLeer, sSpieler1, sSpieler2); TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; btnNeu: TButton; Panel1: TPanel; Panel2: TPanel; Anzeigeflaeche: TPaintBox; Edit6: TEdit; Panel4: TPanel; pnlSpieler: TPanel; btnGewinnausgabe: TButton; btnEinstellungen: TButton; Edit4: TEdit; Edit5: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnEinstellungenClick(Sender: TObject); procedure btnNeuClick(Sender: TObject);
private FGRafik: TBitmap; FLinks: Integer; FUnten: Integer; FSpielfeldBreite: Integer; FSpielfeldHoehe: Integer; FFelderBreite: Integer; FSpielfeld: array[0..6, 0..5] of TFeldBesetzung; FSpielerFarbe: array[TFeldbesetzung] of TColor; FSpielerBmp: array[TFeldBesetzung] of TBitmap; FSpielerName: array[TFeldBesetzung] of string;
procedure GitterZeichnen(breite, hoehe, feldbreite: Integer); procedure Darstellen; procedure GroessenEinstellungenAnpassen; procedure SymbolErstellen(breite: Integer; spieler: TFeldBesetzung); public end;
var Form1: TForm1; i, j: Integer; Spieler1, Spieler2: String;
implementation
uses UnitAbschlussEinstellungen;
{$R *.dfm} procedure TForm1.GitterZeichnen(breite, hoehe, feldbreite: Integer); var i: Integer; begin FGrafik.Canvas.Pen.Color := clBlack; for i := 0 to hoehe do begin FGrafik.Canvas.MoveTo(FLinks, FUnten - i* feldbreite); FGrafik.Canvas.LineTo(FLinks + breite * Feldbreite, FUnten - i * feldbreite); end; for i := 0 to breite do begin FGrafik.Canvas.MoveTo(FLinks + i*feldbreite, FUnten - hoehe * feldbreite); FGrafik.Canvas.LineTo(FLinks + i*feldbreite, FUnten); end;
end; procedure TForm1.Darstellen; begin FGrafik.Canvas.Pen.Color := clWhite; FGrafik.Canvas.Brush.Color := clWhite; FGrafik.Canvas.Rectangle(0,0,FGrafik.Width, FGrafik.Height); Anzeigeflaeche.Canvas.Draw(0, 0, FGrafik); Form1.GitterZeichnen(FSpielfeldBreite, FSpielfeldHoehe, FFelderBreite); end;
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; FGrafik:= TBitmap.Create; FSpielfeldBreite := 7; FSpielfeldHoehe := 6; FFelderBreite := 25; FSpielerBmp[sSpieler1] := TBitmap.Create; FSpielerBmp[sSpieler2] := TBitmap.Create; FSpielerBmp[sLeer] := TBitmap.Create; FSpielerFarbe[sLeer] := clWhite; FSpielerFarbe[sSpieler1] := clGreen; FSpielerFarbe[sSpieler2] := clFuchsia; FSpielerName[sLeer] := 'Leer'; FSpielerName[sSpieler1] := 'Spieler1'; FSpielerName[sSpieler2] := 'Spieler2';
end;
procedure TForm1.FormDestroy(Sender: TObject); begin FGrafik.Free; FSpielerBmp[sSpieler1].Free; FSpielerBmp[sSpieler2].Free; FSpielerBmp[sLeer].Free; end;
procedure TForm1.GroessenEinstellungenAnpassen; begin FGrafik.Width := Anzeigeflaeche.Width; FGrafik.Height := Anzeigeflaeche.Height; FLinks := FGrafik.Width div 2 - FSpielfeldBreite div 2 * FFelderbreite; FUnten := FGrafik.Height div 2 + FSpielfeldHoehe div 2 * Ffelderbreite; SymbolErstellen(FFelderbreite-1, sSpieler1); SymbolErstellen(FFelderbreite-1, sSpieler2); SymbolErstellen(1, sLeer);
end;
procedure TForm1.SymbolErstellen(breite: Integer; spieler: TFeldBesetzung); begin FSPielerBmp[spieler].Width := breite; FSpielerBmp[Spieler].Height := breite; FSpielerBmp[spieler].Canvas.Pen.Color := clWhite; FSpielerBmp[spieler].Canvas.Brush.Color := clWhite; FSpielerBmp[spieler].Canvas.Rectangle(0, 0, breite, breite); FSpielerBmp[spieler].Canvas.Pen.Color := FSpielerFarbe[spieler]; FSpielerBmp[spieler].Canvas.Brush.Color := FSpielerFarbe[spieler]; FSpielerBmp[spieler].Canvas.Ellipse(0, 0, breite, breite); end;
procedure TForm1.btnEinstellungenClick(Sender: TObject); begin FormEinstellungen.ShowModal; end;
procedure TForm1.btnNeuClick(Sender: TObject); begin for i := 0 to FSpielfeldBreite - 1 do begin for j := 0 to FSpielfeldHoehe - 1 do FSpielfeld[i,j] := sLeer; end;
end;
end. |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Di 08.03.16 18:58
Hallo Agathe,
willkommen im Forum.
Zuerst eine Bitte: Setze doch bitte Deinen Quelltext in Delphi-Tags (Markieren, dann Bereiche/Delphi/+).
Zu Deiner Frage: Du musst die Zeichenroutine (Darstellen) auch aufrufen, sonst wird nichts gezeichnet.
ub60
|
|
Agathe
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 08.03.16 19:47
So ungefähr?
Das hab ich in dem Tutorial das ich benutzt hab auch gelesen und dachte, ich hätte das auch schon gemacht.
Muss ich das nicht in der Prozedur GrößenEinstellungenAnpassen machen?
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:
| unit UnitAbschluss;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TFeldBesetzung = (sLeer, sSpieler1, sSpieler2); TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; btnNeu: TButton; Panel1: TPanel; Panel2: TPanel; Anzeigeflaeche: TPaintBox; Edit6: TEdit; Panel4: TPanel; pnlSpieler: TPanel; btnGewinnausgabe: TButton; btnEinstellungen: TButton; Edit4: TEdit; Edit5: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnEinstellungenClick(Sender: TObject); procedure btnNeuClick(Sender: TObject);
private FGRafik: TBitmap; FLinks: Integer; FUnten: Integer; FSpielfeldBreite: Integer; FSpielfeldHoehe: Integer; FFelderBreite: Integer; FSpielfeld: array[0..6, 0..5] of TFeldBesetzung; FSpielerFarbe: array[TFeldbesetzung] of TColor; FSpielerBmp: array[TFeldBesetzung] of TBitmap; FSpielerName: array[TFeldBesetzung] of string;
procedure GitterZeichnen(breite, hoehe, feldbreite: Integer); procedure Darstellen; procedure GroessenEinstellungenAnpassen; procedure SymbolErstellen(breite: Integer; spieler: TFeldBesetzung); public end;
var Form1: TForm1; i, j: Integer; Spieler1, Spieler2: String;
implementation
uses UnitAbschlussEinstellungen;
{$R *.dfm} procedure TForm1.GitterZeichnen(breite, hoehe, feldbreite: Integer); var i: Integer; begin FGrafik.Canvas.Pen.Color := clBlack; for i := 0 to hoehe do begin FGrafik.Canvas.MoveTo(FLinks, FUnten - i* feldbreite); FGrafik.Canvas.LineTo(FLinks + breite * Feldbreite, FUnten - i * feldbreite); end; for i := 0 to breite do begin FGrafik.Canvas.MoveTo(FLinks + i*feldbreite, FUnten - hoehe * feldbreite); FGrafik.Canvas.LineTo(FLinks + i*feldbreite, FUnten); end;
end; procedure TForm1.Darstellen; begin FGrafik.Canvas.Pen.Color := clWhite; FGrafik.Canvas.Brush.Color := clWhite; FGrafik.Canvas.Rectangle(0,0,FGrafik.Width, FGrafik.Height); Anzeigeflaeche.Canvas.Draw(0, 0, FGrafik); Form1.GitterZeichnen(FSpielfeldBreite, FSpielfeldHoehe, FFelderBreite); end;
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; FGrafik:= TBitmap.Create; FSpielfeldBreite := 7; FSpielfeldHoehe := 6; FFelderBreite := 25; FSpielerBmp[sSpieler1] := TBitmap.Create; FSpielerBmp[sSpieler2] := TBitmap.Create; FSpielerBmp[sLeer] := TBitmap.Create; FSpielerFarbe[sLeer] := clWhite; FSpielerFarbe[sSpieler1] := clGreen; FSpielerFarbe[sSpieler2] := clFuchsia; FSpielerName[sLeer] := 'Leer'; FSpielerName[sSpieler1] := 'Spieler1'; FSpielerName[sSpieler2] := 'Spieler2';
end;
procedure TForm1.FormDestroy(Sender: TObject); begin FGrafik.Free; FSpielerBmp[sSpieler1].Free; FSpielerBmp[sSpieler2].Free; FSpielerBmp[sLeer].Free; end;
procedure TForm1.GroessenEinstellungenAnpassen; begin FGrafik.Width := Anzeigeflaeche.Width; FGrafik.Height := Anzeigeflaeche.Height; FLinks := FGrafik.Width div 2 - FSpielfeldBreite div 2 * FFelderbreite; FUnten := FGrafik.Height div 2 + FSpielfeldHoehe div 2 * Ffelderbreite; SymbolErstellen(FFelderbreite-1, sSpieler1); SymbolErstellen(FFelderbreite-1, sSpieler2); SymbolErstellen(1, sLeer);
end;
procedure TForm1.SymbolErstellen(breite: Integer; spieler: TFeldBesetzung); begin FSPielerBmp[spieler].Width := breite; FSpielerBmp[Spieler].Height := breite; FSpielerBmp[spieler].Canvas.Pen.Color := clWhite; FSpielerBmp[spieler].Canvas.Brush.Color := clWhite; FSpielerBmp[spieler].Canvas.Rectangle(0, 0, breite, breite); FSpielerBmp[spieler].Canvas.Pen.Color := FSpielerFarbe[spieler]; FSpielerBmp[spieler].Canvas.Brush.Color := FSpielerFarbe[spieler]; FSpielerBmp[spieler].Canvas.Ellipse(0, 0, breite, breite); end;
procedure TForm1.btnEinstellungenClick(Sender: TObject); begin FormEinstellungen.ShowModal; end;
procedure TForm1.btnNeuClick(Sender: TObject); begin for i := 0 to FSpielfeldBreite - 1 do begin for j := 0 to FSpielfeldHoehe - 1 do FSpielfeld[i,j] := sLeer; end;
end; end. |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 08.03.16 20:48
Du hast eine Prozedur Darstellen wie ub60 schon sagte. Die rufst du aber nie auf. Das ist als ob du eine Türklinke an eine Tür anbringst, diese aber nie benutzt, dich dann aber wunderst warum die Tür nicht aufgeht.
Dein Formular hat ein Event OnPaint. Dort kannst du die Prozedur aufrufen.
|
|
Agathe
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 08.03.16 21:01
Probier ich mal aus. Danke!
|
|
|