- Banaz
- Medlem ●
- Sundsvall
- 2007-05-19 11:38
Hej!
Hoppas någon kan titta på min kod och tala om vad är det jag gör för fel som gör att spelet inte fungerar. Det enda som fungerar är att avsluta spelet. Att välja eller slumpa fram ett ord gör bara att första delen av figuren ritas sedan kan man inte göra något.
#include <iostream> using namespace std; #include <cstdlib> #include <string> #include <cctype> #include <fstream> #include <ctime> void start(); //funktionen skriver ut en meny där användaren kan välja vad den vill göra. //den anropar antingen "valfritt_ord" eller "slumpa_od för att hämta det ord som skall gissas på. //därefter skickas det ordet till "gissa_ord". string valfritt_ord(); //funktionen låter användaren ange ett eget ord och returnerar ordet till "start". string slumpa_ord(); //funktionen slumpar fram ett ord från en textfil och returnerar ordet till "start". void gissa_ord(string ord, int ord_langd); //funktionen får ordet det ska gissas på antingen från "valfritt_ord" eller "gissa_ord" och //låter användaren gissa på det valda ordet.Gissar användaren rätt anropas // "ratt_gissat" annars anropas "game_over". void ratt_gissat(string ord); //Användaren har gissat rätt ord, så funktionen rensar skärmen och skriver ut det ord som man skulle //gissa på. Därefter anropas funktionen "start". void kors(); //Funktionen anropas från "start" och skriver ut ett kors figur. void draw1(); //användaren har gissat fel en gång så funktionen ritar första delen i figuren. void draw2(); //användaren har gissat fel två gånger.nu ritar funktionen andra delen i figuren. void draw3(); //användaren har gissat fel tre gånger, så tredje delen i figuren ritas. void draw4(); //användaren har gissat fel fyra gånger.Funktionen ritar fjärde delen . void draw5(); //användaren har gissat fel fem gånger.Funktionen ritar femte delen. void draw6(); //användaren har gissat fel sex gånger. Funktionen ritar sjätte delen i figuren. void draw7(string ord); //användaren har gissat fel sju gånger. Nu ritar funktionen den sista delen i figuren. void game_over(string ord); /*det betyder att användaren har gissat fel ord, då rensar funktionen skärmen och skriver ut det ord som man skulle gissa på. */ string ord; char paus; char gissa; int main() { start(); return 0; } void start() { system("cls"); int svar; int ord_langd; //string ord; cout << "Välkommen till spelet Hänga Gubbe, "<<"hur vill du spela?"<<endl; cout << "1. Mata in ett eget ord"<<endl; cout << "2. Ett ord som programmet slumpar fram"<<endl; cout << "3. Avsluta programmet"<<endl; cout << "Vad väljer du? "; cin >> svar; switch (svar) { case 1: ord = valfritt_ord(); //anropar funktionen valfritt_ord ord_langd = ord.length();//räkanr längden på det inmatade ordet gissa_ord(ord, ord_langd);//som funktionen gissa-ord kommer att kontrollerar hur många rätta bokstäver det finns i det valda ordet break; case 2: ord = slumpa_ord();//anropar funktionen slumpa_ord ord_langd = ord.length(); gissa_ord(ord, ord_langd); break; case 3: system("cls"); exit(1); break; default: cout << "Felaktigt val!" << endl; cout << "Tryck enter för att försöka igen"<<endl; cin.get(paus); //inväntar användarens svar cin.ignore(); start();//anropar funktionen start } } string valfritt_ord() { system("cls"); string ord; cout<<"Vilket ord vill du använda?"<<endl; cin>>ord; return ord; } string slumpa_ord() { system("cls"); string ord; int antal_ord = 0; char next, temp; int slumpa; ifstream in; in.open("f9.txt"); if(in.fail()) { cout << "Det gick inte att öppna inströmmen! \n"; cout << "Tryck enter för att fortsätta"<<endl; cin.get(paus); cin.ignore(); start(); } in.get(next); while(!in.eof()) { if(next == '\n') //om nästa inlästa tecken är en radbrytning så öka antalet inlästa ord med 1 antal_ord++; in.get(next); //och läs in nästa tecken } antal_ord = antal_ord + 1; in.clear(); srand(time(0)); //undviker att samma ord skrivs ut varje gång i en rad vid varje körning slumpa = rand() % antal_ord; in.seekg(0, ios::beg);//söker och läser från filens början in.get(temp); while(true) { if(temp == '\n') slumpa--; if(slumpa == 0) { in.seekg(-1, ios::cur); in>>ord; in.close(); return ord; } in.get(temp); } } void gissa_ord(string ord, int ord_langd) { system("cls"); string gissade_bokstaver("*****************************"); int y = 0, count = 1, passed = 0, j = 0; int gissa_igen; int fill_guessed_chars = 0; for(int i = 0; i < ord_langd; i++) //konverterar bokstäverna till stora ord[i] = toupper(ord[i]); cout<< "Ordet du ska gissa på har " << ord_langd << " bokstäver"<<endl; for(int i = 0; i < ord_langd; i++) //för varje bokstav skriver ut ett streck cout << '-'; cout << "Använda bokstäver: "<<endl; cout << "Du gissar på: "<<endl; cin>>ord; while((count <= 7) && (passed < ord_langd)) { gissa_igen = 1; while(gissa_igen > 0) { gissa_igen = 0; gissa = toupper(gissa); j = 0; for(int k = 0; k < fill_guessed_chars; k++) { if(gissa == gissade_bokstaver[k]) gissa_igen++; } } gissade_bokstaver[fill_guessed_chars] = gissa; fill_guessed_chars++; for(int i = 0; i < ord_langd; i++) { if(gissa == ord[i]) { cout<< gissa; passed++; } else j++; } if(j == ord_langd) count++; if(count == 2) draw1(); if(count == 3) draw2(); if(count == 4) draw3(); if(count == 5) draw4(); if(count == 6) draw5(); if(count == 7) { cout << "Sista chansen"<<endl; draw6(); } if(count == 8) draw7(ord); if(passed == ord_langd) ratt_gissat(ord); } } void ratt_gissat(string ord) { system("cls"); cout<< "Rätt gissat" <<endl; cout<<"Det rätta ordet var: "<<ord<<endl<<endl; cout<< "Tryck enter för att fortsätta"; cin.get(paus); cin.ignore(); start(); } void kors() { cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<"|||||||||||||||||||||||||||||||||||||"<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; cout<<" ___ "<<endl; } void draw1() { for(int i = 0; i < 16; i++) { cout<<" ||" << endl; } } void draw2() { cout<< "------------"; } void draw3() { for(int i = 0; i < 3; i++) { cout << " |" << endl; } } void draw4() { cout << " //\\ " << endl; cout << " |o,o| " << endl; cout << " \\-/ " << endl; } void draw5() { cout<<" / ------- \\" << endl; cout<<" / | | \\" << endl; cout<<" / | | \\" << endl; cout << "| |" << endl; cout << "-------" << endl; } void draw6() { cout<< "| | " << endl; cout<< "| /\\ | " << endl; cout<< "| / \\ | " << endl; } void draw7(string ord) { cout <<" __ __"; } void game_over(string ord) { system("cls"); kors(); cout<<"Du klarade inte spelet! Det rätta ordet var: "<<ord<<endl<< endl; cout <<"Tryck enter för att fortsätta spela"; cin.get(paus); cin.ignore(); start(); }