Hi,
ich muss für die Schule ein Spiel programmieren im Stile eines einarmigen Bandits...3 Felder für Farben, man drückt auf Start, die Farben wechseln sehr schnll durch und bei Stop wird dann der Gewinn ermittelt. Außerdem werden die noch möglichen Spiele angezeigt....dabei soll ich unter anderem auch den Objekttyp TFarbenspiel deklarieren. Das durchwechseln der Farben funktioniert wunderbar, stoppen tut es auch. Sobald ich allerdings die Funktionen reinschreibe für den Gewinn bzw. die noch möglichen Spiele stürtzt das Programm ab (lässt sich aber kompilieren...)
Fehler ist dann:
"Project xxxx raised exception class yyyyy with message 'zzzzzz'.
Process stopped. Use Step or Run to continue." (habs aus der hilfe datei kopiert)
Nun, ich finde den Fehler absolut nicht....außerdem sollte ich noch erwähnen: ich habe 2 units, sie sehen so aus:
| Zitat: |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Unit2;
type
TForm1 = class(TForm)
Feld1: TPanel;
Feld2: TPanel;
Feld3: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Timer1: TTimer;
GroupBox1: TGroupBox;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
Spielen: Boolean;
function Farbe:TColor;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Farbenspiel:TFarbenspiel;
implementation
{$R *.dfm}
function TForm1.Farbe:TColor;
VAR
Wert:byte;
begin
Wert:=random(6);
case Wert of
0:Farbe:=clRed;
1:Farbe:=clBlack;
2:Farbe:=clBlue;
3:Farbe:=clGreen;
4:Farbe:=clWhite;
5:Farbe:=clYellow;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Feld1.color:=Farbe;
Feld2.color:=Farbe;
Feld3.color:=Farbe;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Spielen:=true;
Edit1.text:=IntToStr(Farbenspiel.Spielezahl); //für absturz verantwortlich...
if Farbenspiel.Spielezahl > 0 Then //für absturz verantwortlich...
Timer1.enabled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.enabled := False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
If Spielen=true Then
begin
Timer1.enabled:=false;
Farbenspiel.Spielergebnis(Feld1.color,Feld2.color,Feld3.Color); //für absturz verantwortlich...
Edit1.text:=IntToStr(Farbenspiel.Spielezahl); //für absturz verantwortlich...
Edit2.text:=FloatToStr(Farbenspiel.Gewinnneu); //für absturz verantwortlich...
Spielen:=false; //für absturz verantwortlich...
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Farbenspiel.NeueSerie; //für absturz verantwortlich...
Edit1.text:='5';
Edit1.text:=IntToStr(Farbenspiel.Spielezahl); //für absturz verantwortlich...
end;
end.
|
und...
| Zitat: |
unit Unit2;
interface
uses graphics;
type
TFarbenspiel=class(TObject) //hier kein Strichpunkt
private
Spielanzahl:byte;
Einsatz:real;
Gewinn:real;
Farbe1,Farbe2,Farbe3:TColor;
public
constructor create;
procedure Spielergebnis(Color1,Color2,Color3:TColor);
function Gewinnneu:real;
function Spielezahl:byte;
procedure NeueSerie;
end;
implementation
constructor TFarbenspiel.create;
begin
NeueSerie;
Einsatz:=0.2;
end;
procedure TFarbenspiel.NeueSerie;
begin
Gewinn:=0;
Spielanzahl:=5;
end;
procedure TFarbenspiel.Spielergebnis;
begin
Farbe1:=Color1;
Farbe2:=Color2;
Farbe3:=Color3;
if Spielanzahl>0 Then dec(Spielanzahl);
if (Farbe1=Farbe2) and (Farbe2=Farbe3) Then
Gewinn:=Gewinn+8*Einsatz;
if (Farbe1=Farbe3) and (Farbe2<>Farbe3) Then
Gewinn:=Gewinn+3*Einsatz;
end;
function TFarbenspiel.Gewinnneu:real;
begin
Gewinnneu:=Gewinn;
end;
function TFarbenspiel.Spielezahl:byte;
begin
Spielanzahl:=Spielezahl;
end;
end. |
Außerdem habe ich es hier zum Download hochgeladen:
www.keplerweb.de/test/farben.rar
wäre sehr dankbar wenn mir jemand helfen könnte.
danke schonmal im vorraus
gruß