C++ 4 Gewinnt
Hallo :) ich weiß nicht wie ich die Eingabe regeln soll bei meinem 4 Gewinnt Spiel. So sieht es momentan aus,aber ich hab echt 0 Plan wie ich das regeln kann,dass der Spielstein immer in die richtige Reihe + immer aufs nächste leere Feld gebracht wird. http://puu.sh/fmpkd/9e140bc76f.png
bin dankbar für jede Hilfe :)
2 Antworten
#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!
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