Autor |
Beitrag |
herni
      
Beiträge: 20
Erhaltene Danke: 1
|
Verfasst: Di 14.03.06 21:33
Hallo Leute,
ich habe angefangen das Brettspiel Mühle zu programmieren. Ihr könnt es euch hier runterladen: web25.ks1.kdsrv.de/leer/muele.rar
So ich habe mir wie ihr seht ein Feld mit 24 Images gemacht. Und in der Prozedur pruefmuehle kommt es zu einem Problem. Startet das Spiel mal, klickt auf "Neues Spiel" und dann an eine beliebige Position, wo ihr euren Stein hinsetzen wollt. Und dann kommt es in der Prozedur pruefmuehle in Zeile 113 zu irgend einem Zugriffsfehler. Leider kann ich mir der kryptischen Fehlermeldung nicht viel anfangen, aber ich hoffe das mir jemand helfen kann, da mir nicht klar ist wo das Problem liegt. In den anderen Prozeduren funktioniert das Zugreifen auf die Images per feld[i] ja auch. Wäre euch sehr dankbar wenn mir hier jemand weiterhelfen könnte.
P.S.: Bitte nicht erschrecken, die Grafik werde ich noch etwas schicker gestalten 
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 14.03.06 21:43
poste mal denn quelltext der betroffenen procedure.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 14.03.06 21:53
Zuletzt bearbeitet von Marc. am Di 14.03.06 22:24, insgesamt 4-mal bearbeitet
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 14.03.06 21:55
das reicht mir nicht! ich brauche die ganze procedure!
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 14.03.06 21:56
er hat seine quelltext doch hochgeladen
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: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Image1: TImage; P1: TImage; P2: TImage; P3: TImage; P5: TImage; P4: TImage; P6: TImage; P7: TImage; P8: TImage; P9: TImage; P10: TImage; P11: TImage; P12: TImage; P13: TImage; P14: TImage; P15: TImage; P16: TImage; P17: TImage; P18: TImage; P19: TImage; P20: TImage; P21: TImage; P22: TImage; P23: TImage; P24: TImage; Start: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;
procedure SchwarzSetzt(var anzahl_schwarz:integer); procedure StartClick(Sender: TObject); procedure WeissSetzt(Sender: TObject); procedure FormCreate(Sender: TObject); procedure pruefmuehle(farbe: string);
private public end;
var Form1: TForm1; anzahl_weiss, anzahl_schwarz: integer; feld: array [1..24] of TImage; linie: array [1..16] of boolean;
implementation
{$R *.dfm}
procedure TForm1.WeissSetzt(Sender: TObject); begin IF anzahl_weiss>=1 then begin IF TImage(Sender).Tag=0 then begin TImage(Sender).Picture.LoadFromFile('muehlstein_weiss.bmp'); TImage(Sender).Tag:=1; anzahl_weiss:=anzahl_weiss-1; Label2.Caption:=inttostr(anzahl_weiss); SchwarzSetzt(anzahl_schwarz); end else begin IF (TImage(Sender).Tag=1) OR (TImage(Sender).Tag=2) then Application.MessageBox('Hier befindet sich bereits ein Stein, bitte wählen Sie einen freien Platz!','Bereits belegt',MB_OK); end; end; end;
procedure TForm1.SchwarzSetzt(var anzahl_schwarz:integer); var gesetzt: boolean; i: integer; begin gesetzt:=false; Repeat i:=random(23)+1; If feld[i].Tag=0 then begin feld[i].Picture.LoadFromFile('muehlstein_schwarz.bmp'); feld[i].Tag:=2; gesetzt:=true; anzahl_schwarz:=anzahl_schwarz-1; Label4.Caption:=inttostr(anzahl_schwarz); end; Until gesetzt=true; pruefmuehle('schwarz'); end;
procedure TForm1.pruefmuehle(farbe: string); var i,j,f: integer; begin If farbe='schwarz' then f:=2; If farbe='weiss' then f:=1; i:=1; j:=1; Repeat If (feld[i].Tag=f) and (feld[i+1].Tag=f) and (feld[i+2].Tag=f) and (linie[j]=false) then begin linie[j]:= true; end; i:=i+1; inc(j); Until j=16; end;
procedure TForm1.StartClick(Sender: TObject); var i: integer; begin For i:=1 To 24 Do begin feld[i].Picture.LoadFromFile('muehlstein_leer.bmp'); feld[i].Tag:=0; end; anzahl_schwarz:=9; anzahl_weiss:=9; Label2.Caption:=inttostr(9); Label4.Caption:=inttostr(9); end;
procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin feld[1]:=P1; feld[2]:=P2; feld[3]:=P3; feld[4]:=P4; feld[5]:=P5; feld[6]:=P6; feld[7]:=P7; feld[8]:=P8; feld[9]:=P9; feld[10]:=P10; feld[11]:=P11; feld[12]:=P12; feld[13]:=P13; feld[14]:=P14; feld[15]:=P15; feld[16]:=P16; feld[17]:=P17; feld[18]:=P18; feld[19]:=P19; feld[20]:=P20; feld[21]:=P21; feld[22]:=P22; feld[23]:=P23; feld[24]:=P24; For i:=1 To 16 Do begin linie[i]:=false; end; end;
end. |
bitte schön 
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 14.03.06 22:18
was ist 3*16?
das ist auf jeden fall dein fehler.
du incrementierst zum einen j 16 mal. zum anderen un jeder runde i um 3. machst du das ganze 16 runden lang bist du bei 48! was deutlich jenseits von 24 liegt. und das ist ja die obergrenze deines arrays auf das du mit i zugreifst.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 14.03.06 22:20
habe ich doch schon gesagt 
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 14.03.06 22:28
du kannst auch nicht so einfach auf eine "linie" prüfen. dazu musst du schon ganz genau alle möglichen kombinationen wie eine linie auftreten kann probieren. allerdings kannst du dir das vereinfach indem du dir ein konstantes array anlegst das die indices der jeweiligen drei felder aufnimmt die eine linie bilden.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|