Bonjour,
voila je debute la programation et je tente de faire un snake en langage C. J'ai presque fini a coder le l'orientation du serpent mais je ne sais pas comment faire qu'il avance à l'infini :s pourriez vous me donner des indications
Merci
ps: le tuto de jv.com n'est pas interessant
j'ai pas bien compris ce que tu essaye de faire ni comment tu essaye de le faire.
Quel type de lib graphique utilises tu? Ou en es tu de ton apprenstissage du C?
Un exemple de code et d'execution pourrait aider a comprendre egalement.
Je dirais que si tu as fais les fonctions qui permettent de modifier l'orientation du serpent, que pour faire ce que tu désires (le mouvement perpetuel vers l'infini et au dela), il suffit d'une bete boucle de jeu du genre :
while(gameEnCours)
{
// Calcule le temps ecoule (dt) depuis l'image precedente
// Recupere les entrées clavier
// Si Echap pressé, gameEnCours := false; FinSi
// Si aucune touche pressée : on calcule sa nouvelle position à partir de son orientation courante et du dt ecoulé.
// Sinon, si une touche de changement d'orientation a été pressée, on modifie le vecteur d'orientation, et on calcule sa nouvelle position a partir de cette nouvelle orientation et du dt.
}
C'est à peu près ce que tu souhaitais ?
j'utilise une bibliotheque graphique type X11 XPS remanié, et je débute, je viens de voir comment utiliser les tableaux par exemple ^^ et oui saleGauss c'est exactement ca, je vais essayer de m'inspirer de tes notes ![]()
quel bourrin! faire du X11 alors qu'on commence en C. Bon courage !
ptdr pas le choix c'est un devoir ^^
Bonsoir j'ai un autre problème, j'aimerais savoir comment est-il possible de "supprimer" tout ce qui compose la zone de jeu avant chaque déplacement de la tête pour que les têtes précédentes disparaissent, je sais pas si vous voyez ce que je veux dire ^^
Oui, je vois dequoi tu veux parler. Cette operation s'appelle souvent "invalider une region" ou un rectangle dans les libs d'affichage. Je ne sais pas comment ca marche dans X11, masi je suis sur que le meme concept existe.
oki merci pour ces infos
faut je trouve ca alors
C'est bon j'ai trouvé une fonction EffacerEcran, après quelques essais ca marche super.
Plus qu'à faire pareil pour l'ensemble du corps ^^
Comment as tu l'intention de coder structurellement le serpent dans ton code ?
c'est à dire ? Moi je pense que le meilleur moyen est d'utiliser un tableau pour les coordonnées de chaque membre du serpent mais je ne vois pas très bien comment "rajouter" des coordonnées dans le tableau dès qu'il mange une pomme. Je pensais mettre les coordonnées non utilisées à -1 et n'afficher que les coordonnées positives ou nulles mais je ne vois pas comment changer ces coordonnées négatives en positives quand il mange une pomme :s ou alors je ne suis pas du tout sur la bonne piste help ^^
Le moyen le plus élégant pour apprendre reste selon moi de modéliser le serpent par une liste chainée. C'est un peu comme un tableau dynamique en soit mais tu devras aussi :
- coder la structure liste à proprement parler
- une fonction pour créer un élément d'une liste
- insérer un élément à la fin de la liste
un truc du genre :
struct sSnake{
//coordonnees du "noeud" du serpent considere
int mX;
int mY;
sSnake* suivant;
};
Tu trouveras plus d'info ici. http://www.commentcamarchche.net/contents/c/cliste.php3
Pas très long à coder (en fait ça doit tenir en 30 lignes grand max je dirais.
Déjà merci pour ta réponse
seul problème c'est que je dois le faire en utilisant seulement ce que nous avons vu en cours :s et l'on a pas vu la liste chainée. seul chose que l'on a vu c'est les tableaux et les pointeurs (malheureusement absent lors du cours sur les pointeurs ><) bref moi je suis partis sur un tableau à 2 dimensions pour les x et y :
tab[2][10]={{200,100},{190,100},{180,100},{170,100
},{160,100},{150,100},{140,10},{130,100},{120,100}
,{110,100}};
for(time=0;time<=50000000;time++);
EffacerEcran(w);
ChoisirCouleurDessin(b);
RemplirRectangle(100,6,600,400);
ChoisirCouleurDessin(g);
RemplirArc(x,y,10,10,90,360);
x=x+10;
Ce que je ne voit pas comment faire c'est pour lier les x et y du tableau avec le x et y du RemplirArc (dans le tableau le x est la valeur qui change le y reste 100 pour le test) pour qu'il dessine le serpent et comment faire augmenter les x du tableau de 10 :s
C'est surement simple mais je m'embrouille ^^
Tu n'as pas vu les struct ? Les listes chainées ça n'a rien de magique c'est une mise en pratique des pointeurs et des structures. Ton programme est vraiment bizarre, faire un jeu sans connaitre toutes les possibilités d'un langage c'est un peu... stupide.
Sinon pour ton tableau tu ne sais pas non plus comment faire un tableau dynamique ? Ca serait plus intelligent qu'un tableau statique.
Il suffit alors d'augmenter la taille de ton serpent de une unité lorsque celui-ci attrape une nouvelle pomme. Pour cela tu parcoures l'ancien tableau, arrivé à la dernière case tu regardes ces coordonnées et tu insères les nouvelles coordonnées de ton "écaille" à la fin du tableau en fonction de celle-ci.
Pour dessiner le serpent tu n'as plus qu'à parcourir le tableau et dessiner ce que tu as envie de dessiner en fonction des coordonnées.
Ca sert à quoi RemplirArc je suis pas sûr de comprendre sinon.
PS: Je parlais de ton programme pédagogique bien sûr.
lol je suis en IUT info donc j'ai pas le choix de le faire ce jeu, c'est un projet a rendre ^^ et comme j'ai a peine finis le 1er semestre c'est normal que je n'ai pas tout vu
"Pour cela tu parcoures l'ancien tableau, arrivé à la dernière case tu regardes ces coordonnées et tu insères les nouvelles coordonnées de ton "écaille" à la fin du tableau en fonction de celle-ci."
c'est ca mais je ne vois pas comment intégrer les nouvelles coordonnées surtout que ca dépend de la direction du serpent, pfiiiou c'est un casse tête ce jeu.
RemplirArc dessine un cercle (pour l'instant notre snake est fait de petites boules)
Il faudrait que tu joues un snake car je ne suis moi-même plus très sûr de la façon dont le serpent grandit. Normelement en fait il grandit par l'avant et non l'arrière.
Dans ton tableau la fin du tableau sera toujours la tête. Quand le serpent a mangé une pomme il ne faut pas toucher aux autres sphères il faut juste en rajouter une lors du prochain déplacement. Ca te revient à rajouter une case en plus entre ces deux instants précis dans ton tableau de coordonnées.
Le truc c'est que cet exercice n'est pas simple, et n'utilise pas du tout la librairie graphique la plus simple de tous les temps. Donc oui... s'atteler à un problème comme ça en ayant pour seul connaissance les tableaux statiques et les pointeurs ça fait juste je trouve... Très très juste.
si j'ai bien compris il faut que la tete soit a la fin du tableau