Schiffe versenken Kontrolle

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Wiesna
Beiträge: 2
Registriert: Mo 29. Apr 2013, 08:51

Schiffe versenken Kontrolle

Beitrag von Wiesna »

Hi,
wir haben momentan in der Schule die Aufgabe Schiffe versenken zu kontrollieren.
Ich habe mir eine Prozedur angelegt, die sicherstellt, dass kein Schiff über den Rand gesetzt werden kann, oder man die Schiffe nicht über einander setzen kann.
Allerdings ist es, als würde Lazarus die Prozedur einfach überspringen >.<.
Ich geb euch mal den Quelltext:

Code: Alles auswählen

 procedure kontrolle;
 begin
  schiff[index].x:=form1.feld.col;
  schiff[index].y:=form1.feld.row;
  schiff[index].laenge:=index+1;
  darfsetzen := true;
 if schiff[index].ausrichtung = true then begin
 for i := form1.feld.col to schiff[index].laenge do begin
 if (form1.Feld.cells[form1.feld.row,form1.feld.col]<>'') then
 darfsetzen := false;
 end;
 end;
 if schiff[index].ausrichtung = false then begin
 for i := form1.feld.row to schiff[index].laenge do begin
 if (form1.Feld.cells[form1.feld.row,form1.feld.col]<>'') then
 darfsetzen := false;
 end;
 end;
 if
 ((schiff[index].x+schiff[index].laenge >= form1.Feld.colcount)
 or
 (schiff[index].y+schiff[index].laenge >= form1.feld.rowcount))  then
 darfsetzen := false;
 
 if
 ((schiff[index].x+schiff[index].laenge < form1.Feld.colcount)
 or
 (schiff[index].y+schiff[index].laenge <form1.feld.rowcount))  then
 darfsetzen := true;
 
 if darfsetzen = false then
 showmessage('An dieser Position kannst du dein Schiff nicht setzen! Setze es um.');
 
 end;   

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Schiffe versenken Kontrolle

Beitrag von Michl »

Kann mir nicht vorstellen, dass sich jemand durch den Code liest (weder vollständig noch eine Fehleranalyse vorhanden)!
if darfsetzen = false then
showmessage('An dieser Position kannst du dein Schiff nicht setzen! Setze es um.');
Also, um zu testen, ob die Procedure "Kontrolle" ausgeführt wird einfach das "if darfsetzen = false then" mal ausklammern, wenn dann die Meldung nicht erscheint wird tatsächlich die Procedure "Kontrolle" nicht aufgerufen.

Wird die Meldung ausgegeben, dann liegt der Fehler in der Festlegung von "darfsetzen".

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Soner
Beiträge: 726
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Schiffe versenken Kontrolle

Beitrag von Soner »

Wie kommst du drauf das die FUnktion nicht aufgerufen wird; werden die Schiffe über dem "linken" und "oberem" Rand plaziert?
Ich weiß nicht wie ihr euer Spielfeld realisiert aber meistens wenn man an einem Ende kontrolliert dann muss man auch am anderen Ende kontrollieren.
Ich glaube dir fehlt irgendwie so etwas wie "Schiff<Feld.0" Kontrolle.

Wiesna
Beiträge: 2
Registriert: Mo 29. Apr 2013, 08:51

Re: Schiffe versenken Kontrolle

Beitrag von Wiesna »

Hab jetzt mittlerweile per Listbox fehler gesucht und dabei ist mir aufgefallen, dass er die feld.cells gar nicht "nimmt"
das ist mein code:

Code: Alles auswählen

form1.listbox1.items.add(inttostr(index));
form1.listbox1.items.add(inttostr(form1.feld.Col));
form1.listbox1.items.add(inttostr(form1.feld.row));
form1.listbox1.items.add(inttostr(i)+':'+form1.Feld.cells[i,form1.feld.row]);    
Aber in der Listbox sieht es nur so aus
http://s14.directupload.net/images/130430/tif6k5xt.png :/

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: Schiffe versenken Kontrolle

Beitrag von grl »

Und daraus sollen wir jetzt raten was du da wie aufrufst oder wie?

Wie wär's mal mit einer vollständigen Fehlerbeschreibung, vollständigem, formatiertem und ein wenig dokumentiertem Code und einer klaren Aussage, was denn jetzt das Problem ist?

Deine Chancen eine brauchbare Antwort zu erhalten würden gewaltig steigen....

Luggi

Antworten