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:


Mais aussi la fonction réalisé avec Rémi:
Et avec Embarek:

haut

Affichage de la fenêtre



Présentation de l'interface graphique. Organisation des boutons, zones de textes et canevas.





haut

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:





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.

haut

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:



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:

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.

haut