Ja k , benutze abjetzt diese WriteLn funktion aber die TRect Werte sind einfach falsch.
Left und Top sind am sinnlosesten, die haben 6-Stellige Werte wobei Right und Bottom nur 3 Stellige haben
Kartenspiel
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Jop habe ich grade gelesen^^
Es lag an dem SCheiß - ".free" , ich habe mir gedacht wenn es überall steht das man free'n muss dann mache ich es auch , aber habe dabei vergessen das die Karten in diese Liste eingetragen werden bzw nur die Pointer dazu und wenn ich dann free machen würde wären diese Punkte sinnlos^^
Also Danke , auf sowas muss man ersmal kommen , vielen Dank
Es lag an dem SCheiß - ".free" , ich habe mir gedacht wenn es überall steht das man free'n muss dann mache ich es auch , aber habe dabei vergessen das die Karten in diese Liste eingetragen werden bzw nur die Pointer dazu und wenn ich dann free machen würde wären diese Punkte sinnlos^^
Also Danke , auf sowas muss man ersmal kommen , vielen Dank

-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Brauche wieder hilfe^^
Hey leute
ich bekomme manchmal diesen Fehler "List index out of bounce" wenn ich das Programm erstelle/ausführe
irgendeine meiner TList's erzeugt wohl diesen Fehler
ich denke das passiert in der Prozedur KartenAufteilen aber habe extra noch die davorige Prozedur gepostet, denn erst wird SetCards danach Kartenaufteilen aufgerufen
Ich finde da keinen Fehler o.ä 
Falls nötig lade ich noch alle Quellcodes hoch^^
MfG
ich bekomme manchmal diesen Fehler "List index out of bounce" wenn ich das Programm erstelle/ausführe
irgendeine meiner TList's erzeugt wohl diesen Fehler
ich denke das passiert in der Prozedur KartenAufteilen aber habe extra noch die davorige Prozedur gepostet, denn erst wird SetCards danach Kartenaufteilen aufgerufen
Code: Alles auswählen
procedure TSpielfeld.SetCards;
var
i,j,l : Integer;
ct : TCardTypen;
cTyp : String;
cName : String;
Card : PCard;
begin
for j := 0 to 51 do
begin
//l := CardList.add(TCard.Create(Self));
New(Card);
Card^ := TCard.Create(Self);
CardList.add(Card);
with Card^ do
begin
Parent := Self;
DoubleBuffered := True;
rRaster := Self.rRaster;
Left:=Self.Width-Width;
Top:= Self.Height-Height;
Moveable:=false;
ZeigeDeck:=true;
//Spielfeld:=@Self;
//WriteSpieler(Spieler);
end;
end;
j := 0;
for ct := ctHerz to ctPik do
begin
case ct of
ctHerz: cTyp := 'herz';
ctCaro: cTyp := 'caro';
ctKreuz:cTyp := 'kreuz';
ctPik: cTyp := 'pik';
end;
for i := 2 to 14 do
begin
Card := CardList.Items[j];
with Card^ do
begin
CardType:=ct;
CardValue:=i;
case i of
11: cName := 'bube';
12: cName := 'dame';
13: cName := 'koenig';
14: cName := 'ass'
else cName := IntToStr(i);
end;
CardName:=cTyp+'_'+cName;
Inc(j);
end;
{ with CardList...}
end; { for }
end; {for}
end;
procedure TSpielfeld.KartenAufteilen;
var
i,j,l,x : Integer;
fertig, ok: Boolean;
Card : PCard;
tempCard: PCard;
tempList: TList;
begin
tempList := TList.Create;
tempList.AddList(CardList);
WriteCardList(CardList);
fertig := false;
ok := false;
Randomize;
i := Random(4);
case i of
0: Trumpf := ctHerz;
1: Trumpf := ctCaro;
2: Trumpf := ctKreuz;
3: Trumpf := ctPik;
end;
i := 0;
l := 0;
while not fertig do
begin
Randomize;
j := Random(tempList.Count);
Card := tempList.Items[j];
with Card^ do
begin
if not AufDerHand AND (Spieler <> Self.Spieler) then
begin
if l <> 0 then
begin
tempCard := tempList.Items[l];
x := ((tempCard^).CardValue) - ((Card^).CardValue);
if x < 0 then
x := x * (-1);
if x > 5 then
begin
ok := true;
end;
end
else
ok := true;
if ok then
begin
l := j;
AufDerHand:=true;
Spieler := Self.Spieler; { Später wenn netzwerk dann anders halt ne^^ }
HandList.Add(Card);
//CardList.Pack;
//WriteCard(Card^);
CardList.Delete(j);
//CardList.Remove(Card);
Inc(i);
end;
end;
end;
if i = 6 then
fertig := true;
end;
//Card := CardList.Items[j];
{ karten auf feld legen }
i := 0;
fertig := false;
MussLegen := false;
CardList.Pack;
Randomize;
while not fertig do
begin
Randomize;
j := Random(tempList.Count);
//Card:= Pointer(CardList.Items[j]);
//WriteCard(Card^);
Card := tempList.Items[j];
with Card^ do
begin
if (Spieler <> Self.Spieler) AND (Spieler <> sp2) then
begin
//AufDerHand := true;
Spieler := sp2; { Später wenn netzwerk dann anders halt ne^^ }
//MouseDown(mbLeft,[ssCtrl],rRaster[((1+i)*2)-1].Rect.Left,rRaster[((1+i)*2)-1].Rect.Top);
//Left := rRaster[((1+i)*2)-1].Rect.Left;
//Top := rRaster[((1+i)*2)-1].Rect.Top;
//MouseUp(mbLeft,[ssCtrl],rRaster[((1+i)*2)-1].Rect.Left,rRaster[((1+i)*2)-1].Rect.Top);
LegeKarte(@rRaster[((1+i)*2)-1],tempList.Items[j]);
ZeigeDeck:= false;
Inc(i);
BringToFront;
//WriteCard(Card^);
end;
end;
if i = 6 then
fertig := true;
end;
tempList.Free;
CardList.Pack;
WriteCardList(CardList);
//AlignCards;
end;

Falls nötig lade ich noch alle Quellcodes hoch^^
MfG
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
weil ich mit dem nicht klar komme, zu blöd dafür^^
Habs gelöst^^
hab ja am anfang die TList kopiert und dann immer von der originalen Gelöscht, da es noch in der kopie drinne ( und schleife nur auf die kopie zugreif ) kam es manchmal zu diesem fehler weil es den index nicht mehr in der originalen gab^^
Habs gelöst^^
hab ja am anfang die TList kopiert und dann immer von der originalen Gelöscht, da es noch in der kopie drinne ( und schleife nur auf die kopie zugreif ) kam es manchmal zu diesem fehler weil es den index nicht mehr in der originalen gab^^
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
1. Am rechten Rand des Quelltexteditors an gewünschter Stelle einen Breakpoint setzen. Hier hält der Debugger das Programm an, wenn er die Stelle im Code erreicht.EugenE hat geschrieben:weil ich mit dem [Debugger] nicht klar komme
2. Die Maus über fragliche Variablen halten ---> Der Wert der Variable wird angezeigt
3. Sich vorsichtig durch F8 - und wenn notwendig durch F7 - im Code vorantasten. Durch F8 wird jeweils nur die nächste Programmzeile ausgeführt. Dadurch kann man sich dann an die Fehlerstelle recht gut annähern.
4. Fehler beheben.
Gibt daneben noch viele andere nützliche Funktionen. Lohnt sich also, den Debugger mal zu probieren

Gruß, Euklid