Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Schiffe versenken. Strategie

stefan1568 / 5 Antworten / Baumansicht Nickles

Hallo leute.

leider muss i das spiel schiffe versenken in C nachproggen. das ganze ist ungefähr so aufgebaut.


/**************/

1. Schiffe setzen
2. Spielfeld zeigen
3. Spielfeld speichern
4. ..................
.
.
.

/**********************/

das ganze ist also ziemlich textbasiert.
das spielfeld wird mit blanks (freier Platz) und X (wo ein Schiff steht). also irgendwie eine mischung zwischen textbasiert und grafisch.
so, und jetzt meine fragen.


wie kann ich die schiffe am besten setzen so dass es zu keinen fehlern kommt. es soll einen kreuzer mit 5 punkten, begleitschiff mit 4 punkten,........ geben.


wie soll der computergegner am besten spielen? sodass er z.b. bei einem treffer die umliegenden felder bevorzugt... weiß jemand eine bessere strategie?.

mfg stefan1568

bei Antwort benachrichtigen
DaWoo stefan1568 „Schiffe versenken. Strategie“
Optionen

# Schiffe kannst du ja in ein 2 Dimensionales bool array packen.

bool ships[50][50]={
{
{0,0,0,0,1,0.....}
{0,0,0,0,1,0.....}
{0,0,0,0,1,0.....}
{1,1,1,0,1,0.....}
{0,0,0,0,1,0.....}
.
.
.
}

# zum eingeben brauchst do logischerweise x/y anfangs endkoordinaten,
# die solltest du erstmal prüfen damit keine diagonalen möglich sind:

x1==x2 || y1==y2

x1-x2 == shiptype[gewählt] || y1-y2 == shiptype[gewählt] //siehe weiter unten

# dann machst du ne verschachtelte Schleife die y und y läuft

für x = x1 zu x2
_für y = y1 zu y2
__wenn: ships[y][x] dann: Fehler = True

# und dann nochmal läuft, (kannst schleifenkörper ruhig 2x schreiben)

wenn: Fehler = False dann:
_für x = x1 zu x2
__für y = y1 zu y2
___ships[y][x] = 1
sonst:
_Ausgabe: "Fehler"

# Noch dazu ein Schifferegister

int shiptype[4]={5,4,3,2}
string shipname[4]={"Kreuzer", "Begleitschiff"....}

# Schiffsmenü dann so:

für i = 1 zu 4
_wenn: shiptype[i] dann: Ausgabe: i + "r " + shipname {}
Eingabe: gewählt

# Ich schätze ihr sollt zufallszahlen nehmen.
# Naja man könnte mit einer Formel den Zufallsbereich ja beschränken:

zX = rand(zXalt-3 bis zXalt+3)
zY = rand(zXalt-3 bis zXalt+3)

# bzw mit den vorangegangenen werten eine Zeile oder Spalte ermitteln:

Wenn: zXalt == zXälter dann: zX = zXalt
Wenn: zYalt == zYälter dann: zY = zYalt

# natürlich muss das dann auch "weiterrutschen" also zX zu zXalt zu zXälter

# Die ausgabe des Spielfelds ist wieder unsere doppelschleife:

für x = 0 zu 50
_für y = 0 zu 50
__Wenn: ships[y][x] dann: Ausgabe: "X"

# Wenn: wert (bedeutet alles was nicht 0 ist also buchstaben Zahlen usw. ;) kleiner Trick)

# Viel Spaß!

bei Antwort benachrichtigen
Borlander stefan1568 „Schiffe versenken. Strategie“
Optionen
wie kann ich die schiffe am besten setzen so dass es zu keinen fehlern kommt
Was meinst Du mit Fehlern? Das weder zwei Schiffe über noch direkt (ohne ein Feld Abstand) nebeneinander liegen?

Am bequemsten dürfte es sein die Schiffe mit absteigender Größe zu plazieren. Also erst mal das 5er Schiff, anschließend die kleineren (wobei hier jeweils vorher geprüft werdem muß ob an der gewünschten Position der nötige Platz ist (die Schiffe dazu am besten in einem Array speichern und von Schiffen belegte Plätze sowie direkt benachbarte "färben")...

wie soll der computergegner am besten spielen? sodass er z.b. bei einem treffer die umliegenden felder bevorzugt... weiß jemand eine bessere strategie?.
Würde ich spontan auch so machen, wobei das Zielen auf umliegende Feler nur so lange sinnvoll ist solange noch nicht Schiffe >1 entdeckt wurden...


Gruß
Borlander
bei Antwort benachrichtigen
stefan1568 Nachtrag zu: „Schiffe versenken. Strategie“
Optionen

das mein ich so: ich könnte ja theoretisch schreiben dass der 1.punkt vom schiff 3 auf [3][2] ist und der zweite auf [6][6]. dann könnte ich ja ein schiff "teilen" und die punkte willkürlich setzen.

mfg stefan

bei Antwort benachrichtigen
Borlander stefan1568 „das mein ich so: ich könnte ja theoretisch schreiben dass der 1.punkt vom...“
Optionen

Hallo Stefan,
was meinst du mit schiff "teilen" und die punkte willkürlich setzen? Ich kann dem nicht ganz entnehmen was Du eigentlich wissen möchtest...

Die Schiffe müssen natürlich in jedem Fall zufällig plaziert werden, sonst würde es schnell langweilig ;-)


Gruß
Borlander

bei Antwort benachrichtigen
DaWoo stefan1568 „das mein ich so: ich könnte ja theoretisch schreiben dass der 1.punkt vom...“
Optionen

Schau nochmal in meinen Fetzen... da hab ich schon einen Test gemacht ob y1=y2 oder x1=x2 sprich das Schiff grade auf einer horizontale oder vertikale liegt.

bei Antwort benachrichtigen