IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Snake en SDL


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Snake en SDL
    Bonjour,

    Je souhaite réaliser un jeu du serpent.

    J'ai déjà effectué une partie du code et peux afficher un cube vert qui se déplace pour manger une pomme. Mon problème est que je visualise difficilement comment réaliser la suite :

    _ Augmenter la taille du serpent.
    _ Faire en sorte que la queue du serpent dessine le trajet effectué par la tête.

    Ce que j'ai déjà fait :

    J'ai créé un objet cube que je mets sous forme de tableau. Je souhaite ainsi pouvoir découper le serpent en x cubes. Celui-ci se déplace en fonction du temps et est dirigé par le clavier. Une pomme se place aléatoirement sur l'écran et change de position une fois mangée par le serpent. Maintenant, je souhaiterais réaliser ce que j'ai dit précédemment.

    Merci de m'indiquer si je suis sur la bonne voie et me donner la logique à tenir pour réaliser la suite.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    La logique est correcte, sauf que vous ne décrivez pas la logique pour résoudre votre problème principal (l'augmentation de la taille du serpent et la gestion du trajet).

    Une idée serait de faire un tableau, qui contiendrai les N cases que le serpent occupe. La tête serait en première case du tableau (index 0) et la queue à la enième case (suivant sa longueur).
    Ainsi, pour l'affichage, il suffira de parcourir le tableau et d'afficher autant de cubes que nécessaire.

    Pour la gestion du déplacement, il suffit de mettre à jour les position du tableau en parcourant le tableau est en déplaçant chaque valeurs vers le fond du tableau (prenez une feuille de papier pour vous aider).
    En pseudo code, cela fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Pour toutes les positions du tableaux (en partant de la fin)
       positions[index_actuel] = positions[index_actuel+1];
    Et après cette boucle, vous mettez la nouvelle position de la tête en index 0.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci, de vos conseils, j'ai finalement réussi.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 118
    Points : 40
    Points
    40
    Par défaut
    J'en avait fait un et ce que je faisait c'est par exemple la deuxième case héritait des propriétés de la premiére case (les coordonnées x, y) et ainsi de suite, la dernière case prenait la position de l'avant dernière case.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Peut-être est ce un peu plus poussé au niveau algorithmique , mais ne serait-il pas plus correct d'utiliser une liste chainée pour les coordonnées du serpent?
    Ce pour plusieurs raison à mon sens:
    • la taille du serpent peut varier souvent donc un tableau statique n'est pas forcemement adapté
    • Un tableau oblige à chaque mouvement à faire une rotation de toutes les données, une liste non

    Soit donc pour mettre à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    On ajoute rajoute en début de liste la nouvelle position de la tête
    On supprime le nième élément de la liste de sorte que le n-1 devient la queue

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Pour être encore plus pro, on évitera la liste chaînée (du moins, celle de l'école), car elle exécute des malloc/new (demande de mémoire) en pleine boucle de jeu (lorsque le serpent grandit). L'allocation de mémoire est très lente et est souvent interdite dans les boucles principales des jeux.
    Maintenant, pour remplacer la liste chainée, on utilisera un tableau de N coordonnées (500 par exemple, j'imagine que c'est assez grand pour un serpent (combien avez vous de case dans le jeu ?)) avec un compteur de positions (pour savoir sur combien d'éléments il est nécessaire de boucler).

    Voilà la solution la plus pro, je pense.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Snake avec la SDL
    Par EpiTouille dans le forum Téléchargez
    Réponses: 0
    Dernier message: 23/03/2011, 21h37
  2. Probleme programme snake sdl
    Par negers01 dans le forum SDL
    Réponses: 2
    Dernier message: 20/11/2009, 12h40
  3. [Source] [SDL] [C++] snake en SDL
    Par loka dans le forum Contribuez
    Réponses: 4
    Dernier message: 14/07/2006, 23h32
  4. [TP][Projet] Réaliser un Snake-Like
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 69
    Dernier message: 17/01/2005, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo