Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Gra szubienica/wisielec

Ostatnio zmodyfikowano 2014-04-25 18:26
Autor Wiadomość
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...

C/C++
//============================================================================
// Name        : Szubienica.cpp
// Author      : Goku145
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#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;
    }
}

//==============================SINGLEPLAYER=============================================================
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-------------------------------------------------------------------
        Hit( EmptySigns, word, WordLenght, letter );
       
        //---------------------------------MISHIT-----------------------------------------------------------------
        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;
               
            }
        }
       
        // END OF THE GAME (Condition)
       
        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";
   
   
   
    //LOSOWANIE WYRAZU
   
    indeks = rand() % 3;
   
    int zmienna;
    int dlugosc = wyrazy[ indeks ].size();
    char * wyraz = new char[ dlugosc - 1 ];
   
    string napis = wyrazy[ indeks ];
    string instrukcja;
   
    ///////Przypisanie wartosci ze string do char
    for( i = 0; i < dlugosc; i++ )
         wyraz[ i ] = napis[ i ];
   
   
    //Tablica z pustymi znakami
    char * znaki = new char[ dlugosc - 1 ];
   
    //Tablica pomocnicza do zakonczenia pętli
    char * temp = new char[ dlugosc - 1 ];
   
    //Przypisanie "pustego" znaku do elementow tablicy
    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...
P-108670
1 « 2 »
Poprzednia strona Strona 2 z 2