Gra szubienica/wisielec
Ostatnio zmodyfikowano 2014-04-25 18:26
Goku145 Temat założony przez niniejszego użytkownika |
» 2014-04-25 18:26:48 Tak obecnie wygląda mój program, już działający, ale teraz mam problem ze zmianą wyrazu, gdy gra jest wygrana lub przegrana...
#include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <cstdio> #include <ctime> #include <fstream>
using namespace std;
void SwitchMenu() { printf( "MENU\n1 - Gra jednoosobowa.\n2 - Zasady gry.\n0 - EXIT\n\nWybrales: " ); } void OpenFile() { ifstream instruction; instruction.open( "/home/kamil/C++/Szubienica/src/Instrukcja" ); string ReadedText; if( !instruction.good() ) { cout << "Odczytanie tekstu z pliku zakonczylo sie niepowodzeniem"; } for( bool IfLoaded = getline( instruction, ReadedText ); IfLoaded; IfLoaded = getline( instruction, ReadedText ) ) cout << ReadedText << endl; instruction.close(); }
char DrawSigns( char signs[] ) { printf( "Sprobuj zgadnac ponizszy wyraz: \n\nWyraz: " ); cout << signs << endl; return 0; }
void Hit( char signs[], char Word[], int lenght, char guessed ) { for( int i = 0; i < lenght; i++ ) if( guessed == Word[ i ] ) { cout << endl; swap( signs[ i ], Word[ i ] ); cout << signs; } }
void BasicGameElementOnePlayer( char word[], char temporary[], char EmptySigns[], string GuessedInscription, int WordLenght, int i ) { int NumberOfLive = 5; char letter; do { printf( "\n\nPodaj litere: " ); cin >> letter; Hit( EmptySigns, word, WordLenght, letter ); size_t znalezionaPozycja = GuessedInscription.find( letter ); if( znalezionaPozycja == string::npos ) { printf( "Pudlo !\nZostalo ci jeszcze:" ); cout << NumberOfLive - 1 << " zyc." << endl; NumberOfLive--; if( NumberOfLive == 0 ) { printf( "\nPrzegrales!\n" ); break; } } if( strcmp( temporary, word ) == 0 ) { printf( "\n\nGratulacje! Odgadnales wyraz : " ); cout << EmptySigns << ", Wygrales!" << endl; } } while( strcmp( temporary, word ) != 0 ); printf( "Koniec gry! \n" ); for( int i = 0; i < WordLenght; i++ ) swap( word[ i ], EmptySigns[ i ] ); }
int main() { srand( time( NULL ) ); cout << "Gra wisielec. \n"; int indeks; int i; string wyrazy[ 4 ]; wyrazy[ 0 ] = "wykw"; wyrazy[ 1 ] = "pies"; wyrazy[ 2 ] = "sowa"; wyrazy[ 3 ] = "tygrys"; indeks = rand() % 3; int zmienna; int dlugosc = wyrazy[ indeks ].size(); char * wyraz = new char[ dlugosc - 1 ]; string napis = wyrazy[ indeks ]; string instrukcja; for( i = 0; i < dlugosc; i++ ) wyraz[ i ] = napis[ i ]; char * znaki = new char[ dlugosc - 1 ]; char * temp = new char[ dlugosc - 1 ]; for( i = 0; i < dlugosc; i++ ) { znaki[ i ] = '-'; temp[ i ] = '-'; } int wybor; do { SwitchMenu(); cin >> wybor; switch( wybor ) { case 1: DrawSigns( znaki ); BasicGameElementOnePlayer( wyraz, temp, znaki, napis, dlugosc, indeks ); break; case 2: cout << endl << "ZASADY GRY: " << endl; OpenFile(); cout << endl; break; case 0: cin.get(); break; default: cout << "Mozesz wybrac tylko liczbe z przedzialu 0-2." << endl; cout << "UWAZNIE CZYTAJ MENU!" << endl; break; } } while( wybor != 0 ); return 0; }
Chciałem to rozwiązać po prostu losowaniem indeksu (być może nie działa, bo są to tablice dynamiczne?) i zmianie go podczas gdy użytkownik wybierze case 1, ale wtedy switch wgl się nie uruchamia. Może wy wiecie jak rozwiązać ten problem? Czekam na odpowiedzi... |
|
1 « 2 » |