| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #include <iostream>
- #include <cstdlib>
- #include <string>
- #include <windows.h>
- 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;
- }
|