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
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
# 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ß!