You are not logged in.

  • Login

1

Wednesday, December 8th 2010, 7:59pm

Schiffeversenken

Hallo!
Ich wollte ein Schiffe-Versenken-Spiel machen, hat auch geklappt.
Dann wollte ich Grafik hinzufügen, lief auch relativ gut.
Doch jetzt stehe ich vor einem Problem.
Wie kann ich die Größe eines Schiffes bestimmen?

Wie platziere ich das dann?
Wie kann ich testen lassen ob es den Bildrand überschreitet?

Hab es einmal hin bekommen, hab dann aber das Projekt gelöscht..... :D Jetzt kann ich nicht mehr nach gucken wie ich das gelöst habe.....
Ich bin sicher ihr könnt mir wieder helfen.
Quelltext ist nicht nötig, bezieht es einfach an einem kleinem selbst geschriebenem Syntax, der in der genutzten Funktion ist.

2

Wednesday, December 8th 2010, 8:24pm

Geht es dir nun um die Grafiken oder die virtuellen Spielsteine?

Hab es einmal hin bekommen, hab dann aber das Projekt gelöscht..... :D Jetzt kann ich nicht mehr nach gucken wie ich das gelöst habe.....

Klingt sehr suspekt! ?(

3

Wednesday, December 8th 2010, 8:28pm

Mir geht es nur darum die Schiffe zu platzieren ohne Grafiken.

4

Wednesday, December 8th 2010, 8:44pm

Und nun darf ich raten, was dir weiterhelfen könnte? Eine genauere Beschreibung und dein bisheriger Ansatz (mit Code) wären unglaublich hilfreich.

5

Wednesday, December 8th 2010, 8:51pm

Mir würde ein Beispiel helfen wo einfach nur in einem kleinem Syntax gezeigt ist, wie man Ein Schiff auf eine bestimmte Größe setzt und die Grenzen testet usw.
ich meine nur, weil 297 Zeilen Code sind ohne "Spoiler" Funktion ja nicht gerade wenig.....

6

Wednesday, December 8th 2010, 10:06pm

es will auch niemand deinen ganzen code sehen, sondern nur den ansatz um das problem zu lösen.
Außerdem sind 270 Zeilen gar nichts

7

Wednesday, December 8th 2010, 10:29pm

Zualledem kann man Dateien auch anhängen ;) Dann fallen die 297 Zeilen nicht so auf...

8

Thursday, December 9th 2010, 4:13pm

Es nur an der Seite.
Ich hab ja auch kein Problem mit meinem Code, der ist einwandfrei!
Nur geht es halt jetzt Darum ein Schiff zu machen. Ich kann bisher nur ein Feld immer machen. Testen lassen ob sich was überschneidet kann ich nicht, oder was ich halt auch nicht kann ist nun mal mehr als ein Feld zu zusammen zu knüpfen, ein "Schiff" also....
Um ein Feld zu machen und es ja dann auch zu besetzen/beschießen nimmt ja das: (angenommen die Variablen sind fertig erstellt und so)

C/C++ Quellcode

1
Karte[y][x].Besetzt = true;


Um die Koordinaten abzufragen und dann beschießen ja dann so etwas:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
do
{cout << "Hoehe (1-" << Hoehe << "): ";
cin >> y;
}while (y=0 || y>5);
do
{
cout << "Breite (1-" << Breite << "): ";
cin >> x;
}while (x=0 || x>5);
Karte[y][x].Besetzt = true;


Wie erstelle ich mit einem mal gleich 2, 3, 4 usw. Felder? Das wichtige wäre, dass vorerst getestet wird ob es sich beim einfachem setzen überschneiden.
Dann möchte ich angeben in welche Richtung das Schiff zeigen soll (Vertikal oder Horizontal) was dann auch wieder getestet werden müsste.....
Da ist mein Problem. Angefangen hab ich halt damit speziell für diese Schiffe noch nicht, ich weiß ja nicht wie und im Buch steht leider auch nichts.....

9

Thursday, December 9th 2010, 4:43pm

Na an sich musst du das Felder-Belegen mehrmals durchlaufen. Also musst du dir eine Schleife bauen. Die folgenden Schritte musst du umsetzen:

1. Entscheide, wie lang/groß das Schiff sein soll (Speichern einer Zahl in einer Variablen) und die Richtung (Zahl oder String oder Char in einer Variable speichern)
2. Durchlaufe die Schleife, so oft wie das Schiff lang/groß sein soll und setze die Punkte.
2a. Das Schleifengerüst enthält also deine Variable mit der Schiffgröße.
2b. Der Schleifeninhalt prüft, ob die Punkte schon besetzt sind oder ob sie gesetzt werden können.
2c. Das Punktesetzen berechnet je nach Richtung neue Punkte.

Mit Schleifen kennst du dich anscheinend ja schon aus. Wo genau hakts denn jetzt noch?

10

Thursday, December 9th 2010, 4:55pm

Die Idee hatte ich natürlich auch schon, mein Problem wäre, wenn der User mal aus Spaß...
Nein, warte, ach so!

Und wie kann ich testen lassen ob es die Karte überschreitet?

EDIT: Mein Problem wäre dann, wie mache ich weiß das er eins nach rechts oder eins nach links gehen soll? Einfach an der jeweiligen "Achse" ein +1/-1 setzen?
Also:

C/C++ Quellcode

1
2
3
...
Karte[y+1][x]...
...


Oder?

11

Thursday, December 9th 2010, 5:39pm

Und wie kann ich testen lassen ob es die Karte überschreitet?

Du überprüfst, ob "Startpostion + Länge des Schiffes" die Höhe bzw. die Breite des Spielfeldes überschreitet. Alternativ kannst du auch während der Schleife prüfen, ob der aktuelle Index gültig ist.
EDIT: Mein Problem wäre dann, wie mache ich weiß das er eins nach rechts oder eins nach links gehen soll? Einfach an der jeweiligen "Achse" ein +1/-1 setzen?

Ja. Wobei du dafür eigentlich den Schleifenzähler verwenden solltest.

12

Thursday, December 9th 2010, 5:51pm

war ja pseudo Code ohne großes darum herum....
Jedenfalls verstehe ich nur noch eine Sache nicht....
Die Startposition sind doch 2 Werte und nicht einer, es ist ja 2D....
Die jeweiligen Positionen x und y zu addieren wäre ja etwas komisch oder?
Das wäre dann sie letzte Frage die ich noch nicht so ganz verstehe.

13

Thursday, December 9th 2010, 6:02pm

Du erhöhst natürlich entweder den x- oder den y-Wert abhängig von der Ausrichtung des Schiffes. Nur wenn du eine diagonale Stellung zulässt, ist eine Erhöhung beider Werte sinnvoll.

14

Thursday, December 9th 2010, 6:22pm

Ach so ja klar ganz vergessen..... :-D
Gut, hat sich dann hiermit gelöst.

Similar threads

Social bookmarks