Advertisement
Guest User

Wieża

a guest
Nov 23rd, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. //Wieża Hanoi w wersji graficznej by poosiaq
  2.  
  3. #include <iostream>
  4. #include <conio.h>
  5. #include <cstdio>
  6. #include <Windows.h>
  7. #define ILOSC 3 //Tu podaj liczbę krążków
  8. #define PREDKOSC 300 //Tu podaj prędkość w ms
  9.  
  10. int t[ILOSC], u[ILOSC], w[ILOSC], g=0, rozwiazanie;
  11. using namespace std;
  12.  
  13. void rysowanie (char a, char c){
  14.     int e=0;
  15.     int d=ILOSC-1;
  16.     if(a=='A' && c=='B'){
  17.         while(t[e]==0) e++;
  18.         while(u[d]!=0) d--;
  19.         swap(t[e], u[d]);
  20.     }
  21.     else if(a=='A' && c=='C'){
  22.         while(t[e]==0) e++;
  23.         while(w[d]!=0) d--;
  24.         swap(t[e], w[d]);
  25.     }
  26.     else if(a=='B' && c=='A'){
  27.         while(u[e]==0) e++;
  28.         while(t[d]!=0) d--;
  29.         swap(u[e], t[d]);
  30.     }
  31.     else if(a=='B' && c=='C'){
  32.         while(u[e]==0) e++;
  33.         while(w[d]!=0) d--;
  34.         swap(u[e], w[d]);
  35.     }
  36.     else if(a=='C' && c=='A'){
  37.         while(w[e]==0) e++;
  38.         while(t[d]!=0) d--;
  39.         swap(w[e], t[d]);
  40.     }
  41.     else if(a=='C' && c=='B'){
  42.         while(w[e]==0) e++;
  43.         while(u[d]!=0) d--;
  44.         swap(w[e], u[d]);
  45.     }
  46.     system("CLS");
  47.     for(int f=0; f<ILOSC; f++){
  48.         cout.width(1);
  49.         for(int g=0; g<t[f]; g++) cout<<"*";
  50.         cout.width(ILOSC-t[f]+2);
  51.         cout<<"| ";
  52.         for(int g=0; g<u[f]; g++) cout<<"*";
  53.         cout.width(ILOSC-u[f]+2);
  54.         cout<<"| ";
  55.         for(int g=0; g<w[f]; g++) cout<<"*";
  56.         cout<<endl;
  57.     }
  58.     Sleep(PREDKOSC);
  59. }
  60.  
  61. void gra(){
  62.     char znak1, znak2;
  63.     while(rozwiazanie==0){
  64.     if(w[0]==1 && w[ILOSC-1]==ILOSC) {rozwiazanie=1;break;}
  65.     cout<<"Z: ";
  66.     cin>>znak1;
  67.     cout<<"Do: ";
  68.     cin>>znak2;
  69.     rysowanie(znak1, znak2);
  70.     g++;
  71.     }
  72. }
  73.  
  74. void hanoi(int n, char a, char b, char c){
  75.     if(n==1){
  76.         rysowanie(a, c);
  77.         g++;
  78.     }
  79.     if(n>1){
  80.         hanoi(n-1, a, c, b);
  81.         rysowanie(a, c);
  82.         g++;
  83.         hanoi(n-1, b, a, c);
  84.     }
  85. }
  86.  
  87. int main(int argc, char **argv){
  88.     int start;
  89.     cout<<"Wieza Hanoi\n[1]Automatycznie\n[2]Zagraj samemu\n[3]Wyjscie\n";
  90.     for(int b=0; b<ILOSC; b++){ //Wypełnienie 1-szej wieży i zerowanie pozostałych
  91.         t[b]=b+1;
  92.         u[b]=0;
  93.         w[b]=0;
  94.     }
  95.     cin>>start;
  96.     switch(start){
  97.         case 1: {
  98.                  rysowanie(0, 0);
  99.                  hanoi(ILOSC, 'A', 'B', 'C');
  100.                  break;
  101.                 }
  102.         case 2: {
  103.                  rysowanie(0, 0);
  104.                  gra();
  105.                  break;
  106.                 }
  107.         case 3: return 0;
  108.     }
  109.     cout<<"\nTadam!\nLaczna ilosc przeniesien: "<<g;
  110.     getch();
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement