Forum: Nybörjare, Labyrintspel

Forum huvudsida -> Programmering -> Nybörjare, Labyrintspel

Sidor: 1

Till botten

Baracuda87 15:18 - 23:e Juli 2009 | Post #1
Medlem
Inlägg: 2


Skicka PM
Hej!
Jag har nyss börjat en spelprogrammering kurs och jag måste erkänna att jag inte är en hajjare på programmering.. än...

Det jag ska göra är ett labyrintspel, där en gubbe ska ta sej från en punkt till en annan, genom att man trycker på navigeringsknappar.

Jag har kommit så långt att knapparna och menyn finns, och har ritat ut ett X som ska föreställa en gubbe.
Nu vill jag få X:et att flytta sig ca: 14px när jag trycker på nån av knapparna och det är här det skiter sej för mej. Kan nån hjälpa och ge ett ex. på en kodsnutt?


Koden:

  1. #include "resource.h"
  2. #include <windows.h>
  3. #include "TCHAR.H"
  4.  
  5. // Forward declarations
  6. LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  7.  
  8. //konstanter till knapparna
  9. enum
  10. {
  11. NORTHBUTTON_ID = 100
  12. };
  13. enum
  14. {
  15. SOUTHBUTTON_ID = 200
  16. };
  17. enum
  18. {
  19. WESTBUTTON_ID = 300
  20. };
  21. enum
  22. {
  23. EASTBUTTON_ID = 400
  24. };
  25.  
  26.  
  27. //main
  28. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  29. {
  30. // Definiera fönster
  31. WNDCLASSEX wClass = { 0 };
  32. wClass.cbSize = sizeof( WNDCLASSEX );
  33. wClass.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
  34. wClass.hCursor = (HCURSOR) LoadCursor( 0, IDC_ARROW );
  35. wClass.hIcon = (HICON) LoadIcon( 0, IDI_APPLICATION );
  36. wClass.hIconSm = 0;
  37. wClass.hInstance = hInstance;
  38. wClass.lpfnWndProc = WinProc;
  39. wClass.lpszClassName = "Labyrint";
  40. wClass.lpszMenuName = 0;
  41. wClass.style = 0;
  42. wClass.cbClsExtra = 0;
  43. wClass.cbWndExtra = 0;
  44. wClass.lpszMenuName = MAKEINTRESOURCE( IDR_MENY );
  45.  
  46.  
  47. // Registrera Windows klassen
  48. RegisterClassEx(&wClass);
  49.  
  50. // Skapa fönster
  51. HWND hwndMain = CreateWindow( "Labyrint", "Labyrinth-spel",
  52. WS_OVERLAPPEDWINDOW|WS_VISIBLE,
  53. 100, 150,
  54. 450, 350,
  55. 0, 0, hInstance, 0 );
  56.  
  57. //Skapa knappar
  58. HWND hwndNorthButton = CreateWindow( "BUTTON", // Fönsterklass
  59. "North", // Text på knappen
  60. WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
  61. 350, 100, // Position, relativt föräldern
  62. 50, 20, // Storlek
  63. hwndMain, // Förälderfönstrets handtag
  64. (HMENU)NORTHBUTTON_ID, // Knappens ID
  65. hInstance, // HINSTANCE som skickas med i WinMain
  66. 0 );
  67. HWND hwndSouthButton = CreateWindow( "BUTTON", // Fönsterklass
  68. "South", // Text på knappen
  69. WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
  70. 350, 160, // Position, relativt föräldern
  71. 50, 20, // Storlek
  72. hwndMain, // Förälderfönstrets handtag
  73. (HMENU)SOUTHBUTTON_ID, // Knappens ID
  74. hInstance, // HINSTANCE som skickas med i WinMain
  75. 0 );
  76. HWND hwndWestButton = CreateWindow( "BUTTON", // Fönsterklass
  77. "West", // Text på knappen
  78. WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
  79. 310, 130, // Position, relativt föräldern
  80. 50, 20, // Storlek
  81. hwndMain, // Förälderfönstrets handtag
  82. (HMENU)WESTBUTTON_ID, // Knappens ID
  83. hInstance, // HINSTANCE som skickas med i WinMain
  84. 0 );
  85. HWND hwndEastButton = CreateWindow( "BUTTON", // Fönsterklass
  86. "East", // Text på knappen
  87. WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
  88. 390, 130, // Position, relativt föräldern
  89. 50, 20, // Storlek
  90. hwndMain, // Förälderfönstrets handtag
  91. (HMENU)EASTBUTTON_ID, // Knappens ID
  92. hInstance, // HINSTANCE som skickas med i WinMain
  93. 0 );
  94. MSG msg = { 0 };
  95. while( GetMessage( &msg, 0, 0, 0 ) )
  96. {
  97. // Hantera meddelanden
  98. TranslateMessage( &msg );
  99. DispatchMessage( &msg );
  100. }
  101.  
  102. // Avsluta
  103. return (int)msg.wParam;
  104. }
  105.  
  106.  
  107. //WinProc
  108. LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  109. {
  110. HDC hdc = {0}; // ett handtag till ett DC, som vi kommer att få i WM_PAINT
  111. PAINTSTRUCT ps = {0}; // struct som anger en rektangel av fönstret som behövs ritas om
  112.  
  113. // Vilket meddelande?
  114. switch(msg)
  115. {
  116. //Utmatning med TextOut()
  117. case WM_PAINT:
  118. hdc = BeginPaint( hwnd, &ps ); // hämta DC
  119. TextOut( hdc, 20, 20, "X", strlen( "X" ) ); // skriv ut text till fönstret
  120. EndPaint( hwnd, &ps ); // släpp DC
  121. break;
  122.  
  123.  
  124. // Meny
  125. case WM_COMMAND:
  126. //Vilket menyval
  127. switch( LOWORD( wParam ) )
  128. {
  129. //File->Quit avslutar programmet
  130. case ID_FILE_QUIT:
  131. if( MessageBox( 0, "Do you really want to quit?", "Are you sure?", MB_YESNO ) == IDYES )
  132. {
  133. PostQuitMessage( 0 );
  134. }
  135. else
  136. return DefWindowProc( hwnd, msg, wParam, lParam );
  137.  
  138. break;
  139.  
  140. // North knappen
  141. case NORTHBUTTON_ID:
  142.  
  143. //Ändra position på X:ET.. ???
  144.  
  145.  
  146.  
  147. return DefWindowProc( hwnd, msg, wParam, lParam );
  148.  
  149. break;
  150.  
  151. // South knappen
  152. case SOUTHBUTTON_ID:
  153.  
  154. return DefWindowProc( hwnd, msg, wParam, lParam );
  155. break;
  156.  
  157. // West knappen
  158. case WESTBUTTON_ID:
  159.  
  160. return DefWindowProc( hwnd, msg, wParam, lParam );
  161. break;
  162.  
  163. // East knappen
  164. case EASTBUTTON_ID:
  165. return DefWindowProc( hwnd, msg, wParam, lParam );
  166. break;
  167.  
  168. // Okänt menyval
  169. default:
  170. return DefWindowProc( hwnd, msg, wParam, lParam );
  171. break;
  172. }
  173.  
  174. // Avsluta om man trycker på krysset
  175. case WM_CLOSE:
  176. PostQuitMessage( 0 );
  177. break;
  178.  
  179. default:
  180. return DefWindowProc( hwnd, msg, wParam, lParam );
  181. break;
  182. }
  183.  
  184. return 0;
  185. }





martin310 12:56 - 24:e Juli 2009 | Post #2
Medlem
Inlägg: 132


Skicka PM
Jag gissar att det är en float variabel som är positionerna på textout(). Så gör två variabler för x och y. Och när spelaren klickar på en av knapparna så använder du + och - på rätt axel!

-------------------------

Hjälp jorden med Granola, det är gratis och funkar på både Windows och Linux, och försämrar inte datorns prestandad!





Sidor: 1

Forum huvudsida -> Programmering -> Nybörjare, Labyrintspel
Atom feed

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