Problem mit allShipsSunk()
-
- Beiträge: 27
- Registriert: Sa 25. Okt 2008, 11:25
Problem mit allShipsSunk()
hi,
ich komme bei der allShipsSunk() methode nicht weiter, oder besser gesagt, mir sind ein paar Sachen unklar. Ich hab mir das eigentlich so vorgestellt das ich bei jedem mal wenn ich eine Bombe abwerfe frage ob ein Schiff versenkt wurde. Wenn ja, zähle ich eine Variable hoch und dann in allShipsSunk() wird verglichen ob diese Zahl gleich der max. Anzahl von Schiffen ist. Ob ein Schiff versenkt wurde wollte ich überprüfen indem ich von der Position der Bombe immer eins ins in jede Richtung gehe und schaue ob da schon ein Schiff getroffen wurde, wenn ja wieder eins weiter ... maximal solange bis die Anzahl der Schritte mit der des Wertigkeit des Schifftyps übereinstimmen.
Jetzt kann ich aber nicht mit Sicherheit sagen das ich ein Schiff ganz versenkt habe, ich meine, ich kann mir nicht sicher sein ob ich das eine Schiff nur angeschossen habe und das welches direkt daneben liegt auch angeschossen wurde. (ich hoffe das es mit dem Bild im Anhang deutlich wird, links die Schiffe, rechts die Bomben)
wenn gegeben wäre das jedes Schiff nur einmal vorkommen darf, könnte man über die Wertigkeit im Feld unterscheiden, aber das ist ja nicht (wenn doch hab ichs überlesen).
oder mach ich mir das zu kompliziert?
mfg
Rainer
//edit
ok, glaube ich habs mir doch zu kompliziert gemacht. Nach nochmaligen überlegen ist mir in den Kopf gekommen das ich ja gar nicht genau wissen muss welches Schiff genau gesunken ist, sondern nur ob alle gesunken sind. Ich durchlaufe also das ganze Feld und schau ob da wo ein Schiff sitzt auch eine Bombe geworfen wurde. Oder?
ich komme bei der allShipsSunk() methode nicht weiter, oder besser gesagt, mir sind ein paar Sachen unklar. Ich hab mir das eigentlich so vorgestellt das ich bei jedem mal wenn ich eine Bombe abwerfe frage ob ein Schiff versenkt wurde. Wenn ja, zähle ich eine Variable hoch und dann in allShipsSunk() wird verglichen ob diese Zahl gleich der max. Anzahl von Schiffen ist. Ob ein Schiff versenkt wurde wollte ich überprüfen indem ich von der Position der Bombe immer eins ins in jede Richtung gehe und schaue ob da schon ein Schiff getroffen wurde, wenn ja wieder eins weiter ... maximal solange bis die Anzahl der Schritte mit der des Wertigkeit des Schifftyps übereinstimmen.
Jetzt kann ich aber nicht mit Sicherheit sagen das ich ein Schiff ganz versenkt habe, ich meine, ich kann mir nicht sicher sein ob ich das eine Schiff nur angeschossen habe und das welches direkt daneben liegt auch angeschossen wurde. (ich hoffe das es mit dem Bild im Anhang deutlich wird, links die Schiffe, rechts die Bomben)
wenn gegeben wäre das jedes Schiff nur einmal vorkommen darf, könnte man über die Wertigkeit im Feld unterscheiden, aber das ist ja nicht (wenn doch hab ichs überlesen).
oder mach ich mir das zu kompliziert?
mfg
Rainer
//edit
ok, glaube ich habs mir doch zu kompliziert gemacht. Nach nochmaligen überlegen ist mir in den Kopf gekommen das ich ja gar nicht genau wissen muss welches Schiff genau gesunken ist, sondern nur ob alle gesunken sind. Ich durchlaufe also das ganze Feld und schau ob da wo ein Schiff sitzt auch eine Bombe geworfen wurde. Oder?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Re: Problem mit allShipsSunk()
Dein Ansatz sieht sehr prozedural aus. Versuch's mal objektorientiert
Da fragst du das Schiff einfach, ob noch "ganze" Teile von ihm übrig sind.
Da fragst du das Schiff einfach, ob noch "ganze" Teile von ihm übrig sind.
¿ɯıɥ ssɐɹɹɐqɯǝ ʎɥʍ 'ʇou s,ʇı ɟı — noʎ llǝʇ ll,ǝɥ 'ɔɐɯ ɐ s,ʇı ɟı — sǝsn ǝɥ so ʇɐɥʍ uɐɯ ɐ ʞsɐ ɹǝʌǝu
-
- Beiträge: 27
- Registriert: Sa 25. Okt 2008, 11:25
Re: Problem mit allShipsSunk()
wenn ich dich richtig verstehe meinst du für die Schiffe eine eigene Klasse anlegen, das ist laut Aufgabenstellung aber nicht erwünscht!?
mfg RainerIhre zu implementierende Klasse soll das Spielfeld modellieren und die Spiellogik enthalten:
Re: Problem mit allShipsSunk()
Ich gebe DaVinci eigentlich recht, aber tatsächlich ist eine so saubere Programmierung nicht gefordert/gewünscht/erlaubt.
mfG
Markus
mfG
Markus
Re: Problem mit allShipsSunk()
man darf ja wohl ein Array an Schiffs Klassen dann in der Klass Spielfeld anlegen, und dann mit dem arbeiten. Kann mir wirklich nicht vorstellen, dass man das jetzt ohne Klassen machen soll...markusj hat geschrieben:Ich gebe DaVinci eigentlich recht, aber tatsächlich ist eine so saubere Programmierung nicht gefordert/gewünscht/erlaubt.
mfG
Markus
Re: Problem mit allShipsSunk()
Wofür brauchst du dann dein zweites Array, und insbesondere die Konstanten "WATER", "MINESWEEPER" etc.?
Ich bin der Ansicht, dass der elegante Lösungsansatz sich nicht mit der Aufgabenbeschreibung deckt ... mal am Montag im Tutorium nachhaken ... oder die Newsgroup befragen.
mfG
Markus
Ich bin der Ansicht, dass der elegante Lösungsansatz sich nicht mit der Aufgabenbeschreibung deckt ... mal am Montag im Tutorium nachhaken ... oder die Newsgroup befragen.
mfG
Markus
Re: Problem mit allShipsSunk()
Code: Alles auswählen
boolean flag = true;
for ( ... ) {
for ( ... ) {
if ( field[x][y] != WATER && !bomb[x][y] ) {
flag = false;
}
}
}
Re: Problem mit allShipsSunk()
Solange es nicht ausdrücklich verboten worden ist (und das ist es aus meiner Sicht nicht) und solange es dem Stil meines Programm zuträglich ist, füge ich eigene Klassen/Methoden hinzu (oder modelliere um) wie mir grad lustig ist.RainerZufall hat geschrieben:wenn ich dich richtig verstehe meinst du für die Schiffe eine eigene Klasse anlegen, das ist laut Aufgabenstellung aber nicht erwünscht!?mfg RainerIhre zu implementierende Klasse soll das Spielfeld modellieren und die Spiellogik enthalten:
Hat mir bisher auch keinerlei Abzüge erbracht, im Gegenteil.
Im letzten Blatt hab ich beispielsweise nicht die Terminal-Klasse genutzt. War nämlich nicht ausdrücklich gefragt. Tutor-Kommentar an der Stelle zu meinem Code&Comment: "gut"
¿ɯıɥ ssɐɹɹɐqɯǝ ʎɥʍ 'ʇou s,ʇı ɟı — noʎ llǝʇ ll,ǝɥ 'ɔɐɯ ɐ s,ʇı ɟı — sǝsn ǝɥ so ʇɐɥʍ uɐɯ ɐ ʞsɐ ɹǝʌǝu
Re: Problem mit allShipsSunk()
Gut, also ich hab dann jetzt noch einen Einwand, bin zu einer Lösung gekommen, aber ich finde die Aufgabenstellung trotzdem recht ungenau.
Sind alle Schiffe versunken, wenn
a) die maximale Anzahl der möglichen Schiffe versunken wurden oder
b) wenn alle Schiffe, die platziert wurden versunken sind?
Wenn a) Hier gibt es ein Problem mit der Aufgabenstellung. Es ist erlaubt nachdem das Bombadieren angefangen hat Schiffe hinzuzufügen.
Laut Aufgabenstellung dürfen diese nicht auf bereits bombadierte Felder platziert werden. Das heißt, wir nehmen mal den Extremfall an:
Alle Felder wurden bombadiert und man kann schließlich keine weiteren Schiffe aufs Spielfeld platzieren. Sind jetzt alle Schiffe versenkt oder
nicht?
b) einfach umzusetzen.
Und PS: Bei welchen Schiffe versenken kann man nachträgliche Schiffe hinzufügen?!
Wäre nett, wenn mir jemand mal das erklären könnte.
Cauchy
Sind alle Schiffe versunken, wenn
a) die maximale Anzahl der möglichen Schiffe versunken wurden oder
b) wenn alle Schiffe, die platziert wurden versunken sind?
Wenn a) Hier gibt es ein Problem mit der Aufgabenstellung. Es ist erlaubt nachdem das Bombadieren angefangen hat Schiffe hinzuzufügen.
Laut Aufgabenstellung dürfen diese nicht auf bereits bombadierte Felder platziert werden. Das heißt, wir nehmen mal den Extremfall an:
Alle Felder wurden bombadiert und man kann schließlich keine weiteren Schiffe aufs Spielfeld platzieren. Sind jetzt alle Schiffe versenkt oder
nicht?
b) einfach umzusetzen.
Und PS: Bei welchen Schiffe versenken kann man nachträgliche Schiffe hinzufügen?!
Wäre nett, wenn mir jemand mal das erklären könnte.
Cauchy
-
- Beiträge: 225
- Registriert: Sa 25. Okt 2008, 12:48
Re: Problem mit allShipsSunk()
Das ist nicht definiert, also würde ich naiv an die Sache herangehen und nur überprüfen, ob momentan noch Schiffe vorhanden sind, die nicht versenkt wurden. Ansonsten würde es ja noch komplizierter werden - denn was ist, wenn zwar noch nicht alle Schiffe platziert worden sind, aber keine mehr platziert werden können, weil das Spielfeld so bombardiert wurde, dass es keine zulässige Position mehr gibt?