Skocz do zawartości

Wisielec - wybranie odpowiedniej litery ze zmiennej.


Pentalinio

Rekomendowane odpowiedzi

Robię znaną grę - wisielca. Uczę się C++ od wczoraj (właściwie to ja z C na C++ przechodzę) . I dam tu mój kod, mimo wszystko :unsure: :

#include <string>
#include <iostream>
#include <conio.h>
std::string aktTekst;
std::string staryZnak;
unsigned ZliczZnaki(std::string strTekst, char chZnak)
{
    int o = 0;
    aktTekst="";
    staryZnak+=chZnak;
    std::cout << std::endl << "Oto co wyszlo:" << std::endl << std::endl;
    for (unsigned i = 0; i <= strTekst.length() - 1; ++i)
        {
            if (strTekst[i] == chZnak)
            {
                std::cout << chZnak << " ";
                aktTekst+=chZnak;
            }
            else
            {
                if (o <= staryZnak.length())
                {
                    if (strTekst[i] == staryZnak[o])
                    {
                        std::cout << staryZnak[o];
                        aktTekst+=staryZnak[o];
                        o++;
                    }
                    else
                    {
                        std::cout << " _ ";
                        aktTekst+='_';
                    }
                }
            }
        }
    return chZnak;
}
int main()
{
std::string strNapis;
int i = 0;
for(i=0; i < 24; i++)
{std::cout << std::endl;}
std::cout << "Gracz pierwszy wkracza do akcji :D." << std::endl;
std::cout << std::endl <<"Podaj dla gracza drugiego haslo: ";
std::cin >> strNapis;
char chSzukanyZnak;
std::cout << "Gracz drugi wkracza do akcji :D." << std::endl;
do
{
    int i = 0;
    for(i=0; i < 24; i++)
    {std::cout << std::endl;}
    std::cout << std::endl << "Podaj jakas litere: ";
    std::cin >> chSzukanyZnak;
    ZliczZnaki(strNapis, chSzukanyZnak);
    getch();
}while(aktTekst!=strNapis);
std::cout << std::endl << std::endl << "Gratuluje! Wygrales!";
getch();
return main();
}

Edit: Kod uległ zmianie. Teraz mam aż 2 problemy. 1 to to, że muszę wszystkiel litery pisać po kolei. Drugi, to to, że nie może być kilka tych samych liczb. Chyba sobie odpuszczę :/ . Takie banalne błędy...

PS Niech się wypowie ktoś lepszy niż ja :P , bo zaraz ktoś wyskoczy z tekstem "dziwna sprawa..."

Odnośnik do komentarza
Udostępnij na innych stronach

Ludzie! ... Nie możecie tego skompilować i uruchomić?! Zobaczycie, że gdy wpiszesz hasło:

lolek

, a potem druga osoba napisze znak 'l', to pojawi się:

l _ l _ _

.

Czyli dobrze, pokaże 'l' i drugie 'l'. Potem jak napiszesz 'o' to się pojawi

l o l _ _

. I też dobrze! Ale gdy napiszesz znowu 'e', to pokaże się

_ o _ e _

.

Zapomni ostatnie znaki i ja to celowo zrobiłem, a teraz oczekuje, że ktoś mi pomoże to zmienić. Rozumiem jakby napisał coś takiego Nikas, czy Jontor, ale Micanser, Vardi? Zawiodłem się na was :wink: ...

Odnośnik do komentarza
Udostępnij na innych stronach

Z tego co widzę to sam swojego kodu nie czaisz.. Z tego coś tam napisał(skopiował?) nie można nic zrozumieć..

Może jakieś komentarze opisy aby można było to zrozumieć.. no i użyj przestrzeni nazw std.. skróci kod. A co do problemu może jakieś funkcje? insert, swamp, replace? Trochę myślenia...

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

W sumie nie jest to dokładna wersja wisielca, ale jak ktoś się zna choć trochę na C++ może sobie to edytować. :P

#include <string>
#include <iostream>

using namespace std;

string gra(char znak,string tekst,string odg)
{
for (unsigned i=0;i<=tekst.length()-1;i++)
    {
    if (tekst[i]==znak)
    odg[i]=znak;
    }
return odg;
}



int main()
{
    
     string tekst;
     cout<<"Gracz nr 1\n";
     cout<<"Podaj wyraz do odgadniecia: ";
     cin>>tekst;
     cin.ignore();
     string odg=tekst;
     system("cls");
     
     for (unsigned i = 0;i<=tekst.length()-1;i++)
     {
         odg[i]='*';
     }
     
     char znak;
     

cout<<"Gracz nr 2";
int proba=0;
for (;;)
{
cout<<"\nPodaj znak: ";
cin>>znak;
cin.ignore();
proba++;
odg=gra(znak,tekst,odg);
cout<<gra(znak,tekst,odg);
if (odg==tekst)
   {
   cout<<"\nGratulacje! Odgadles wyraz "<<odg<<" podajac "<<proba<<" litery!";
   break;
   }
}

getchar();
return 0;    
}

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...