Accueil > Forum > > > > Le jeu du serpent en C++ / niveau débutant
Le jeu du serpent en C++ / niveau débutant
lundi 13 juin 2005 à 08:58:59 |
Le jeu du serpent en C++ / niveau débutant

edouard57
|
Bonjour à tous,
Je débute en C ++ et opengl.
Pour m'entrainer j'essaie de réaliser un petit jeu le serpent.
Pour l'instant j'arrive à créer un carré dans la fenêtre windows qui se déplace avec les fléches du clavier (pas compliqué jusqu'à présent).
Maintenant j'aimerai déplacer un serpent dans la fenêtre windows.
Comment puis je m'y prendre ?
Voici mon code du carré qui se déplace :
#include <windows.h> #include <gl/gl.h> #include <gl/glu.h>
WNDCLASS wc; MSG msg; HWND hWnd; HDC DC; HGLRC RC;
double c = 0; double a = 0; double b = 10;
void RePaint () { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode (GL_MODELVIEW); glLoadIdentity ();
/* code relatif à l'affichage */ gluLookAt (0,0,-40,0,0,0,0,1,0); if (b == 0) a += 0.01; if (b == 1) a -= 0.01; if (b == 2) c += 0.01; if (b == 3) c -= 0.01;
glTranslated (a,c,0); /* déplacement du carré */
glBegin (GL_QUADS); /*Création du carré */ glVertex2i (-1,1); glVertex2i (1,1); glVertex2i (1,-1); glVertex2i (-1,-1); glEnd ();
SwapBuffers (DC); }
void InitPixelFormat (HDC hDC) { PIXELFORMATDESCRIPTOR pfd = { sizeof (PIXELFORMATDESCRIPTOR), 1, PFD_SUPPORT_OPENGL | PFD_TYPE_RGBA | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0 };
SetPixelFormat (hDC, ChoosePixelFormat (hDC, &pfd), &pfd); }
LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: DC=GetDC (hwnd); InitPixelFormat (DC); RC = wglCreateContext (DC); wglMakeCurrent (DC, RC); glEnable (GL_DEPTH_TEST); /* On active le Z-Buffer */ break;
case WM_CLOSE: wglMakeCurrent (NULL, NULL); wglDeleteContext (RC); ReleaseDC (hwnd,DC); PostQuitMessage (0); break; case WM_SIZE: glViewport (0,0,LOWORD (lParam),HIWORD (lParam)); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (45,(float)(LOWORD(lParam))/(float)(HIWORD(lParam)),1,100); break; case WM_PAINT: RePaint (); break; default: return DefWindowProc (hwnd,uMsg,wParam,lParam); case WM_KEYDOWN: switch (wParam) { case VK_LEFT: /* fléches du clavier */ b = 0; break; case VK_RIGHT: b = 1; break; case VK_UP: b = 2; break; case VK_DOWN: b = 3; break; default: break; } break; } return 0; }
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow) { wc.style = CS_OWNDC; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "OGL";
RegisterClass(&wc);
hWnd = CreateWindow ("OGL", "Fenetre OpenGL", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE | WS_MAXIMIZEBOX, 0, 0, 640, 480, NULL, NULL, hInstance, NULL );
while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
return 0; }
Merci par avance pour votre aide 
|
|
lundi 13 juin 2005 à 13:52:24 |
Re : Le jeu du serpent en C++ / niveau débutant

Pamaury
|
voilà une solution(il y en a sûrement d'autre mais celle-ci marche très bien): typedef struct _serpent_part; { int x,y; _serpent_part *next,*prev; }serpent_part; tu créé le serpent: serpent_part tete; tete.next=NULL;// next c'est vers la tete donc ici NULL tete.x=DEPART_X; tete.y=DEPART_Y; serpent_part *last_part=&tete; for(int i=1;i<4;i++)// un serpent en 4 bouts(dont la tête) { serpent_part *part=new serpent_part; part->next=last_part; part->prev=NULL; part->x=DEPART_X+i; part->y=DEPART_Y; last_part=part; } // normalement çà marche(faut vérifier bien entendu) en suite pour le faire avancer: // ici dx et dy représente la direction dans laquelle avance la tete // çà peut-être (1,0) pour aler à droite // (0,1) vers le bas // meme (1,1) si tu veux qu'il aille en diagonale lol // attention à ce qu'il ne revienne sur lui !!!! // ici le principe est simple: // chaque bout va passer la position de celui qui devant lui // et le premier bout à une nouvelle postion: // exemple: 12345 sont les bout et + la tete // +12345 // 12345 // puis on avance la tete //+1235 // // autre exemple: // // + 45 // 123 // çà va donner // // 1 5 // 234 // et la tete // + // 1 5 // 234 void advanced(serpent_part *tete,int dx,int dy) { serpent_part *part=tete; while(part->prev) part=part->prev; while(part->next) { part->x=part->next->x; part->y=part->next->y; part=part->next; } tete->x+=dx; tete->y+=dy; } voilà ensuite pour la collsiion dans le serpent il suffit que voir si la tete a les même coordonées que un autre bout et pour les bonus il suffit de voir si la tete a les coordonnées du bonus . Bonne journée A m a u r y
|
|
lundi 13 juin 2005 à 16:12:51 |
Re : Le jeu du serpent en C++ / niveau débutant

edouard57
|
Merci beaucoup , j'essarai ça ce soir car la je suis au taff 
|
|
lundi 13 juin 2005 à 17:11:10 |
Re : Le jeu du serpent en C++ / niveau débutant

edouard57
|
Encore une ou deux questions ce code je l'intégre bien dans void RePaint () ?
Faut-il que je garde glTranslated et GL_QUADS dans mon code actuel ?
Merci par avance.
|
|
Cette discussion est classée dans : case, break, hwnd, dc, wc
Répondre à ce message
Sujets en rapport avec ce message
API Win32, problème de variable [ par bouba ]
Salut a tous, j'ai un blem de variable dans mon programme. Voici mon code source.LPSTR Path="";LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM
Problème avec WM_KEYDOWN: [ par cognac ]
Pourquoi est-ce que "j" est toujours égal à 2 lorsque je presse F1(même la première fois). Je pensais qu'à chaque fois que je presse F1 "j" augmente d
Affichage d'un boutton en Win32 [ par Crazy_Joe ]
Bonjour à tous, Cela va peut-être vous paraître assez bénin mais je n'arrive pas à afficher un boutton tout simple dans mon application. Voici un bou
pb affichage ComboBox dans Dialog [ par Guillemouze ]
Salut tout le monde,j'ai un souci d'affichage de mon combo dans un dialog. Quand je click sur la fleche pour afficher la liste, il ne m'affiche rien!P
API + logiciel réseau [ par lolorenzeb ]
Bonjour à tous,Voila j'ai réalisé deux petites applications simples (client et serveur) en mode console. Je souhaite donc améliorer mon programme avec
Fenetre windows en cpp [ par FeelCode ]
bon j'essaye de cree une fenetre windows tout simple mai j'ai un probleme de convertion voir le code plus bas.//**************************************
Problème switch [ par seleccao ]
Bonjours à tous Pour mon application en c++ je travaille avec de l'hexadecimal et j'utilise un switch switch(n1) { case '0000': hexa1 = "0";break; ca
La librairie FreeImage [ par Alexbad ]
Salut,J'ai commencé à programmer en C++ avec la librairie standard de Windows. Là, je réussis à ouvrir une jolie fenêtre grisonnante au centre de l'éc
Pb de conception [ par blinix123 ]
.................... switch (*reponse) { case 'a': case 'A': remplissage (tablo, &cpt); brea
Ma fonction ouvrir un dossier ne marche pas [ par papaolive ]
Bonjour,je sais que le code qui va suivre n'est pas très beau (c'est le moin sque l'on puisse dire !).J'ai crée 7 edit box qui chacune représente le s
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|