![]() |
Reversi-Probleme mit Funktionen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!
Bei meiner Informatik-HA hänge ich leider an folgenden Problemen: 1.Aufgabe 2 des Zettels, nämlich eine function 'pruefen' zu programmieren, die mir einzelne Teile eines Stringgrids/arrays auf den Inhalt/den zugewiesenen Wert überprüft, zu erfüllen. 1.2 wie man Problem 1 programmiert 2 wie man das Ergebnis, nämlich die Anzahl der eingeschlosssenen Gegnersteine, irgendwo anzeigt 3 wie man die function pruefen überhaupt in einer procedure aufruft Das ich nicht erwarte, dass ihr die Hausaufgabe fertig programmiert, ist klar, aber für jeden Hinweis/Lösungsansatz wäre ich dankbar. Wieland :wall: oh mann, die sommerferien waren irgendwie zu lang, ich hab ja ALLES vergessen! :coder2: |
Re: Reversi-Probleme mit Funktionen
hi,
ich würde in der function pruefen als erstes mal x mit dx bzw y mit dy vergleichen, um raus zu bekommen, ob du die waagerechten, horizontalen oder diagonalen überprüfen musst. dann natürlich die randwerte, also den ersten und letzten stein. und an der spielfeldClick procedure würde ich auch nochmal was verändern.
Delphi-Quellcode:
damit wäre dann die ganze abfrage mehr oder weniger überflüssig.
if feld[spielfeld.Col, spielfeld.Row]=1 then // wieso 1, nimm doch rot
begin dransein:=1; // bringt zwischen case dransein of rot: begin ... end; end; auch nicht sehr viel, wenn die konstante rot = 1 ist. feld[spielfeld.Col, spielfeld.Row]:=1; // is doch überflüssig end; da das auch noch für den fall, dass dransein = blau ist vorkam, konnte man den code deutlich vereinfachen. statt deinen 28 zeilen wären es so nur 11;
Delphi-Quellcode:
if (feld[spielfeld.Col, spielfeld.Row] = 0) then
begin feld[spielfeld.Col, spielfeld.Row] := dransein; case dransein of rot : dransein := blau; blau: dransein := rot; end; spielfeld.Refresh; end else if (feld[spielfeld.Col, spielfeld.Row] <> dransein) then Application.MessageBox('Das Feld ist schon belegt!', 'Fehler'); |
Re: Reversi-Probleme mit Funktionen
Danke schonmal für deine Mühe, den spielfeldclick-Quellcode habe ich schon ausprobiert, ich muss nur noch die Möglichkeit ergänzen, dass man nicht auf die Spielsteine der eigenen Farbe klicken darf.
Die pruefen-Funktion werde ich mir gleich mal überlegen. edit:
Delphi-Quellcode:
das ist nun der fertige spielfeldclick-code
procedure TForm1.spielfeldClick(Sender: TObject); begin if (feld[spielfeld.Col,spielfeld.Row]=0) then begin feld[spielfeld.Col,spielfeld.Row]:=dransein; case dransein of rot : dransein := blau; blau: dransein := rot; end; spielfeld.Refresh; end else Application.MessageBox('Das Feld ist schon belegt!', 'Fehler'); end; |
Re: Reversi-Probleme mit Funktionen
also, aus dieser aufgabe/function pruefen werde ich nicht schlau....
gibt es da eine elegante Möglichkeit, bei der man sich nicht die Finger Wund tippt? Vielleicht ein Beispiel für eine Richtung? |
Re: Reversi-Probleme mit Funktionen
Liste der Anhänge anzeigen (Anzahl: 1)
Ist doch eigentlich ganz einfach: du musst von x|y nach dx|dy überprüfen, welche steine des gegners eingeschlossen sind. schau dir ienfach mein kleines bild an ;)
|
Re: Reversi-Probleme mit Funktionen
ich werde das mal durchdenken...
soll ich dann 'n paar zeilen schreiben für jede Richtung, mit ner for-Schleife? edit 1: Oh mann, ich komm nich weiter und das nervt |
Re: Reversi-Probleme mit Funktionen
ich würde so vorgehen:
1. zu prüfende Felder ermitteln: a)waagerecht?: y=dy -> zu prüfende felder: x|y, x+1|, x+2| .... dx|y b)senkrecht?: x=dx? -> zu prüfende felder: x|y, x|y+1,x|y+2 .... x|dy c)diagonal?: selber machen :P 2. felder prüfen: mit for-schleife durchgehen und schauen: ist da ein gegnerischer stein? sind die steine in einer linie? usw. usf. |
Re: Reversi-Probleme mit Funktionen
ich werd mal drüber nachdenken. Aber ersteinmal muss ich glaube ich mal frische Luft schnappen. Danke schonmal.
so, jetzt wollen wir doch mal schauen... sollen x und y jeweils die position des aktuell angewählten spielfeldes sein? dx und dy die Begrenzung für 2.? soll ich 1. mit if-formeln machen? womit sonst? for-schleifen? und vor allem was soll ich da schreiben? ojeojeojeojeoje so in etwa?
Delphi-Quellcode:
wie kann ich die function pruefen eigentlichg einbauen?
x:=spielfeld.Row;
y:=spielfeld.Col; label1.Caption:=IntToStr(x); label2.Caption:=IntToStr(y); if feld [(x+1),y]<>dransein then begin if feld [(x+2),y]<>dransein then begin if feld [(x+3),y]<>dransein then begin if feld [(x+4),y]<>dransein then begin if feld [(x+5),y]<>dransein then begin if feld [(x+6),y]=dransein then begin zahl:=zahl+6; etwa so? label3.Caption:=IntToStr(pruefen); |
Re: Reversi-Probleme mit Funktionen
also, einbinden, muss ich dat folgendermaßen, oder?
label3.Caption:=IntToStr(pruefen(spielfeld.Col,spi elfeld.Row)); |
Re: Reversi-Probleme mit Funktionen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz