CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Jeu du serpent en C

alex5513
alex5513
Niveau 7
29 décembre 2010 à 15:29:47

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

godrik
godrik
Niveau 30
29 décembre 2010 à 18:31:39

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.

saleGauss
saleGauss
Niveau 9
29 décembre 2010 à 18:51:20

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 ?

alex5513
alex5513
Niveau 7
29 décembre 2010 à 22:20:10

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 :)

godrik
godrik
Niveau 30
29 décembre 2010 à 22:31:56

quel bourrin! faire du X11 alors qu'on commence en C. Bon courage !

alex5513
alex5513
Niveau 7
29 décembre 2010 à 22:59:54

ptdr pas le choix c'est un devoir ^^

alex5513
alex5513
Niveau 7
29 décembre 2010 à 23:50:57

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 ^^

godrik
godrik
Niveau 30
29 décembre 2010 à 23:54:01

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.

alex5513
alex5513
Niveau 7
30 décembre 2010 à 00:18:08

oki merci pour ces infos :) faut je trouve ca alors

alex5513
alex5513
Niveau 7
30 décembre 2010 à 01:02:29

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 ^^

tbop2
tbop2
Niveau 10
30 décembre 2010 à 12:37:13

Comment as tu l'intention de coder structurellement le serpent dans ton code ?

alex5513
alex5513
Niveau 7
30 décembre 2010 à 15:44:08

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 ^^

tbop2
tbop2
Niveau 10
30 décembre 2010 à 16:10:25

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.

alex5513
alex5513
Niveau 7
30 décembre 2010 à 16:23:22

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 ^^

tbop2
tbop2
Niveau 10
30 décembre 2010 à 17:37:54

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.

tbop2
tbop2
Niveau 10
30 décembre 2010 à 17:38:33

PS: Je parlais de ton programme pédagogique bien sûr.

alex5513
alex5513
Niveau 7
30 décembre 2010 à 18:06:27

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.

alex5513
alex5513
Niveau 7
30 décembre 2010 à 19:00:10

RemplirArc dessine un cercle (pour l'instant notre snake est fait de petites boules)

tbop2
tbop2
Niveau 10
30 décembre 2010 à 19:19:06

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.

alex5513
alex5513
Niveau 7
31 décembre 2010 à 03:05:56

si j'ai bien compris il faut que la tete soit a la fin du tableau

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment