Autor Beitrag
fig0
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 17.05.04 11:32 
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ß
FaTaLGuiLLoTiNe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 5

Windows 7, Windows 8.1
Delphi XE
BeitragVerfasst: Mo 17.05.04 13:10 
Ich würde mal tippen der Fehler liegt zum einen hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TFarbenspiel.Spielezahl:byte;
begin
Spielanzahl:=Spielezahl;
end;


Ich würde mir an deiner Stelle angewöhnen, mit dem Schlüsselwort result anstatt mit dem Funktionsnamen zu arbeiten, ausserdem aussagekräftigere Namen zu verwenden und vor jedes Feld einer Klasse den Buchstaben F zu setzen, kann man dann besser auseinanderhalten.

Ausserdem wird dein Objekt Farbenspiel nirgends erzeugt (TFarbenspiel.Create).

Ich hab' dir mal den von mir geänderten Quelltext unter [Link ist nicht mehr online] geuppt, der funktioniert anscheinend.

Wenn du noch Fragen hast einfach nochmal melden.

Edit: Ach ja, und natürlich ein herzliches :welcome: von mir!

_________________
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!


Zuletzt bearbeitet von FaTaLGuiLLoTiNe am Mi 02.06.04 10:01, insgesamt 1-mal bearbeitet
fig0 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 17.05.04 16:02 
vielen Dank :)
ging ja richtig flott :)
vielen dank auch für die Tipps, werd versuchen das umzusetzen.
gruß :wink: