Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Spiel: Schiffe versenken

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.01.2010, 16:11 Uhr
fr33g



Hey Leute, hab mir ein Spiel programmiert, nämlich Schiffe versenken, nach einigen Stunden Fehlersuche lief es endlich Jetzt habe ich noch eine Funtkion eingebaut damit das Spiel den Sieg meldet und sich beendet.
Jedoch funktioniert es einfach nicht und ich weiß nicht warum=(
Das Spiel macht einfach weiter.
Hoffe ihr könnt mir helfen:

main.cpp


C++:
#include "classBretter.h"

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

void anzahlZweierSchiffe(Bretter&, const int&, const int&, int&);
void anzahlDreierSchiffe(Bretter&, const int&, const int&, int&);
void anzahlViererSchiffe(Bretter&, const int&, const int&, int&);

const int size1 = 10;
const int size2 = 10;
const int size3 = 4;
bool stop = false;
int choiceGes;
int choiceGes1;
int choiceGes2;
int choiceGes3;

int main()
{
    srand((unsigned)time(NULL));
    cout << setw(60) << "Herzlich Willkommen bei Schiffeversenken\n";
    cout << "\n";
    cout << "\n";
    cout << setw(61) << "Ein '.' bedeutet noch nicht hingeschossen\n";
    cout << setw(56) << "Ein 'X' bedeutet das war nur Wasser\n";
    cout << setw(79) << "Ein 'S' bedeutet da ist ein Schiff, die Klammer sagt wie lang das Schiff ist\n";
    cout << "\n\n";

    Bretter Brett1(size1,size2,size3);
    anzahlZweierSchiffe(Brett1, size1, size2, choiceGes1);
    anzahlDreierSchiffe(Brett1, size1, size2, choiceGes2);
    anzahlViererSchiffe(Brett1, size1, size2, choiceGes3);
    Brett1.brettAusgeben(size1, size2);

    choiceGes = (choiceGes1 * 2) + (choiceGes2 * 3) + (choiceGes3 * 4);
    int x;
    int y;

    while(stop == false)
    {
        cout << "\n";
        cout << "Wo moechtest du hinschiessen: x= ";
        cin >> x;
        cout << "\n";
        cout << "Wo moechtest du hinschiessen: y= ";
        cin >> y;
        cout << "\n";

        Brett1.check(x,y);
        Brett1.brettAusgeben(size1, size2);
        if(Brett1.endGame(Brett1, choiceGes))
        {
            stop = true;
        }
    }

    cout.width(47);
    cout << "Herzlichen Glückwunsch, sie haben das Spiel erfolgreich beendet!";
}



classBretter.h

C++:
#include <string>

#ifndef CLASSBRETTER_H_INCLUDED
#define CLASSBRETTER_H_INCLUDED

class Bretter
{
    public:
        Bretter(const int, const int, const int);
        ~Bretter(){};
        void brettAusgeben(const int&, const int&)const;
        void zweierSchiffeSetzen(Bretter&, const int, const int);
        void dreierSchiffeSetzen(Bretter&, const int, const int);
        void viererSchiffeSetzen(Bretter&, const int, const int);
        void check(int&, int&);
        bool endGame(Bretter&, int&);

    private:
        std::string Brett[10][10][4];
};


#endif // CLASSBRETTER_H_INCLUDED

[/CODE]

classBretter.cpp
[CODE]
#include "classBretter.h"

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

Bretter::Bretter(const int size1, const int size2, const int size3)
{
    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            Brett[i][j][0] = ".    ";
        }
    }

    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            Brett[i][j][1] = "0";
        }
    }

    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            Brett[i][j][2] = "0";
        }
    }

    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            Brett[i][j][3] = "0";
        }
    }
}

void Bretter::brettAusgeben(const int& size1, const int& size2)const
{
    cout << setw(67) << "  0    1    2    3    4    5    6    7    8    9\n";

    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            if(j == 0)
            {
                cout << setw(19) << i << " ";
            }
            cout << Brett[i][j][0];
        }

    cout<<"\n";
    }
}

bool Bretter::endGame(Bretter& Brett1, int& choiceGes)
{
    int tempCheck = 0;

    for(int i = 0; i < 10; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            if((Brett[i][j][3] == ("2") || ("3") || ("4")) && (Brett[i][j][0] == ("S(2) ") || ("S(3) ") || ("S(4) ")))
            {
                tempCheck += 1;
            }
        }
    }

    if(tempCheck == choiceGes)
    {
        return true;
    }
    else
    {
        return false;
    }

}

void Bretter::zweierSchiffeSetzen(Bretter& Brett1, const int size1, const int size2)
{
    unsigned int x = rand() % (size1 - 2 + 1);
    unsigned int y = rand() % size2;
    int tempx = x;
    int tempy = y;

    if ((Brett[tempy][tempx][2] == "0") && (Brett[tempy][tempx+1][2] == "0"))
    {
        for (int i = 0; i < 2; i++)
        {
            Brett[tempy][tempx][2] = "1";
            tempx++;
        }
        tempx = x;
        for (int i = 0;i < 2; i++)
        {
            Brett[tempy][tempx][3] = "2";
            tempx++;
        }
    }
    else
    {
        Brett1.zweierSchiffeSetzen(Brett1,size1,size2);
    }
}

void Bretter::dreierSchiffeSetzen(Bretter& Brett1, const int size1, const int size2)
{
    unsigned int x = rand() % size1;
    unsigned int y = rand() % (size2 - 3 + 1);
    int tempx = x;
    int tempy = y;
    if ((Brett[tempy][tempx][2] == "0") && (Brett[tempy+1][tempx][2] == "0") && (Brett[tempy+2][tempx][2] == "0"))
    {
        for (int i = 0; i < 3; i++)
        {
            Brett[tempy][tempx][2] = "1";
            tempy++;
        }
        tempy = y;
        for (int i = 0;i < 3; i++)
        {
            Brett[tempy][tempx][3] = "3";
            tempy++;
        }
    }
    else
    {
     Brett1.dreierSchiffeSetzen(Brett1,size1,size2);
    }
}


void Bretter::viererSchiffeSetzen(Bretter& Brett1, const int size1, const int size2)
{
    unsigned int x = rand() % size1;
    unsigned int y = rand() % (size2 - 4 + 1);
    int tempx = x;
    int tempy = y;

    if((Brett[tempy][tempx][2] == "0") && (Brett[tempy+1][tempx][2] == "0") && (Brett[tempy+2][tempx][2] == "0") && (Brett[tempy+3][tempx][2] == "0"))
    {
        for (int i = 0; i < 4; i++)
        {
            Brett[tempy][tempx][2] = "1";
            tempy++;
        }
        tempy = y;
        for (int i = 0;i < 4; i++)
        {
            Brett[tempy][tempx][3] = "4";
            tempy++;
        }
    }
    else
    {
        Brett1.viererSchiffeSetzen(Brett1,size1,size2);
    }
}

void Bretter::check(int& x, int& y)
{
    if(Brett[y][x][1] == "0")
    {
        if(Brett[y][x][2] == "1")
        {
            if(Brett[y][x][3] == "2")
            {
                cout << "Treffer\n";
                Brett[y][x][0] = "S(2) ";
                Brett[y][x][1] = "1";
            }
            if(Brett[y][x][3] == "3")
            {
                cout << "Treffer\n";
                Brett[y][x][0] = "S(3) ";
                Brett[y][x][1] = "1";
            }
            if(Brett[y][x][3] == "4")
            {
                cout << "Treffer\n";
                Brett[y][x][0] = "S(4) ";
                Brett[y][x][1] = "1";
            }
        }
        else
        {
            Brett[y][x][0] = "X    ";
            Brett[y][x][1] = "1";
            cout << "Leider nur Wasser\n";
        }
    }
    else
    {
        cout << "Dort hast du schonmal hingeschossen\n";
    }
}




funktionen.cpp

C++:
#include <iomanip>

using namespace std;

void anzahlZweierSchiffe(Bretter& Brett1, const int& size1, const int& size2, int& choiceGes1)
{
    marke:;
    cout << "Wie viel zweier Schiffe moechtest du(mindestens 1, maximal 3)";
    int choice;
    cin >> choice;
    choiceGes1 = choice;
    if ((choice < 4) && (choice > 0))
    {
        for(int i = 0; i < choice; i++)
        {
            Brett1.zweierSchiffeSetzen(Brett1, size1, size2);
        }
    }
    else
    {
        cout << "Falsche Eingabe!\n";
        goto marke;
    }
}

void anzahlDreierSchiffe(Bretter& Brett1, const int& size1, const int& size2, int& choiceGes2)
{
    marke:;
    cout << "Wie viel dreier Schiffe moechtest du(mindestens 1, maximal 3)";
    int choice;
    cin >> choice;
    choiceGes2 = choice;
    if ((choice < 4) && (choice > 0))
    {
        for(int i = 0; i < choice; i++)
        {
            Brett1.dreierSchiffeSetzen(Brett1, size1, size2);
        }
    }
    else
    {
        cout << "Falsche Eingabe!\n";
        goto marke;
    }
}

void anzahlViererSchiffe(Bretter& Brett1, const int& size1, const int& size2, int& choiceGes3)
{
    marke:;
    cout << "Wie viel vierer Schiffe moechtest du(maximal 3)";
    int choice;
    cin >> choice;
    cout << "\n\n";
    choiceGes3 = choice;
    if ((choice < 4) && (choice > 0))
    {
        for(int i = 0; i < choice; i++)
        {
            Brett1.viererSchiffeSetzen(Brett1, size1, size2);
        }
        cout << setw(58) << "Dann kann es ja losgehen!\n";
    }
    else if (choice == 0)
    {
        cout << setw(58) << "Dann kann es ja losgehen!\n";
    }
    else
    {
        cout << "Falsche Eingabe!\n";
        goto marke;
    }
}



Ich weiß is n langer Code, aber wär echt lieb wenn ihr mir trotzdem helfen könntet

Dieser Post wurde am 22.01.2010 um 16:12 Uhr von fr33g editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.01.2010, 16:18 Uhr
0xdeadbeef
Gott
(Operator)


Das ist nicht dein Ernst, oder?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.01.2010, 17:04 Uhr
fr33g



naja ich weiß ist lang, aber vielleicht würd es ja reichen wenn ihr euch die Funktion bool Bretter::endGame anschaut. weil ich denke ich hab da blos irgendwo nen logik fehler den ich aber net finde
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.01.2010, 20:29 Uhr
~f.-th.
Gast


Funktioniert der Code mit den angegebenen Header-Files auf deinem Compiler?

Du könntest dir mal überlegen ob die Redundanzen so umfangreich sein müssen.

Und in der Datei "funktion.cpp" müssen da die 3 "goto" sein.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.01.2010, 20:31 Uhr
~f.-th.
Gast


Und in der Datei "funktion.cpp" müssen da die 3 "goto" sein?

Sollte ne Frage ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.01.2010, 21:08 Uhr
0xdeadbeef
Gott
(Operator)


Ein Fehler liegt jedenfalls hier:

C++:
if((Brett[i][j][3] == ("2") || ("3") || ("4")) && (Brett[i][j][0] == ("S(2) ") || ("S(3) ") || ("S(4) ")))


Frisst das der Compiler überhaupt?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.01.2010, 21:30 Uhr
fr33g



Hey Leute,
erst mal vielen Dank für eure Tipps.
Also die goto´s wollt ich eh noch umgehen, aber mir gings erst mal drum das das prog läuft.

wieso sollte der code mit den header files nicht funktionieren? bei mir gehts;-)

0xdeadbeef, vieelleeen dank, genau das war der fehler musste schreiben(Brett[i][j][3] == ("2) || Brett[i][j][3] == ("3").... und so weiter

jetzt funzt alles.

Also Danke Leute
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: