Advertisement
Domerk

Виселица+

May 6th, 2012
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.22 KB | None | 0 0
  1. //Программа-виселица, игра. Версия 0.1+, с возможностью продолжения игры без выхода из программы. Нужно угадывать слова по буквам - слова на латинице
  2.  
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <string>
  6. #include <cstring>
  7. #include <ctime>
  8.  
  9. using namespace std;
  10.  
  11. void Entre ();
  12. void Game (string *a);
  13. bool Pic1 (int n, int lenl, string *a);
  14. void Pic2 (int n);
  15.  
  16. string sl0 = "paralelogramm"; //слова  - заменить русский на латиницу, так как на русском стринг и чар не сравниваются - ошибка кодировок
  17. string sl1 = "fizika";
  18. string sl2 = "kosinys";
  19. string sl3 = "germoshpangoyt";
  20. string sl4 = "syshestvitelnoe";
  21. string sl5 = "sinxrofazatron";
  22. string sl6 = "kollaider";
  23. string sl7 = "vosstanovlenie";
  24. string sl8 = "gipopotam";
  25. string sl9 = "torrent";
  26.  
  27. string *mass[10]; //массив указателей на слова
  28.  
  29. char pic_mass[30];
  30. int mas1[5][4] = { {1, 1, 1, 1}, {1, 256, 2, 256}, {1, 4, 3, 5}, {1, 256, 6, 256}, {1, 7, 256, 8} }; //целочисленный массив, в котором происходит сранвниене
  31. char mas2[5][4] = { {'|', '-', 'T', '-'}, {'|', ' ', 'o', ' '}, {'|', '-', '|', '-'}, {'|', ' ', '^', ' '}, {'|', '/', ' ', '\\'} }; //массив символьный, в нём храниться картинка
  32.  
  33. //==================================================
  34.  
  35. int main ()
  36. {
  37.     setlocale(LC_CTYPE,"");
  38.     mass[0] = &sl0;
  39.     mass[1] = &sl1;
  40.     mass[2] = &sl2;
  41.     mass[3] = &sl3;
  42.     mass[4] = &sl4;
  43.     mass[5] = &sl5;
  44.     mass[6] = &sl6;
  45.     mass[7] = &sl7;
  46.     mass[8] = &sl8;
  47.     mass[9] = &sl9;
  48.  
  49.     for (int i=0; i<30; i++)
  50.     { pic_mass[i]='*'; }
  51.  
  52.     Entre (); //вызываем функцию для выбора игра/выход
  53.  
  54.     cin.sync();
  55.     cin.clear();
  56.     cin.get();
  57.  
  58.     return 0;
  59. }
  60.  
  61. //==================================================
  62.  
  63. void Entre ()
  64. {
  65.     system("cls"); //чистим экран
  66.     setlocale(LC_CTYPE,"");
  67.     cout<<"Начть игру"<<endl<<"1 - ДА       "<<"2 - НЕТ"<<endl; //простенькое меню
  68.     int i;
  69.     cin>>i;
  70.     if (i==1) //если пользователь выбирает игру, т.е. 1
  71.     {
  72.         srand (time (NULL)); //то делаем рандом
  73.         int Random = rand()%9;
  74.         Game (mass[Random]); //вызываем игру
  75.     }
  76.     return; //выходим
  77. }
  78.  
  79. //==================================================
  80.  
  81. void Game (string *a) //функция - игра
  82. {
  83.     system("cls");
  84.     int i=0, j=0, ochibka=0;
  85.     bool verno = false;
  86.     int lenl = a->size(); // получить длину переданного слова
  87.     char bukva;
  88.  
  89.     while (i<=34) //пока в русском языке не кончились буквы
  90.     {
  91.         while (j!= lenl)
  92.         {
  93.             cout << "*"; j++;} //первый раз выводим символ по количеству букв в слове
  94.  
  95.         setlocale(LC_CTYPE,"");
  96.         cout <<endl<<endl<<"Назовите букву:"<<endl;
  97.         setlocale(LC_CTYPE,"");
  98.         cin >> bukva;
  99.         for(int k=0; k<lenl; k++) //поиск
  100.         {
  101.             setlocale(LC_CTYPE,"");
  102.             if ((*a)[k]==bukva) // если совпадение есть, номер совпавшей буквы передаётся в первую рисующую функцию, которая эту букву "открывает"
  103.             {
  104.                 verno = true;
  105.                 if (Pic1 (k, lenl, a))
  106.                 {//проверка на то, было ли совпадение  
  107.                     cout<<endl<<"Вы выиграли!";
  108.                     Entre (); //перед тем, как выйти, вызываем функцию входа
  109.                     return;}
  110.             }
  111.         }
  112.         if (verno == false) //если совпадения не было
  113.         {
  114.             ochibka++;//число ошибок увеличивается на 1
  115.             Pic2 (ochibka); //передаётся как параметр в функцию, рисующую виселицу
  116.             if (ochibka == 8)
  117.             {
  118.                 setlocale(LC_CTYPE,"");
  119.                 cout<<endl<<"Вы проиграли!"<<endl<<"Правильный ответ: "<<(*a);
  120.                 cin.sync();
  121.                 cin.clear();
  122.                 cin.get();
  123.                 Entre (); //перед тем, как выйти, вызываем функцию входа
  124.                 return;
  125.             }
  126.         }
  127.  
  128.         i++; verno = false;
  129.     }
  130.  
  131. }
  132.  
  133. //==================================================
  134.  
  135. bool Pic1 (int n, int lenl, string *a) //n - номер буквы
  136. {
  137.     system("cls");
  138.     setlocale(LC_CTYPE,"");
  139.     pic_mass[n] = (*a)[n];
  140.     for (int i=0; i<lenl; i++)
  141.     { cout<<pic_mass[i]; }
  142.  
  143.     for (int j=0; j<lenl; j++)
  144.     {
  145.         if (pic_mass[j] == '*') return false;
  146.     }
  147.     return true;
  148. };
  149.  
  150. //==================================================
  151.  
  152. void Pic2 (int n) //n - число ошибок
  153. {
  154.     system("cls");
  155.     for (int i = 0; i < 5; i++) //переключение по строкам
  156.     {
  157.         for (int j = 0; j < 4; j++)// переключение по столбцам
  158.             if (mas1[i][j] <= n)
  159.             {
  160.                 cout << mas2[i][j]; // вывести символ, стоящий в аналогичной ячейке второго массива
  161.             } else
  162.                 cout << " ";  // вывести проблел
  163.             cout << endl;
  164.     }
  165. }
  166.  
  167. //==================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement