Användarprofil

Uppgifter
Användarnamn
Email
Besök -
Hemsida Ingen
Plats (stad)
Senaste besök 01:00 - 1:a Januari 1970
Poster i forumet
Varningar
Grupp
Medlem sedan 01:00 - 1:a Januari 1970
Artiklar och filer
Den här användaren har inga artiklar eller filer

Avatar


Presentation av

Den här användaren har inte skapat någon personlig presentation.

Senaste inläggen i forumet

Fråga på c++ guide - gör ett litet spel
    Citat av Kerp:
Jag kör google chrome och jag kan inte se hela posten + lite annat som ser rätt fel ut.


Har också svårt att se allt ni har postat. Texten försvinner ut i hörnetSmiley. Någon lösning?

Nåja, tack så mycket för svaren hitills! Har dock fortfarande inte fått reda på vad felet i koden ärSmiley

Postad 02:27 - 19:e Juni 2010
Fråga på c++ guide - gör ett litet spel
Ja så... jag kopierade hela innehållet på guiden av spelet, och det är en del saker som inte funkar. Det kommer vara en hel del frågor i denna post på saker jag inte förstår och dessutom några fel av denna kopia.
I alla fall här är koden innan jag frågar:

  1. // Bibliotek
  2. #include<iostream>
  3. #include<ctime>
  4. #include<windows.h>
  5. #include<string>
  6.  
  7.  
  8. // Vilka funktioner som ska användas
  9. using std::cout;
  10. using std::cin;
  11. using std::string;
  12. using std::system;
  13. using std::srand;
  14. using std::rand; // För random funktionen
  15.  
  16. // Deklarera funktioner så de blir utkommliga från hela programmet
  17. string NyttSpel();
  18. int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max);
  19.  
  20. int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max)
  21. {
  22. bool bGoLevel1= true; // Den här ska vara true så länga man är i level 1
  23.  
  24. string sCmd; // För att läsa in kommandorn från menyer mm
  25. int iCurrentHp = iHp; // Spelarens nuvarande liv, man dör lite när man slåss mot fiender men man ska få tillbaka liven efter fighten
  26.  
  27. // Fiendevariabler
  28. int iEType; // Fiendens typ
  29. int iEHp; // Fiendens liv
  30. int iEDmg_min; // Fiendens minimum skada
  31. int iEDmg_max; // Fiendens maximum skada
  32. string sEName; // Fiendens namn
  33.  
  34. while (bGoLevel1) // Kör den här kodsnutten så länge bGoLevel1 är true
  35. {
  36. srand(time(0)); // Nytt frö för random-generatorn
  37.  
  38. system("cls"); // Rensa skärmen
  39.  
  40. cout << "Välkommen till bana 1!nMeny:n-----n[H]itta fiende att slåss medn[A]vsluta speletnVal:n";
  41.  
  42. cin >> sCmd;
  43.  
  44. if (sCmd == "h" || sCmd == "H")
  45. {
  46. iEType = rand() / (RAND_MAX / 3 + 1) + 1; // Slumpa ett tal från 1 till 3. Det ska finnas 3 olika typer av fiender på första banan.
  47. if (iEType == 1)
  48. {
  49. sEName = "Giftfluga";
  50. iEHp = 4;
  51. iEDmg_min = 2;
  52. iEDmg_max = 3;
  53. }
  54. else if (iEType == 2)
  55. {
  56. sEName = "Huggorm";
  57. iEHp = 5;
  58. iEDmg_min = 2;
  59. iEDmg_max = 5;
  60. }
  61. else if (iEType == 3)
  62. {
  63. sEName = "Råtta";
  64. iEHp = 3;
  65. iEDmg_min = 1;
  66. iEDmg_max = 2;
  67. }
  68.  
  69. while (true) // Kör oändligt (eller tills "break;" körs)
  70. {
  71. cout
  72. << "nSlåss mot fiende:n------------------nDu möter en " << sEName << "!n"
  73. << "Fiendens liv: " << iEHp << "n"
  74. << "Dina liv: " << iCurrentHp << "n"
  75. << "Meny:n-----nSlå i [m]agennSlå i [f]otennSlå i [h]uvudetnVal:n";
  76.  
  77. cin >> sCmd;
  78.  
  79. if (sCmd == "m" || sCmd == "M")
  80. {
  81. if (iEType == 3) // Om det är en råtta så får den extra liv, den är alltså svår att döda genom att slå i magen
  82. iEHp+=2;
  83. else if (iEType == 2) // Om det är en huggorm så får den minus ett liv, den är alltså extra lätt att döda genom att slå i magen
  84. iEHp-=2;
  85. }
  86. else if (sCmd == "f" || sCmd == "F")
  87. {
  88. if (iEType == 1) // Om det är en giftflyga så får den extra liv, den är alltså svår att döda genom att slå på foten
  89. iEHp+=1;
  90. else if (iEType == 3) // Om det är en råtta så får den minus ett liv, den är alltså extra lätt att döda genom att slå på foten
  91. iEHp-=1;
  92. }
  93. else if (sCmd == "h" || sCmd == "H")
  94. {
  95. if (iEType == 2) // Om det är en huggorm så får den extra liv, den är alltså svår att döda genom att slå på huvudet
  96. iEHp+=1;
  97. else if (iEType == 1) // Om det är en giftflyga så får den minus ett liv, den är alltså extra lätt att döda genom att slå på huvudet
  98. iEHp-=1;
  99. }
  100.  
  101. iEHp -= rand() / (RAND_MAX / iDmg_max + 1) + iDmg_min;
  102.  
  103. if (iEHp <= 0) // Om fienden dog
  104. {
  105. cout << "Du dödade monstret, bra gjort!n";
  106. iCurrentHp = iHp; // Återstället liven
  107. break; // Hoppa ur while-loopen
  108. }
  109. else
  110. {
  111. iCurrentHp -= rand() / (RAND_MAX / iEDmg_max + 1) + iEDmg_min;
  112.  
  113. if (iCurrentHp <= 0) // Om man dör
  114. {
  115. bGoLevel1 = false; // Slut på level 1, du dog
  116. break;
  117. }
  118. }
  119. } // Slut på slåss mot fiende-loop
  120. }
  121. else if (sCmd == "a" || sCmd == "A")
  122. {
  123. return 3; // Det här returneras om man inte vill spela mer i level 1
  124. }
  125. } // Slut på level1-loop
  126.  
  127. return 2; // Det här returneras om man dog av en fiende
  128. }
  129.  
  130.  
  131. string NyttSpel()
  132. {
  133. string sTmpName; // Variabel för att temporärt lagra spelarens namn. Variabeln finns bara i den här funktionen
  134. system("cls"); // Rensa skärmen
  135.  
  136. cout << "Välkommen till Skogen-med-de-elaka-monstrena-spelet!nSkriv in ditt namn så vi kan börja: ";
  137.  
  138. cin >> sTmpName;
  139.  
  140. return sTmpName;
  141. }
  142.  
  143. int main()
  144. {
  145. // Deklarera variabler
  146. string sCmd; // Används för att avläsa användarens val i menyer mm
  147. string sName; // För att lagra namet på spelaren
  148. bool bGo= true; // En variabel som är true så länge muvudmeny-loopen ska köras
  149. int iTmp; // Variabel för temorära saker
  150.  
  151. // Spelarens karaktärs variabler
  152. int iHp = 10; // Spelarens hälsoresurser
  153. int iDmg_min = 2; // Spelarens minimiskada
  154. int iDmg_max = 5; // Spelarens maximiskada
  155.  
  156. while (bGo) // Kör loopen så länge bGo är true
  157. {
  158. // Huvudmenyn
  159. cout
  160. << "#################################################n"
  161. << "# #n"
  162. << "# Skogen med de elaka monstrena spelet v1.0 #n"
  163. << "# #n"
  164. << "#################################################n"
  165. << "Huvud meny:n-----------n[N]ytt speln[A]vslutanVal:";
  166.  
  167. cin >> sCmd;
  168.  
  169. if (sCmd == "n" || sCmd == "N")
  170. {
  171. sName = NyttSpel(); // Skicka med namnvariabeln
  172. iTmp = Level1(sName, iHp, iDmg_min, iDmg_max);
  173.  
  174. if (iTmp == 3)
  175. bGo = false;
  176. if (iTmp == 2)
  177. cout << "Du dog!";
  178. }
  179. else if (sCmd == "a" || sCmd == "A")
  180. {
  181. break; // Bryt ut från huvudmeny-loopen
  182. }
  183. } // Slut på while-loopen
  184.  
  185. return 0;
  186. }


Ni kanske har lagt märke till det men jag lade till några extra biblotek bara för att det inte funkade först och det var dessa
  1. #include<windows.h>
  2. #include<string>


Här kommer min första fråga: Finns det någon anledning till att man inte bara använder alla biblotek? Vore det inte bara säkrare att använda alla som finns? Samma sak med "using std::cout" saker. Varför inte bara alla som går här?

Sen min andra fråga. Jag har nämligen problem med det här spelet. I början väljs en fiende helt slumpmäsigt, och detta verkar funka strålande. Men hur många gånger jag än kör om spelet (oavsett om jag dött eller fortsatt) så får jag alltid samma fiende om och om igen. Är det något fel i den slumpmässiga koden?

Faktiskt så är jag själv lite förvirrade (över huvudtaget) av hur denna del verkligen fungerar:

  1. iEType = rand() / (RAND_MAX / 3 + 1) + 1;


Så vad är det som gör att detta inte är slumpmässigt? Också det som förvirrar mig i denna del är "(RAND_MAX / 3 +1)+1". Jag testade lite här och... den börjar dra slumpmässiga tal när jag tar bort + 1 brevid 3an, men den tar alltid samma fiende hela spelet. så varför behöver man 3 + 1 och den extra + 1an utanför paranteserna? Helt förvirrad på detta. Om någon kan förklara EXAKT hur denna del fungerar (så även idioter förstårSmiley) skulle jag verkligen bli glad!

Också det här:
  1. int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max);
  2.  
  3. int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max)

Är det bara han som har skrivit guiden som har döpt dessa till iHp, iDmg_min, o.s.v? För annars tycker jag "i" framför "dmg" är ganska onödigt? eller gör den något specielt :s? Också vad menas / betyder det och vad gör det att man sätter & före variablerna?


btw
  1. iEType = rand() / (RAND_MAX / 3 + 1) + 1; // Slumpa ett tal från 1 till 3. Det ska finnas 3 olika typer av fiender på första banan.
  2. if (iEType == 1)
  3. {
  4. sEName = "Giftfluga";
  5. iEHp = 16;
  6. iEDmg_min = 2;
  7. iEDmg_max = 3;
  8. }
  9. else if (iEType == 2)
  10. {
!= i else funkar ej för mig
Okej tack! Ska försöka klura ut det där senare ikväll! Skriver tillbaka om jag fortfarande är fast Smiley

Postad 17:12 - 15:e Juni 2010
!= i else funkar ej för mig
Ja så... jag har gjort så att om man skriver samma tal två gånger så ska det komma ett meddelande att man har skrivit samma tal två gånger. Jag vill dock göra ett undantag om båda talen är 7 eller 13 så att ett specielt meddelande kommer för dessa. Men istället så får jag båda texterna på dessa tal.
Har jag gjort fel någonstans?
Se rad 32 - 43 och texten jag skrivit nedanför koden.


  1. #include<iostream>
  2.  
  3. using std::cout;
  4. using std::cin;
  5.  
  6. int main()
  7. {
  8. int a;
  9. int b;
  10. int c;
  11. int tur;
  12. int otur;
  13. int tal;
  14. tur = -7;
  15. otur = -13;
  16. tal = c;
  17. //int ett_tal;
  18. //int ett_tal_till;
  19. //int summa;
  20.  
  21. cout << "Skriv in ett tal : ";
  22. cin >> a;
  23. //cin >> ett_tal;
  24. if (a == 7)
  25. {
  26. cout << " Lucky number 7 ey? ;D ";
  27. }
  28. if (a == 13)
  29. {
  30. cout << " Äsch oturs numret? :S ";
  31. }
  32.  
  33. cout << " Skriv in ett tal till : ";
  34. cin >> b;
  35. //cin >> ett_tal_till;
  36. if (b - a - a == tur)
  37. {
  38. cout << " Tror inte de går att dubble turen duh ;D ";
  39. }
  40. if (b - a - a == otur)
  41. {
  42. cout << " Inget övermod på de där talet hoppas jag :P? ";
  43. }
  44. else if (b - a - a != tur) && (b - a - a != otur)
  45. // Detta är det olösta fallet -.- se forums på blinkenlights.se
  46. // Ändrade också lite här med "&& (b - a - a != otur)". Ta bort för test först!
  47. {
  48. cout << " Samma tal igen :x? boooring ";
  49. }
  50.  
  51.  
  52. c = a + b;
  53. //summa = ett_tal + ett_tal_till;
  54.  
  55. cout << " Det blir: " << c;
  56. cout << " Dags och räkna upp till 100 med ditt tal! Tryck bara på enter du!n ";
  57.  
  58. //cout << c;
  59. //cout << summa;
  60. cout << " ";
  61.  
  62. //cin.get();
  63. //cin.get();
  64. //getchar();
  65. system("PAUSE");
  66. //Varför funkar detta bara med system pause för Q_Q?!?!?
  67.  
  68. // btw i en kommentar betyder att man gör en ny rad!
  69. return 0;
  70.  
  71.  
  72. }


Det är på rad 32 - 43 som är själva problemet. Jag skrev dit " != " så att om talet inte är tur (dvs -7) så ska följande text på rad 42 komma. Men så är inte fallet. Skriver jag t.e.x både a och b som 6 så får jag bara den texten, men om jag skriver a som 7 och b som 7 så får jag både texten på rad 34 och 42Smiley.
Funkar inte " != "? Det är visual studio 2008 jag använder. Gärna om någon kan säga vad som e fel, och gärna vad som är bättre! Sen skulle jag vara ännu gladare om ni skulle kunna ge mig en full lista på alla är-lika-med grejor som är mer än bara "==, >=, <=" o.s.v.



P.S! Jag har också en liten sidofråga om detta:

  1. #include<iostream>
  2.  
  3. using std::cout;
  4. using std::cin;
  5.  
  6. int main()
  7. {
  8. int ett_tal;
  9. int ett_tal_till;
  10.  
  11. cout << "Skriv in ett tal: ";
  12. cin >> ett_tal;
  13. cout << "Skriv in ett tal till: ";
  14. cin >> ett_tal_till;
  15.  
  16. if ((ett_tal == 7 || ett_tal == 9) && (ett_tal_till == 11 || ett_tal_till == 13))
  17. {
  18. cout << "Lösenordet är godkänt!";
  19. }
  20. else
  21. {
  22. cout << "Fel lösenord!";
  23. }
  24.  
  25. return 0;
  26. }


Hur gör jag så att man börjar från början om man skriver in fel lösenord? Inte kunnat klura ut det tyvär :p.

Tack!

~ Gillis

Postad 01:25 - 15:e Juni 2010

Skicka meddelande
Läs s blog