Forum: Mastermind med länkade listor problem

Forum huvudsida -> Programmering -> Mastermind med länkade listor problem

Sidor: 1

Till botten

truckomobil 00:05 - 8:e Juni 2009 | Post #1
Medlem
Inlägg: 3


Skicka PM
Hej, Jag håller på att skriva ett mastermind program med länkade listor. Mastermind är ett spel där datorn slumpar fram en fyrsiffrig kod som du sedan ska gissa dig fram till. När du gissar returneras 2 saker:
Guld: Rätt siffra på rätt plats
Silver: Siffran finns men är på fel plats.

Sedan ska det också finnas en top 10 highscorelista som sparas och öppnas med programmet och det är detta jag har problem med.

Efter sortering av highscorelistan så ska det elfte elementet tas bort men det blir något fel med iteratorn. Programmet fungerar att köra men man får ett errormedelande när man kommer till den punkten.

Här kommer koden, lagt till lite kommentarer för att göra det mer lättförståeligt:
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. #include <fstream>
  5. #include <conio.h>
  6. #include <ctime>
  7. #include <string>
  8. using namespace std;
  9. struct Person
  10. {
  11. string name;
  12. string tries;
  13. };
  14. void play(list<Person>& lista);
  15. void highscore(list<Person> lista);
  16. int main()
  17. {
  18. Person person;
  19. list<Person> lista;
  20. ifstream inFil; //Hämtar highscore listan
  21. inFil.open("C:\\Documents and Settings\\Philip\\Skrivbord\\Läxor\\Highscore.txt");
  22. if(!inFil)
  23. {
  24. cout << "Highscorefile can't be opened";
  25. exit(1);
  26. }
  27. while(getline(inFil, person.name))
  28. lista.push_back(person);
  29. inFil.close();
  30. int menu;
  31. cout <<" ============================ 1. PLAY ============================ \n";
  32. cout <<" ========================== 2. Highscores ========================= \n ";
  33. cin >> menu;
  34. if(menu==1) //val mellan att spela och se highscore
  35. play(lista);
  36. if(menu==2)
  37. highscore(lista);
  38. cin.ignore();
  39. getchar();
  40. return(0);
  41. }
  42.  
  43.  
  44.  
  45. void play(list<Person>& lista)
  46. {
  47. Person person;
  48. int answer[4], guess[4], copyanswer[4], i, gold=0, silver=0, a=0, k=0, j=0;
  49. srand(time(NULL));
  50. for(i=0; i<4; i++)
  51. answer[i]=rand()%9+1; // väljer ut svaret
  52. while(gold!=4)
  53. {
  54. for(i=0; i<4; i++)
  55. cout << answer[i]; //Skall ej vara med i slutgiltigt programm
  56.  
  57. silver=0;
  58. k=0;
  59. gold=0;
  60. a=a+1;
  61.  
  62.  
  63.  
  64. cout << "========== Try " << a << "======== " << endl;
  65. cout << "Type in your guess, seperate each number with a space: ";
  66. cin >> guess[0] >> guess[1] >> guess[2] >> guess[3]; //spara gissning
  67.  
  68. for(i=0 ; i<4 ; i++)
  69. copyanswer[i] = answer[i];
  70.  
  71. // allt som blir 13 är för att ta bort dubletter, svaret förstörs
  72. for(i=0; i<4; i++)
  73. {
  74. if(copyanswer[i]==guess[i]) //check för guld
  75. {gold=gold+1;
  76. copyanswer[i] = 13;
  77. }
  78. }
  79.  
  80. for(i=0; i<4; i++) //check för de olika silver
  81. {
  82. for(j=0; j<4; j++)
  83. {
  84. if(copyanswer[i]==guess[j])
  85. {
  86. silver=silver+1;
  87. guess[j]= 13;
  88. copyanswer[i] =13;
  89. }
  90. }
  91. }
  92.  
  93. if(gold==4)
  94. {
  95. cout << "CONANANAGRATAS YOU WERE CORRECT!!!!!" << endl;
  96. cin.ignore();
  97. }
  98. else
  99. { cout << " Gold = " << gold << " and silver = " << silver << endl;
  100. cin.ignore();
  101. }
  102. }
  103. cout << "Maybe you have reached the highscore, please type in your name: "; // lägger till namn highscore
  104. getline(cin, person.name);
  105. person.tries=a;
  106. lista.push_back(person);
  107. list <Person>::iterator it=lista.begin()++; //börja med att sorter lista efter antal försök
  108. list <Person>::iterator it2=lista.begin();
  109. while(it!=lista.end())
  110. {
  111. it2=lista.begin();
  112. while(it2!=it && (*it2).tries < (*it).tries)
  113. {
  114. it2++;
  115. }
  116. lista.insert(it2,*it);
  117. lista.erase(it++);
  118.  
  119. } //sorterat klart
  120.  
  121. for(int a = 1; a < 11; a++)
  122. {
  123. it++;
  124. }
  125. lista.erase(it); //skall alltid finnas 10 highscores även om dom är fejk.
  126. ofstream utFil;
  127. utFil.open("C:\\Documents and Settings\\Philip\\Skrivbord\\Läxor\\Highscore.txt"); //sparar listan till fil
  128. if(!utFil)
  129. {
  130. cout << "Highscore file can't be opened";
  131. exit(1);
  132. }
  133. for(it = lista.begin(); it != lista.end(); it++)
  134. utFil << (*it).name << '\t' << (*it).tries << endl;
  135. utFil.close();
  136.  
  137.  
  138. }
  139. void highscore(list<Person> lista)
  140. {
  141. Person person;
  142. int a=1;
  143. cout << " ================ HIGHSCORE ============== ";
  144. cout << "\n Lista:\n";
  145. list<Person>::iterator it;
  146. for(it = lista.begin(); it !=lista.end(); it++)
  147. {
  148. cout << a << '\t' << (*it).name << '\t' << (*it).tries << endl;
  149. a=a+1;
  150. }
  151. cin.ignore();
  152. }


Tacksam för svar!


Senast redigerad 00:21 - 8:e Juni 2009


truckomobil 16:35 - 8:e Juni 2009 | Post #2
Medlem
Inlägg: 3


Skicka PM
Det är vid rad 20-25 som något går snett




Sidor: 1

Forum huvudsida -> Programmering -> Mastermind med länkade listor problem
Atom feed

Du får inte posta i den här tråden | Till toppen