Hogyan tudok c++ ba akasztófa játékot csinálni?
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";
}
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?
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!
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.
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
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!