Finde Edit
spacer
Autor Nachricht
schumann.vas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 14:31 
Hey,
ich bin dabei ein Spiel zu schreiben, wo ein Schwein, Edit genannt, ein Platz zugewiesen wird (x- ,y-Koordinaten) und der Spieler dieses durch Eingabe der Koordinaten zu finden versucht.. Klingt relativ einfach und ich bin, glaube ich, auch schon sehr weit, nun bin ich aber an einem Punkt angekommen, an dem ich nicht weiter komme (PS: bin Anfänger^^) ;) ...wäre super wenn jmd mir beim lösen der Probs helfen könnte..zum einen zeigt Delphi Fehler an , vonwegen es gäbe nicht genügend wirkliche Parameter, zum anderen klappt das Abspielen von Sounds nicht, wie gewollt (es kommt nur der Windows-Beep) und ich erhalte die Exeption (Erste Gelegenheit für Exception bei $0051CEEE. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x0051ceee: read of address 0x00000000'. Prozess Edit.exe (2004))...

Der Quelltext der Unit1 lautet:
ausblenden volle Höhe Delphi-Quelltext markieren
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:
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, mmSystem, mSchwein, mSpielfeld;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
Spielfeld: TSpielfeld;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
Spielfeld.SetzeX:=StrToInt(Form1.Edit1.Text);
Spielfeld.SetzeY:=StrToInt(Form1.Edit2.Text);
Spielfeld.GibEditGefangen;
if Spielfeld.GibEditGefangen=true then
begin
showmessage('Du hast Edit gefangen! Gewonnen!');
sndPlaySound('win.wav',SND_ASYNC)
end
else begin showmessage ('Du hast Edit nicht gefangen! Sorry!');
sndPlaySound('fail.wav',SND_ASYNC)
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Spielfeld.InitSpiel;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
Spielfeld.InitSpiel;
end;

end.


Der Quelltext der Unit mSchwein:
ausblenden volle Höhe Delphi-Quelltext markieren
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:
UNIT mSchwein;

interface


//-------------------- ggf Uses-Liste einfügen ! --------------------


type
TSchwein = class

private //Attribute
x : Byte;
y : Byte;

public //Methoden
constructor Create; virtual;
procedure SetzeX (pX: Byte); virtual;
procedure SetzeY (pY: Byte); virtual;
function GibX : Byte; virtual;
function GibY : Byte; virtual;

end;

implementation

//+---------------------------------------------------------------------
//| TSchwein: Methodendefinition
//+---------------------------------------------------------------------

//-------- Create (public) ---------------------------------------------
constructor TSchwein.Create;
begin
x:=random(3);
y:=random(3);
end;

//-------- SetzeX (public) ---------------------------------------------
procedure TSchwein.SetzeX (pX: Byte);
begin
x := pX
end;

//-------- SetzeY (public) ---------------------------------------------
procedure TSchwein.SetzeY (pY: Byte);
begin
y := pY
end;

//-------- GibX (public) -----------------------------------------------
function TSchwein.GibX : Byte;
begin
result := x
end;

//-------- GibY (public) -----------------------------------------------
function TSchwein.GibY : Byte;
begin
result := y
end;

end.


Der Quelltext der Unit mSpielfeld:
ausblenden volle Höhe Delphi-Quelltext markieren
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:
UNIT mSpielfeld;

interface

//-------------------- ggf Uses-Liste anpassen ! --------------------
uses mSchwein;

type
TSpielfeld = class

private //Attribute
EditGefangen : Boolean;
Gefangen : Boolean;
x : Byte;
y : Byte;
AnzahlFelder : Integer;
Sau : TSchwein;
Spielfeld:TSpielfeld;

//Objektbeziehungen:
// hatTSchwein : TSchwein;

public //Methoden
procedure InitSpiel; virtual;
procedure SetzeAnzahlFelder (pAnzahlFelder: Integer); virtual;
procedure SetzeX (pX: Byte); virtual;
procedure SetzeY (pY: Byte); virtual;
function GibEdit : TSchwein; virtual;
function GibEditGefangen : Boolean; virtual;
function GibX : Byte; virtual;
function GibY : Byte; virtual;

end;

implementation

//+---------------------------------------------------------------------
//| TSpielfeld: Methodendefinition
//+---------------------------------------------------------------------

//-------- InitSpiel (public) ------------------------------------------
procedure TSpielfeld.InitSpiel;
begin
Spielfeld:=TSpielfeld.Create;
Sau:=TSchwein.Create;
EditGefangen:=false;
AnzahlFelder:=3
end;

//-------- SetzeAnzahlFelder (public) ----------------------------------
procedure TSpielfeld.SetzeAnzahlFelder (pAnzahlFelder: Integer);
begin
AnzahlFelder := pAnzahlFelder
end;

//-------- SetzeX (public) ---------------------------------------------
procedure TSpielfeld.SetzeX (pX: Byte);
begin
x := pX
end;

//-------- SetzeY (public) ---------------------------------------------
procedure TSpielfeld.SetzeY (pY: Byte);
begin
y := pY
end;

//-------- GibEdit (public) --------------------------------------------
function TSpielfeld.GibEdit : TSchwein;
begin
result := Sau
end;

//-------- GibEditGefangen (public) ------------------------------------
function TSpielfeld.GibEditGefangen : Boolean;
begin
if ((x=Sau.GibX) and (y=Sau.GibY)) then
gefangen:=true
else
gefangen:=false;
result := Gefangen
end;

//-------- GibX (public) -----------------------------------------------
function TSpielfeld.GibX : Byte;
begin
result := x
end;

//-------- GibY (public) -----------------------------------------------
function TSpielfeld.GibY : Byte;
begin
result := y
end;

end.


Ich weiß...das ist jetzt nen ziemlicher Haufen...wäre trotzdem toll, wenn jmd lust und zeit findet,..da nen bisschen mit zu helfen...
LG V.A.S.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Sa 10.12.11 14:39 
Tach,

Du musst erst eine Instanz von TSpielfeld erzeugen, bevor Du auf Spielfeld zugreifst.
Also z.B. im FormCreate:
ausblenden Delphi-Quelltext markieren
1:
Spielfeld := TSpielfeld.Create;


Gruß,
Jens

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
schumann.vas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 14:58 
Hallo, das habe ich bereits in InitSpiel getan...auch wenn ich es jetzt zusätzlich nochmal hinschreibe ..ändert sich nichts :/
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Sa 10.12.11 15:07 
In InitSpiel ist es zu spät, das ist ja bereits eine Methode der Klasse. Und um die Methode nutzen zu können, musst Du die Klasse erst instanzieren.
Also: aus InitSpiel den Aufruf rausnehmen und nach FormCreate verschieben. Zeig mal den Code, wie es jetzt aussieht (von FormCreate, nicht alles).

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
schumann.vas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 15:10 
Soooo...

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
Spielfeld:=TSpielfeld.Create;
Spielfeld.InitSpiel
end;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Sa 10.12.11 15:54 
Sieht gut aus. Welchen Fehler bekommst Du jetzt noch, und an welcher Stelle genau wird gemeckert?

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
schumann.vas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 15:58 
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
begin
Spielfeld.SetzeX:=StrToInt(Form1.Edit1.Text);
Spielfeld.SetzeY:=StrToInt(Form1.Edit2.Text);
Spielfeld.GibEditGefangen;
if Spielfeld.GibEditGefangen=true then
begin
showmessage('Du hast Edit gefangen! Gewonnen!');
sndPlaySound('win.wav',SND_ASYNC)
end
else begin showmessage ('Du hast Edit nicht gefangen! Sorry!');
sndPlaySound('fail.wav',SND_ASYNC)
end;
end;


Also wie gesagt, das Problem , dass nur der Windows - Beep kommt, statt dem gewünschtem Sound. Und er zeigt Fehler in Zeile 3 und 4 : Nicht genügend wirkliche Parameter.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Sa 10.12.11 16:00 
Du musst vermutlich den kompletten Pfad zu den Wav-Dateien angeben.
Zeile 3 und 4 sehen eigentlich korrekt aus, da weiß ich grad nicht, woran das liegt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
schumann.vas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 16:04 
Okee, vielen Dank ersteinmal,...
dann hilft nur noch abwarten, weil ich da halt auch nix finden konnte :/ :)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Sa 10.12.11 16:28 
SetzeX und SetzeY sind Prozeduren, die einen Parameter erwarten und keine Eigenschaften...
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
  Spielfeld.SetzeX := StrToInt(Form1.Edit1.Text);
// das ist eine Zuweisung, kein Prozeduraufruf

// richtig:
Spielfeld.SetzeX(StrToInt(Form1.Edit1.Text));
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
schumann.vas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 10.12.11 16:33 
Vielen vielen Dank! ...Funktioniert alles ;) Ihr seit Spitze
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home