#include #include #include #include using namespace std; int spielzugpruefung(int staebe[3][4], int usereingaben[]){ int x; int temp[2]; if (staebe[usereingaben[0]][0] == 0){ x = 0; } else if (staebe[usereingaben[1]][0] > 0){ //Der Stab der zweiten Usereingabe hat mindestens einen Ring for (int y = 0; y < 2; y++){ x = 0; while (staebe[usereingaben[y]][3 - x] < 1 && x < 3){ //Es wird zweimal von oben gezählt, wie viele ringfreie Stufen bei beiden Stäben der Usereingaben vorhanden sind x++; } temp[y] = x; } if (staebe[usereingaben[0]][3 - temp[0]] < staebe[usereingaben[1]][3 - temp[1]]){ //Ist der Ring, der herauf gelegt wird, kleiner als der, der auf dem heraufzulegenden Stab ist x = 1; } else{ x = 0; } } else{ //Ansonsten ist der Tausch direkt möglich x = 1; } return x; } void druck(int staebe[3][4]) { string labels[4] = {" || ", " <==> ", " <====> ", " <======>"}; system("cls"); for (int x = 3; x >= 0; x--){ for (int y = 0; y < 3; y++){ cout << labels[staebe[y][x]]; } cout << endl; } } int main(){ int spielzuege = 0; bool run; int tausch[3]; int usereingaben[2]; int staebe[3][4]; for(int x = 0 ; x < 4; x++){ staebe[0][x] = 3-x; } for (int x = 1; x < 3; x++){ for (int y = 0; y < 4; y++){ staebe[x][y] = 0; } } do{ druck(staebe); for (int x = 0; x < 2; x++){ run = true; if (x){ cout << "Auf welchen Turm moechten Sie einen Stab legen?"; } else{ cout << "Von welchem Turm moechten Sie einen Stab entfernen?"; } do{ cin >> usereingaben[x]; usereingaben[x]--; //Anpassung zum Index if (usereingaben[x] < 3 && usereingaben[x] >= 0){ //Überprüfung des Zahlenbereichs run = false; cout << endl; } else{ cout << "ERROR" << endl; } } while (run); } run = spielzugpruefung(staebe, usereingaben); if (run){ spielzuege++; for (int z = 0; z <= 1; z++){ tausch[2] = 1; while (staebe[usereingaben[z]][3 - tausch[2]] < 1 && tausch[2] < 4){ tausch[2]++; } tausch[z] = tausch[2]; } tausch[2] = staebe[usereingaben[0]][3 - tausch[0]]; //Tauschen der Ringe staebe[usereingaben[0]][3 - tausch[0]] = 0; staebe[usereingaben[1]][4 - tausch[1]] = tausch[2]; if (staebe[1][2] == 0 && staebe[2][2] == 0){ //Wenn der 2.te Index im Array der Stäbe 2 u. 3 leer ist, geht es weiter, ansonsten wäre das Rätsel gelöst run = false; } } else{ cout << "ERROR.." << endl; Sleep(1400); } }while (run == false); druck(staebe); cout << "Sie loesten das Raetsel in " << spielzuege << " Spielzuegen!" << endl; }