Répartition
Dans cette partie je vais détailler le rôle et le principe de fonctionnement des fonctions que j'ai réalisé seule:
- Def réinit ():
- Def appomme ():
- Def vies ():
- Def vérif ():
Mais aussi la fonction réalisé avec Rémi:
- Def Coordonnee ():>/li>
Et avec Embarek:
- Def Agrandissement
Affichage de la fenêtre
Présentation de l'interface graphique.
Organisation des boutons, zones de textes et canevas.
Fonctions Graphiques
J'ai commencé par mettre en place l'affichage du serpent, de la pomme et des vies. Ce sont les fonctions graphiques.
Fonction Réinit
Cette fonction permet l'affichage de base du serpent et d'une pomme comme ci-dessous.
Dans un premier temps le serpent.
Pour le serpent, nous avons créé 2 listes:
- anneau: est initialisée avec autant de 0 que de cases voulu. Les 0 seront remplacés par des carrés de couleur.
- anneaucoord: est une liste vide pour le moment. Elle sera remplie avec les coordonnées de chaque cases qui formeront le serpent.
1. On commence par remplir la liste de coordonées:
anneaucoord = [[i;j1];[i;j2];[i;j3];[i;j4]]
[i;j1]
correspondent au centre du caneva, c'est à partir de ces coordonnées que les autres sont créés vers la droite.
le serpent est donc placé horizontalement au centre du canevas.
2. On créer ensuite des carrés de couleur vert foncé pour que le serpent devienne visible. On met en relation les deux fonctions pour associer les coordonnées aux cases, au moyen de la boucle for.

Pour ce qui est des dimensions de la case, nous avons récupéré ce bout de code sur le programme du jeu de la vie que nous avions étudié en cours. Puis pour la dernière case, on créer un case de couleur vert claire pour symboliser la tête.
Dans un deuxième temps la pomme
On créer un carré rouge aux coordonnées [i;j].
La pomme se trouve donc au même emplacement que le serpent. C'est en appliquant la fonction appomme() qu'elle va se déplacer à un endroit libre.
Les fonctions appelés et les variables définies
On donne à a la valeur de 1 et à b la valeur de 0 pour que la direction initiale du serpent, lorsque le programme commencera, soit droite.
On défini le score initiale à 0
On fait appelle à la fonction vie()
Fonction appome
Cette fonction déplace la pomme au hasard. --> ap(parition)pomme --> appomme
Elle permet également de vérifier qu'elle n'apparait ni sur le serpent ni sur un mur (lorsqu'on atteint le 2ème niveau).
Pour créer ce carré rouge, on doit trouver ses coordonnées:

Les coordonnées devraient être choisit au hasard entre 0 et ligne-1.
Mais nous avons observé un problème. Lorsque la pomme se trouve au bord du canevas, au niveau 1, et que le serpent sort du mur pour la manger, le serpent ne la reconnait pas. (voir ci-dessous)

Nous n'avons pas eu le temps de trouver une solution. Nous avons donc choisit de prendre les coordonnées de la pomme entre 1 et ligne -2 évitant ainsi que cette dernière ce trouve sur un bord.
On stock les coordonnées de la pomme dans la liste pommecoord. Ce qui nous permet de pouvoir recommencer la recherche au hasard de x et y si "pommecoord" est égale aux coordonnées d'un anneau du serpent.

Et pour finir on déplace le carré rouge appelé "pomme" aux nouveaux cordonnées:

Problèmes rencontrés
La nouvelle pomme apparaissait à chaque fois que nécessaire mais l'ancienne pomme ne disparaissait pas.
Il fallait enfaite déplacer la pomme plutôt que d'en créer une nouvelle.
Le serpent à la rencontre de la pomme ne grandissait pas.
Il fallait stocker les coordonnées de la pomme dans une liste.
La pomme appraissait or du canevas. Nous nous en sommes rendu comte en imprimant ses coordonnées.
Les limites de recherche au hasard n'étaient pas choisits judicieusement.
Fonction vie
Cette fonction affiche avec des cercles le nombre de vies restantes.
Pour cela on créer déjà un nouveau canevas:
Dans ce nouveaux canevas on créer des cercles identiques à différents coordonnées.
Seul les y changent, on créer donc une liste qui les contient.
On créer un oval avec ces coordonnées:
Cette fonction est appelé à chaque fois que la fonction réinit() est lancé. Elle trace autant de cercle qu'il reste de vie.
Fonctions Jeu
Les fonction du jeu sont des fonctions qui ne sont pas directement appelés par le joueur,
mais qui sont déclanchés une fois le jeu commencé.
Fonction coordonnées
Cette fonction a été réalisé en duo avec Rémi. Elle permet le déplacement du serpent en boucle.
Nous avons mis du temps à la mettre en place. Nous avons pensé à faire sur le même principe que celui du jeu de la vie, à savoir tout effacer et tou recréer à chaque fois.
C'était effectivement beaucoup trop long. C'est notre proffesseur qui nous a mis sur la voie de deux listes qui marchent ensemble.
1. Le serpent n'avance que si le drapeau est levé
2. On s'occuppe dabord de la liste "anneaucoord" de coordonnées:
- On lui ajoute un couple de coordonnées en fonction de la direction du serpent
- la direction est donnée par le joueur
- les fonctions déplacements donnent une valeur à a et b
- on stock les coordonnées de Q avec la variable queue.
On l'utilisera plus tard dans la fonction agrandissement. - on supprime le dernière élément pour que le serpent avance et fasse toujours la même taille.
Exemple de déplacement vers la droite:
La queue est donc le première élément de la liste et la tête se trouve à taille-1 (taille étant le nombre d'éléments de la liste anneaucoor).
Nous avons réalisé une fonction test pour cette partie:


3. On déplace ensuite les carrés de "anneau" aux bons coordonnées.
4. On applique les fonctions agrandissement, niveau et vérif.
5. Pour finir on applique:

La fonction est appliqué automatiquement en boucle tant que le drapeau est levé.
Nous avons eu des soucis avec le
cadre.after(vitesse, coordonnee)
. Nous faision appelle à la fonction coordonnée à chaque fois que le joueur appuyait sur une flêche
et à chaque fin de la fonction coordonnee. Ainsi le serpent accélérésans cesse. Nous avons donc enlevé l'appelle à la fonction coordonnee dans les fonctions déplacement.
Fonction Vérif
Cette fonction fait en sorte que le serpent meurt s'il se mord.
Le serpent ne pourra s'auto mordre qu'à partir de son 4 ème anneau, soit l'anneau de coordonnées anneaucoord[taille-4].
Il faut donc vérifier de (0) à (taille-4) de anneaucoord les coordonnées:
- Si l'un d'eux est identique aux coordonnées de la tête (anneaucoord[taille-1].
Alors le drapeau se baisse. Le serpent s'arrête. La fonction over est appelée. - Sinon rien ne se pase et le serpent continu d'avancer.
Fonction Agrandissement
J'ai réalisé cette fonction avec l'aide de Embarek. Elle augmente le serpent d'une case lorsuq'il rencontre la pomme.
Si les coordonnées de la pomme (pommecoord) sont identiques aux coordonnées de la tête (anneaucoord[taille-1])
Alors on ajoute à la fin du serpent l'ancienne queue.
On créer un carré pour ce nouvel anneau (aux coordonnées de "queue")
On augmente le score de 10 points.
Problèmes rencontrés
Nous voulions au début ne pas supprimer le dernière élément ainsi le serpent aurait automatiquement grandit.
Mais il fallait pour cela alterner les fonctions coordonnées et agrandissement et en créer en suplémentaire.
Nous n'avons pas réussi et nous avons préféré ajouter un élément.