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

SDL Nybörjare. Hjälp!
Hej jag har precis börjat med SDL och har gjort en början på ett litet spel.

Problemetet är att jag följde denna guiden:
http://www.aaroncox.net/tutorials/arcade/Introduction.html

och när jag kom till delen om hur man ska göra så att programmet går i en bestämd hastighet och inte för snabbt på en snabb dator så blev det alldeles för mycket.

Någon som har några tips om hur man skulle kunna få in en sådan grej i denna koden? Förklara gärna utförligtSmiley.

Här är spelet: http://rapidshare.com/files/217032701/SDLSpel.rar.html

Och koden:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <SDL/SDL.h>
  5. #include <windows.h>
  6.  
  7. int main(int argc, char **argv)
  8. {
  9. bool gamerunning = true;
  10. bool keysHeld[323] = {false}; // everything will be initialized to false
  11. int level = 1;
  12.  
  13. SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER );
  14. SDL_Surface* screen = SDL_SetVideoMode(640, 480, 0, SDL_HWSURFACE | SDL_DOUBLEBUF);
  15. SDL_WM_SetCaption("SDLTest", 0);
  16. //Ladda BMP fil och ge den namnet bild
  17. SDL_Surface* bakgrund = SDL_LoadBMP("Bakgrund.bmp");
  18. SDL_Surface* gubbe = SDL_LoadBMP("Gubbe.bmp");
  19.  
  20. // Göm färgen Magneta för bild
  21. SDL_SetColorKey(gubbe, SDL_SRCCOLORKEY, SDL_MapRGB(gubbe->format, 255, 0, 255));
  22.  
  23. //BakgrundBildens koordinater som ska laddas
  24. SDL_Rect bakgrundDel;
  25. bakgrundDel.x = 0;
  26. bakgrundDel.y = 0;
  27. bakgrundDel.w = 640;
  28. bakgrundDel.h = 480;
  29.  
  30. //BakgrundBildens koordinater i SDL rutan
  31. SDL_Rect bakgrundposition;
  32. bakgrundposition.x = 0;
  33. bakgrundposition.y = 0;
  34. bakgrundposition.w = bakgrundDel.w;
  35. bakgrundposition.h = bakgrundDel.h;
  36.  
  37. //GubbBildens koordinater som ska laddas
  38. SDL_Rect gubbeDel;
  39. gubbeDel.x = 0;
  40. gubbeDel.y = 0;
  41. gubbeDel.w = 40;
  42. gubbeDel.h = 40;
  43.  
  44. //GubbBildens koordinater i SDL rutan
  45. SDL_Rect gubbeposition;
  46. gubbeposition.x = screen->w / 2 - (gubbeDel.w / 2);
  47. gubbeposition.y = (screen->h / 2) - (gubbeDel.h / 2);
  48. gubbeposition.w = gubbeDel.w;
  49. gubbeposition.h = gubbeDel.h;
  50.  
  51. SDL_Event event;
  52.  
  53.  
  54. while (gamerunning)
  55. {
  56. if (SDL_PollEvent(&event))
  57. {
  58. if (event.type == SDL_QUIT)
  59. {
  60. gamerunning = false;
  61. }
  62. if (event.type == SDL_KEYDOWN)
  63. {
  64. keysHeld[event.key.keysym.sym] = true;
  65. }
  66. if (event.type == SDL_KEYUP)
  67. {
  68. keysHeld[event.key.keysym.sym] = false;
  69. }
  70. }
  71.  
  72. if (keysHeld[SDLK_ESCAPE])
  73. {
  74. gamerunning = false;
  75. }
  76.  
  77. if ( keysHeld[SDLK_LEFT] )
  78. {
  79. gubbeposition.x -= 1;
  80. gubbeDel.x = 40;
  81. }
  82. if ( keysHeld[SDLK_RIGHT] )
  83. {
  84. gubbeposition.x += 1;
  85. gubbeDel.x = 40;
  86. }
  87. if ( keysHeld[SDLK_UP] )
  88. {
  89. gubbeposition.y -= 1;
  90. gubbeDel.x = 0;
  91. }
  92. if (keysHeld[SDLK_DOWN])
  93. {
  94. gubbeposition.y += 1;
  95. gubbeDel.x = 0;
  96. }
  97.  
  98. if (level==1)
  99. {
  100. if (gubbeposition.x == screen->w)
  101. {
  102. gubbeposition.x = 1;
  103. bakgrundDel.x = 640;
  104. level += 1;
  105. }
  106. }
  107. if (level==2)
  108. {
  109. if (gubbeposition.x == screen->w)
  110. {
  111. gubbeposition.x = 0;
  112. bakgrundDel.x = 1280;
  113. level += 1;
  114. }
  115. else if (gubbeposition.x == 0)
  116. {
  117. gubbeposition.x = screen->w;
  118. bakgrundDel.x = 0;
  119. level -= 1;
  120. }
  121. }
  122.  
  123.  
  124. //Gör skärmen svart efter varje loop
  125. SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
  126.  
  127. //Hämta en del av en .BMP fil. FIL / Del av bild / Yta / bild position
  128. SDL_BlitSurface(bakgrund, &bakgrundDel, screen, &bakgrundposition);
  129. SDL_BlitSurface(gubbe, &gubbeDel, screen, &gubbeposition);
  130. SDL_Flip(screen);
  131. SDL_Delay(1);
  132. }
  133. SDL_FreeSurface(gubbe);
  134. SDL_FreeSurface(bakgrund);
  135. SDL_Quit();
  136. return 0;
  137. }


Postad 19:34 - 3:e April 2009
Funktioner - Varför?!
skickade ett PM till dej

Postad 03:48 - 25:e Mars 2009
Funktioner - Varför?!
sådär ja. Då har man gjort ett nytt testspel från grunden.
Ja det är inte mycket att hänga i julgranen för det är bara en början till ett litet spel, har byggt upp grunden nu iallfall, och gjorde det med hjälp av parametrar nu istället. Tog mej nån timme att komma upp med detta men nu tycker jag att jag har tänkt igenom det ordentligt och fått fram nåt mer lättläsligt och bättre programmerat.

Har inte kollat på min egen kod som du ändrade eller nåt utan skrev detta från grunden eftersom jag fattar funktioner mycket bättre nu tack vare dej. jaja här är den och om du ser nåt konstigt säg bara till.

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct Monster{
  7. string name;
  8. int hp;
  9. int dmg;
  10. };
  11.  
  12. Monster mvalfunktion(Monster enemy){
  13. string monsterval;
  14.  
  15. cout << "Choose monster to fight" << endl << endl;
  16. cout << "[M]osquito / [D]ragon:" << endl;
  17. cin >> monsterval;
  18.  
  19. if (monsterval=="M" || monsterval=="m"){
  20. enemy.name="Mosquito";
  21. enemy.hp=40;
  22. enemy.dmg=100;
  23. }
  24. else if (monsterval=="D" || monsterval=="d"){
  25. enemy.name="Dragon";
  26. enemy.hp=100;
  27. enemy.dmg=40;
  28. }
  29. else{
  30. cout << "No such answer";
  31. cin.get();
  32. cin.ignore();
  33. mvalfunktion(enemy);
  34. }
  35. return enemy;
  36. }
  37.  
  38. int dmgtomonster(Monster enemy, int playerdmg){
  39. enemy.hp-=playerdmg;
  40. return enemy.hp;
  41. }
  42.  
  43. int dmgtoplayer(Monster enemy, int playerhp){
  44. playerhp-=enemy.dmg;
  45. return playerhp;
  46. }
  47.  
  48.  
  49.  
  50.  
  51. int main()
  52. {
  53. Monster enemy;
  54. int playerhp = 500;
  55. int playerdmg = 30;
  56.  
  57. for ( ; ; ){
  58. enemy = mvalfunktion(enemy);
  59. enemy.hp = dmgtomonster(enemy, playerdmg);
  60. playerhp = dmgtoplayer(enemy, playerhp);
  61. cout << endl << "player hp: " << playerhp << endl;
  62. cout << endl << "monster hp: " << enemy.hp << endl;
  63. }
  64. }


Postad 22:57 - 23:e Mars 2009
Funktioner - Varför?!
Tack så mycket. Jag ska försöka göra några program med parametrar. Jag fattar rätt bra hur dom funkar nu men det är ändå lite svårt så här i början att använda dom på rätt sättSmiley

Vet inte om jag e lite trög men vad är det för mening med din "while(true) {" i initMonster?

Postad 19:06 - 23:e Mars 2009
Funktioner - Varför?!
mm det ser mycket bättre ut, och en mycket smartare lösning att använda strukturen på. I min kod behövde jag skriva samma if sats 2 gånger i de 2 olika funktionerna vilket gjorde den ena funktionen rätt meningslös.

En fråga bara. Kör den funktionen när du skriver enemy=initMonster(enemy, mval);? för jag ser ingen annanstans som initMonster skulle kunna köras.

Och en fråga tillSmiley, Vad är det för mening att använda icke globala variabler? Körs koden snabbare eller är det bara så att det behövs i vissa program och att det är bäst att försöka lära sej skriva på det sättet?

Tack för att du tar dej tid att hjälpa mej, jag fattar funktioner mycket bättre nu.

Postad 16:44 - 23:e Mars 2009

Skicka meddelande
Läs s blog