Kezdőoldal » Számítástechnika » Programok » Hogyan tudok c++ ba akasztófa...

Hogyan tudok c++ ba akasztófa játékot csinálni?

Figyelt kérdés

Már megvan a nagy része csak az a baj hogy nem tudom a "betu" adatot halmazzá generálni amit tudnék bővíteni így sajnos nem írja ki az eddig helyesen beírt betűket.

Valamint csak úgy bírom bevinni az adatot hogy az elsőt írja ki és nem pedig randomban ad ki egyet.

(*.txt fájlokat használok a kiíráshoz és a beolvasáshoz)

#include <string>

#include <fstream>

#include <iostream>

#include <ctime>

#include <cstdlib>


using namespace std;


int main()

{

int q=7; //élet

int y=0; //jó változó

char h;

char betu;

cout << "7 elete van" <<"\n";

ifstream in ("szavak.txt");

ofstream out ("kiiras.txt");

string s;

srand(time(0));

in >> s;

cout<<s.length()<<" "<<"betubol all a szo"<<"\n";

cout <<"gepeljen be egy betut" <<"\n";

do

{

y=0;

cin>>betu;

for (int x=0; x<s.length();x++)

if (s[x]==betu) {y++; cout <<betu;}

else cout <<"_"<<" ";

if (y==0) q--;

cout<<"\n"<< q<<" "<<"elete van meg"<<"\n";

cout<<h<<"\n";

}

while ((y!=s.length()) && (q!=0));

cout<<"vege a jateknak";

}



2012. ápr. 21. 13:56
 1/6 anonim ***** válasza:
Vagy tedd be a betűket egy stringbe, vagy használd az STL set konténert!
2012. ápr. 21. 20:06
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

Sajnos nem vagyok benne biztos hogy tudom hogy kéne rendesen stringbe áttenni a "betu" halmazt.

csak simán string "betu" ként kéne használnom vagy van ennek vmi már módja?

2012. ápr. 22. 19:07
 3/6 anonim ***** válasza:

Jelenleg nem halmazt használsz, hanem egy változót, aminek értékét újra és újra felülírod.

Vegyél fel egy string változót, vagyis egy karaktertömböt. Ehhez oda kell fűznöd a karaktert. Az összefűzésemlékeim szerint megvan egy függvénykönyvtárban, ezt keresd meg, és include-old!

2012. ápr. 22. 20:20
Hasznos számodra ez a válasz?
 4/6 anonim válasza:

Mutatok egy nem túl elegáns módszert, ezt sikerült most összehoznom:


1. Létrehozol egy karaktertömböt, aminek annyi eleme van, mint a kitalálandó szónak, és feltöltöd '_' karakterrel:


char betuk[s.length()];

for (int i=0; i<s.length(); i++) betuk[i] = '_';


2. A főciklusban létrehozol egy ideiglenes változót. Ebben eltárolod a legutóbbi jó megoldások számát:


int lasty = y;


3. Beolvasod a betűt, és megvizsgálod, hogy van-e egyezés, illetve, hogy azt a betűt nem találták-e már ki. Egyezés esetén a jó találatokat növeled, és a kitalált betűk tömbjének megfelelő elemét beállítod a megfelelő betűre:


cin>>betu;

for (int x=0; x<s.length();x++) {

if (s[x]==betu) {

betuk[x] = betu;

y++;

}

}


4. Ha a beírt betű nem talált (azaz a jó betűk száma (y) nem változott, akkor egy élet levonása:


if (y==lasty) q--;


5. Kiírod az eddig kitalált betűket:


cout<<betuk<<endl;


6. kiírod a többi dolgot.



Bocs, hogy így leírtam, azért ezen még mindig van sok javítanivaló, úgyhogy a többit meghagyom neked. A teljes kód tanulmányozgatásra:



#include <string>

#include <fstream>

#include <iostream>

#include <ctime>

#include <cstdlib>


using namespace std;


int main()

{

int q=7; //élet

int y=0; //jó változó


char h;

char betu;

cout << "7 elete van" <<"\n";

ifstream in ("szavak.txt");

ofstream out ("kiiras.txt");


string s;

srand(time(0));

int randword = rand()%4+1;

for (int i=0; i<randword; i++) in >> s;


char betuk[s.length()];

for (int i=0; i<s.length(); i++) betuk[i] = '_';


cout<<s.length()<<" "<<"betubol all a szo"<<"\n";

cout <<"gepeljen be egy betut" <<"\n";


do

{


int lasty=y;

cin>>betu;

for (int x=0; x<s.length();x++) {

if (s[x]==betu && betuk[x]=='_') {

betuk[x] = betu;

y++;

}

}


cout<<betuk;

if (y==lasty) q--;


cout<<"\n"<< q<<" "<<"elete van meg"<<"\n";

cout<<h<<"\n";


}

while ((y!=s.length()) && (q!=0));


cout<<"vege a jateknak";

}



Megtalálod a véletlen beolvasást is az elején. Ez a kód biztos nem a legjobb megoldás, azon gondolkozhatsz még te is, illetve fejleszd magát a játékot is.

2012. ápr. 22. 21:12
Hasznos számodra ez a válasz?
 5/6 anonim válasza:

ja (előző vagyok), még annyi, hogy a véletlen kiolvasásnál a "rand()%4+1;" sornál a 4-est írd át úgy, hogy a fájlod sorainak száma + 1 legyen. Pl. ha 6 szó van a fájlodban, akkor

rand()%7+1;

legyen

2012. ápr. 22. 21:16
Hasznos számodra ez a válasz?
 6/6 anonim válasza:
Bocs, megint írok. Az előzőhöz rosszul írtam, nem kell hozzáadnod egyet a sorok számához. Csak a sorok száma kell...
2012. ápr. 22. 21:32
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!