tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Jennesta
  • 1 Beitrag von Jennesta
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
406
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Marimi Marimi ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    27
    Hallo Leute,

    ich muss Schiffe versenken Programmieren und hab ein kleines Problem an der Stelle wo es darum geht das Spieler2 Koordinaten ein gibt zum Angriff. Hier ist der ganze Code den ich bis jetzt habe.
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    
     #include <iostream>
    using namespace std;
     
    const int A=9;
    const int B=7;
     
    int main()
    {
    char Spielfeld[A][B];
    int a, b;
    char ca, cb;
     
     
        for (a=0; a<A; a++)
        {
            for (b=0; b<B; b++)
            {
                Spielfeld[a][b] = '.';
            }
        }
        // Anzeige und Eingabe
        bool SchleifenEnde=false;
        int xin, yin;
        do
        {
            cout << "      1  2  3  4  5  6  7  8  9" << endl;
            for (b=0; b<B; b++)
            {
                cout << (char)('A'+b) << "   ";
                for (a=0; a<A; a++)
                {
                    cout << "  " << Spielfeld[a][b];
                }
                cout << endl;
            }
            cout << "Spieler 1 -- Koordinaten setzen: (ZZ eingeben wenn die Schiffe platziert sind)" << endl;
            cin >> ca >> cb;
            xin = ca - '1';
            yin = cb - 'A';
            if (xin>=0 && xin<9 && yin>=0 && yin<7)
            {
                Spielfeld[xin][yin] = '1';
            }
            else
            {
                 SchleifenEnde = true;
            }
        }
        while (!SchleifenEnde);
     
     
     
     
    char cy, cx;
     
     
        cout << "Spieler 2 -- Welches Feld befeuern?:"  << endl;
        cin >> cy >> cx;
            xin = cy - '1';
            yin = cx - 'A';
            if (xin>=0 && xin<9 && yin>=0 && yin<7)
            {
              Spielfeld[xin][yin] = '2';
            }
            else;
     
    }

    Ich will die Koordinaten wieder in Indizes umrechnen und prüfen, ob an dieser Stelle eine 1 steht (Treffer) oder nicht (Wasser). Getroffene Punkte im Array sollen durch '2.' ersetzt werden. Das ganze in einer Schleife, bis sich keine 1 im Feld mehr findet. Versuchs seit gestern und bekomms ned hin. Kann mir bitte jemand helfen?

    Lieben Gruß
    Marimi
     

  2. #2
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Wenn du in dem Spielfeld Array '2.' speichern willst, dann musst du die Dimension vergrößern.
    Code cpp:
    1
    
    char Spielfeld[A][B][2];

    Dann halt an erster Stelle die 2 rein und an zweiter den Punkt.
     
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

  3. #3
    Marimi Marimi ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    27
    So die angeschossene Position kann ich jetzt speichern:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    char cy, cx;
     
     
        cout << "Spieler 2 -- Welches Feld befeuern?:"  << endl;
        cin >> cy >> cx;
            xin = cy - '1';
            yin = cx - 'A';
            if (xin>=0 && xin<9 && yin>=0 && yin<7)
            {
             Spielfeld[xin][yin] = '2';
            }
            else;
            cout << "      1  2  3  4  5  6  7  8  9" << endl;
            for (b=0; b<B; b++)
            {
                cout << (char)('A'+b) << "   ";
                for (a=0; a<A; a++)
                {
                    cout << "  " << Spielfeld[a][b];
                }
                cout << endl;

    Jetzt kommt nur noch der Part mit Treffer, Versenkt und so. Ich wollte das so machen, dass ich eine for Schleife mit integrierter if Abfrage mache die alle Zeilen durch geht und prüfen lasse ob auf den Nachbarfeld noch wo eine 1 steht, wenn ja soll er "Treffer" ausgeben und sonst "Versenkt" naja und wenn da nur son '.' und irgendwie muss sich das Wasser noch einbauen '

    Leider arbeite ich das erste Mal mit mehrdimensionalen Arrays und weiß nicht recht wie ich da arbeiten muss. Bei meinem Versuch gabs so eine ISO Fehler meldung: ISo forbidds comparison between pointer und integer.

    Kann mir bitte wer helfen?
    Danke im Vorraus, lieben Gruß
    Marimi
     

  4. #4
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Kann es sein, dass bei deinem Code etwas fehlt? Die Abfrage kann ich jetzt nicht erkennen.

    Aber nach dem was du schreibst, scheinst du ja eine Zahl mit einer Adresse vergleichen zu wollen das geht natürlich nicht. Bei einem solchen Vergleich müsstest du den Zeiger dereferenzieren also

    Code cpp:
    1
    
     if(*p==k)

    sofern p ein Zeiger auf int und k ein int.
    Marimi bedankt sich. 
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

  5. #5
    Marimi Marimi ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    27
    da der ganze code sry da hat es was abgeschnitten:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    
    #include <iostream>
    using namespace std;
     
    const int A=9;
    const int B=7;
     
    int main()
    {
    char Spielfeld[A][B];
    int a, b;
    char ca, cb;
     
     
        for (a=0; a<A; a++)
        {
            for (b=0; b<B; b++)
            {
                Spielfeld[a][b] = '.';
            }
        }
        // Anzeige und Eingabe
        bool SchleifenEnde=false;
        int xin, yin;
        do
        {
            cout << "      1  2  3  4  5  6  7  8  9" << endl;
            for (b=0; b<B; b++)
            {
                cout << (char)('A'+b) << "   ";
                for (a=0; a<A; a++)
                {
                    cout << "  " << Spielfeld[a][b];
                }
                cout << endl;
            }
            cout << "Spieler 1 -- Koordinaten setzen: (ZZ eingeben wenn die Schiffe platziert sind)" << endl;
            cin >> ca >> cb;
            xin = ca - '1';
            yin = cb - 'A';
            if (xin>=0 && xin<9 && yin>=0 && yin<7)
            {
                Spielfeld[xin][yin] = '1';
            }
            else
            {
                 SchleifenEnde = true;
            }
        }
        while (!SchleifenEnde);
     
     
     
     
    char cy, cx;
     
     
        cout << "Spieler 2 -- Welches Feld befeuern?:"  << endl;
        cin >> cy >> cx;
            xin = cy - '1';
            yin = cx - 'A';
            if (xin>=0 && xin<9 && yin>=0 && yin<7)
            {
             Spielfeld[xin][yin] = '2';
            }
            else;
            cout << "      1  2  3  4  5  6  7  8  9" << endl;
            for (b=0; b<B; b++)
            {
                cout << (char)('A'+b) << "   ";
                for (a=0; a<A; a++)
                {
                    cout << "  " << Spielfeld[a][b];
                }
                cout << endl;
            }
        for (int n=0; n; n++ ){ //Abfrage soll hier dann sein das war aber falsch
     
        }
    return 0;
     
    }
    ich hab quasi ein Spielfeld die Koordinaten wo Spieler1 ein schiff hinhaben will wird mit '1' belegt und die Koordinaten wo Spieler 2 drauf schießt kommt eine 2 rein. ' Aber ich glaube das kann so generll nicht funktionieren.

    Lieben Gruß
     

  6. #6
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Das wollte ich auch längst angemerkt haben. Beim "echten" Schiffeversenken hat ja auch jeder ein eigenes Spielfeld. Du kannst durchaus ein einziges Spielfeld nehmen, aber du solltest dann wieder durch eine weitere Dimension die verschiedenen Spieler kennzeichnen, das wird dann jedoch irgendwann unübersichtlich.

    Du kannst das natürlich auf verschiedene Weisen realisieren, die alle zum gleichen Ergebnis führen. Ich würde es z.B so realisieren das jedes Spielfeld eines Spielers mit 0=Wasser vorbelegt ist. Dann trägt jeder Spieler seine Schiffe (=1?) und wenn dann das Spiel beginnt kannst du mit einer weiteren Zahl Treffer signalisieren, und einer weiteren Zahl wiederum Nieten, so weißt du auch beim Betrachten einer Zahl sofort, was dort passiert ist.

    Grüße
    Marimi bedankt sich. 
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

Ähnliche Themen

  1. Schiffe versenken - Probleme
    Von Effa im Forum Java Grundlagen
    Antworten: 5
    Letzter Beitrag: 28.04.11, 15:54
  2. Schiffe versenken für Einsteiger?
    Von Marimi im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 14.11.10, 12:45
  3. [Perl] Schiffe versenken...
    Von Coldfist im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 21.01.07, 16:13
  4. Schiffe versenken
    Von Victim De Ace im Forum Java
    Antworten: 1
    Letzter Beitrag: 12.04.06, 18:21