Tuossa alkutervehdyksen kohdalla on jokin virhe. Siihen varmaan pitäisi lisätä jotain. Olen aloittelia.
// Yksinkertainen hirsipuu-peli, jossa pelaajan on // kirjaimia arvaamalla ratkaistava piilossa oleva sana. #include <iostream> #include <string> #include <ctime> using namespace std; cout << "Hei,minun nimeni on nimi ohjelma"; //Alkutervehdys cout << endl; system("pause"); cout << "Tervetuloa!"; cout << endl; system("pause"); cout << ""; cout << endl; system("pause"); system("pause"); const int sanojen_lkm = 10; // Luodaan taulukko, jossa on kaikki arvuuteltavat sanat. const string sanat[sanojen_lkm] = {"tulostin", "laskin", "televisio", "kitara", "kaiuttimet", "kaappi", "kirja", "kasetti", "kello", "paperi"}; int main() { srand(time(0)); // Otetaan ajasta siemenluku, että peli olisi joka kerta erilainen. int arvaukset = 5; cout << "Pelataanko hirsipuuta? <kylla/ei>\n"; char valinta; cin >> valinta; // Muutetaan kirjain varmuuden vuoksi pieneksi, ihan vain laiskuuttamme :) valinta = tolower(valinta); while(valinta == 'k') { // Tyhjennetään näyttö turhuuksista. system("CLS"); // Arvotaan sana, joka kysytään. string sana = sanat[rand() % sanojen_lkm]; // Alustetaan muuttuuja, joka näytetään pelaajalle. Tässä on siis niitä viivoja :) int length = sana.length(); string for_your_eyes_only(length, '-'); // Tämä on ei-löydettyjen kirjainten säilytystä varten. string bad_chars; cout << "Sanasi: " << for_your_eyes_only << endl; while(arvaukset > 0 && sana != for_your_eyes_only) { // Näytetään sana ja kysytään kirjain. cout << "Arvaa kirjain: "; char kirjain; cin >> kirjain; // Katsotaan onko käyttäjä jo arvannut kirjaimen. if (bad_chars.find(kirjain) != string::npos || for_your_eyes_only.find(kirjain) != string::npos) { cout << "Olet jo arvannut sen kirjaimen. Yritä uudelleen\n"; continue; } // Alustetaan muuttuja joka tallentaa tiedon siitä, monesko kirjain (alkio) on sanassa. int loc = sana.find(kirjain); // Tarkistetaan löytyykö kirjainta sanasta. if (loc == string::npos) { cout << "Vaarin!\n"; --arvaukset; // Vähennetään jäljellä olevien arvausten määrää. bad_chars += kirjain; // Lisätään ei-löytynyt kirjain kavereidensa joukkoon. } else // Kirjain löytyi. { cout << "Hyvin arvattu!\n"; // Sijoitetaan kirjain oikealle paikalleen. for_your_eyes_only[loc] = kirjain; // Pitää muistaa vielä tarkistaa, löytyykö kirjainta muualta sanasta: loc = sana.find(kirjain, loc + 1); while(loc != string::npos) { for_your_eyes_only[loc] = kirjain; loc = sana.find(kirjain, loc + 1); } } cout << "Sanasi: " << for_your_eyes_only << endl; if (for_your_eyes_only != sana) { if (bad_chars.length() > 0) // Näytetään väärin arvatut kirjaimet helpotukseksi. cout << "Vaarin arvatut kirjaimet: " << bad_chars << endl; cout << arvaukset << " vaarää arvausta jäljellä.\n"; } } // Tarkistetaan onko käyttäjä arvannut sanan. if (arvaukset > 0) cout << "Se oli oikein!\n"; else cout << "Valitettavasti sana on " << sana << ".\n"; arvaukset = 5; // Kysytään haluaako pelaaja pelata uudestaan. cout << "Pelataanko uudestaan? <kylla/ei>\n"; cin >> valinta; valinta = tolower(valinta); } return 0; }
Noh ainakin se on ongelma, että:
cout << "Hei,minun nimeni on nimi ohjelma"; //Alkutervehdys cout << endl; system("pause"); cout << "Tervetuloa!"; cout << endl; system("pause"); cout << ""; cout << endl; system("pause"); system("pause");
Pitäisi olla int main() funktion sisässä.
Miten tuon lisäksi saisi koko näytölle?
Nyt se näyttää riviä 24. Kuinka monta virhettä tässä on? Mitkä ne ovat?
Hiukan siistittynä ja osa toiminnoista siirrettynä funktioiksi koodista tuli tällainen. Ei missään määrin täydellinen, mutta tästä saa ehkä vähän ajatusta.
#include <iostream> #include <string> #include <ctime> #include <cstdlib> #include <vector> std::vector <std::string> sanat; int arvo_numero(int ala, int yla); int tarkista_osuiko(std::string sana, std::string kirjain); bool peli_jatkuu(); bool onko_oikein(std::string sana, std::string arvattu); int hutiin_menneet = 5; int arvottu; std::string kirjain; std::string sana; std::string yritetyt; std::string arvattu; int main() { sanat.push_back("lentokone"); std::srand(std::time(NULL)); arvottu = arvo_numero(0, sanat.size()); sana = sanat[arvottu]; std::clog << "Nyt arvomme sanaa " << sana << std::endl; while (peli_jatkuu()){ std::cin >> kirjain; if (yritetyt.find(kirjain) == std::string::npos) { yritetyt += kirjain; int kpl = tarkista_osuiko(sana, kirjain); if (kpl) { std::clog << "Oikein meni" << std::endl; for (int i = 0; i < kpl; ++i) { arvattu += kirjain; } } else { std::cout << "Hutiin meni uudestaan vaan. Saat kokeilla " << hutiin_menneet << " kertaa" << std::endl; --hutiin_menneet; } } else { std::cout << "Olet jo kokeillut kirjainta " << kirjain << std::endl; } if (onko_oikein(sana, arvattu)) { break; } } return 0; } int arvo_numero(int ala, int yla) { return (ala + std::rand() % (ala + yla)); } bool peli_jatkuu() { if (hutiin_menneet) { return true; } return false; } int tarkista_osuiko(std::string sana, std::string kirjain) { int kpl = 0; for (int i = 0; i < sana.length(); ++i){ if (sana.substr(i, 1) == kirjain) { ++kpl; } } return kpl; } bool onko_oikein(std::string sana, std::string arvattu) { if (sana.length() == arvattu.length()) { return true; } return false; }
TVdata kirjoitti:
Miten tuon lisäksi saisi koko näytölle?
Esim.
Ubuntu: ctrl + alt + F1
XP: alt + enter (command promptissa)
Ilmeisesti käytössäsi on Windows käyttämiesi systeemikutsujen perusteella. Noista systeemikutsuista hankkiutuisin sinuna muutenkin eroon.
Teuro kirjoitti:
Ei missään määrin täydellinen, mutta tästä saa ehkä vähän ajatusta.
Ainakin tuo alun kysymys, eli alkutervehdyksen kirjoitus puuttuu.
TVdata kirjoitti:
Kuinka monta virhettä tässä on?
Toimiiko se? Pikaisesti vilkaistuna ei jo mainitun lisäksi osu pahempaa virhettä silmään. Lähinnä tyyliseikkoja ja syötteen tarkistuksia.
Vastaukseksi pyydät "kylla" tai "ei", mutta "kylla"-vastaukseksi tulkitaan kaikki k- ja K-alkuiset. Sen sijaan "ei"-vastaukseksi tulkitaan kaikki muut. Ja tämän lisäksi loput kirjaimet luetaan jo seuraavaan vastaukseen.
Olen jo saanutut aikaan toimivan version.
Onneksi olkoon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.