C++ 4 Gewinnt

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
#include <iostream>
#include <conio.h>

using namespace std;

class _4Gewinnt
{
    public:
    _4Gewinnt();
    ~_4Gewinnt();

    void feld_ausgeben();
    void stein_setzen(unsigned int, unsigned char);

    private:
    unsigned char feld[7][6];
};

_4Gewinnt::_4Gewinnt()
{
    //feld leeren

    for (unsigned int i = 0; i < 6; ++i)
    {
        for (unsigned int j = 0; j < 7; ++j)
        {
            feld[j][i] = ' ';
        }
    }
}

_4Gewinnt::~_4Gewinnt()
{
}

void _4Gewinnt::feld_ausgeben()
{
    cout << "| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n";
    cout << "-----------------------------\n";

    for (unsigned int i = 0; i < 6; ++i)
    {
        cout << "| ";

        for (unsigned int j = 0; j < 7; ++j)
        {
            cout << feld[j][i] << " | ";
        }

        cout << "\b\n"; // ein space muss noch entfernt werden also \b

        cout << "-----------------------------\n";
    }
}

void _4Gewinnt::stein_setzen(unsigned int x, unsigned char stein)
{
    //x ist ein unsigned int, also gibt es sowieso keine negativen werte
    if (!x || x > 7)
    {
        cout << "Fehler : Nur Reihen 1 - 7 verfuegbar!\n";
        return;
    }

    --x; //x - 1 da array bei 0 beginnt aber input 1 - 7 sein soll

    //stein einfügen :

    for (unsigned int i = 5; i != 4294967295; --i) // 0 - 1 == 4294967295 bei unsigned int's mit der größe 4 bytes
    {
        if (feld[x][i] == ' ') 
        {
            feld[x][i] = stein;
            return;
        }
    }

    //funktion 'läuft' noch -> reihe ist voll
    cout << "Fehler : Die Reihe ist voll!\n";
}

int main()
{
    _4Gewinnt spiel;

    unsigned int reihe = 0;

    while (1)
    {
        cin >> reihe;

        system("cls"); //(yikes)

        spiel.stein_setzen(reihe, 'x');
        spiel.feld_ausgeben();
    }
    
    _getch();
    return 0;
}

Ich habe mir mal die Mühe gemacht und diesen Code geschrieben! Ob du meine Klasse und das Ausgabe Verfahren übernehmen willst (welches ich persönlich besser finde als deins) ist dir überlassen :) Frag mich wenn du etwas nicht verstehst!

Würde mich über die Hilfreichste Antwort freuen!


010373431 
Fragesteller
 02.02.2015, 23:01

Vielen Dank für deine Lösung :)

0

Also mit C++ ist es bei mir schon was länger her dafuer schreibe ich mal hier Pseudocode rein. Du muss aber über die einzelnen Feldelemente itterieren und prüfen ob das Element besetzt ist. Wenn es leer ist (zB int Wert 0) dann besetze es und breche den Püfvorgang ab. Wenn es besetzt ist (zB int Wert 1) dann gehe weiter zum nächsten Element und prüfe erneut.

addTokenToRow(3)

Methodendefinition: private void addTokenToRow(int i) {

schleife über feld[i] {

if feld[i] == 0 {

feld[i] = token

return

}//if

}//schleife

}//methode