Nous avons choisi de travailler sur le célèbre jeu "Snake". Vous trouverez ci-dessous le programme complet du jeu associé à notre projet d'ISN réalisé à partit d'Edupython (version 3.2) et donc en langage python.


Programme complet

from tkinter import*
import time
from random import randrange
from math import sqrt

fen=Tk()
can=Canvas(height=250,width=250,bg="black")
can.pack()

# # # # # Variables # # # # #

debut=False
perdu=False

cou_snake="white"
cou_piece="red"
cou_piege="blue"

sens="horizontal"
direction="gauche"

inversement=1
pillule=False

score=0 ### Permet de compter le score
balise=0 ### Permet d avoir des paliers
speed=1 ### Permet de changer la "vitesse"
t_s=1 ### Taille serpent
t_p=4 ### Taille piece
t_x=5 ### Taille pieges
hauteur=250
largeur=250
X=-1 ### Valeurs de départ
Y=0  ### car il part par la gauche
longueur_s=30

co_piege=[] ### Coordonnees des pieges
pieges=[] ### Pieges : objets
corps_snake=[] ### Corps serpent : objet
pos_alea=[-2,+2,0,0] ### Positions possibles aleatoire pour le deplacement des pieges

# # # # # # # # # # # # # # #

# # # # # # Placement Piece # # # # # # # #

a=randrange(t_p+2,largeur-t_p-2) ### Random pour le x
b=randrange(t_p+2,hauteur-t_p-2) ### Random pour le y

co_piece=[ ### Definition coordonnes piece en fonction de x et y
            a-t_p,
            b-t_p,
            a+t_p,
            b+t_p]

piece=can.create_oval( ### Creation de la 1ere piece : objet
                        a-t_p,
                        b-t_p,
                        a+t_p,
                        b+t_p,
                        fill=cou_piece,
                        outline=cou_piece)

# # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # Creation Serpent # # # # # # # # # # # #

pos_snake=[[largeur/2,hauteur/2]] ### Creation position tete serpent

for i in range(longueur_s): ### Creation coordonnees corps serpent
    pos_snake.append([largeur/2+t_s*2*(i+1),hauteur/2])

for i in range(longueur_s): ### Creation corps serpent : objet
    corps_snake.append(can.create_oval(
                                        pos_snake[i][0]-t_s,
                                        pos_snake[i][1]-t_s,
                                        pos_snake[i][0]+t_s,
                                        pos_snake[i][1]+t_s,
                                        fill=cou_snake,
                                        outline=cou_snake)
                                        )

snake=can.create_oval( ### Creation tete serpent : objet
                        pos_snake[0][0]-t_s,
                        pos_snake[0][1]-t_s,
                        pos_snake[0][0]+t_s,
                        pos_snake[0][1]+t_s,
                        fill=cou_snake,
                        outline=cou_snake)

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # Fonction  # # # # # # #

def collision_detect(obj1,obj2,x1,y1,x2,y2):
    distance=obj1+obj2
    x=x1-x2
    y=y1-y2
    hypotenuse=sqrt(x*x+y*y)
    if hypotenuse<distance:
        return(True)
    return(False)

def verif_collision(): ### Verifie s il ne touche pas un bord ou lui-meme
    global save2,test,perdu
    if pos_snake[0][0]+t_s +(2*X)*speed <largeur : ### Si depasse pas a droite
        if pos_snake[0][0]-t_s +(2*X)*speed >0 : ### Si depasse pas a gauche
            if pos_snake[0][1]-t_s +(2*Y)*speed <hauteur : ### Si depasse pas en bas
                if pos_snake[0][1]+t_s +(2*Y)*speed > 0 : ### Si depasse pas en haut
                    save2= [pos_snake[0][0]+(2*X)*speed,pos_snake[0][1]+(2*Y)*speed] ### Sauve nouvelle valeur de la tête
                    test=True ### indique qu il y a une une modif

   for i in range(len(pos_snake)-1): ### Si le serpent se touche lui-meme
        if collision_detect(
                            t_s,
                            t_s,
                            pos_snake[0][0],
                            pos_snake[0][1],
                            pos_snake[i+1][0],
                            pos_snake[i+1][1]) ==True:
            perdu=True
            print("serpent se touche")

    for i in range(len(co_piege)): ### On verifie que le serpent ne se prend pas un piege
        if collision_detect(
                            t_s,
                            t_x,
                            pos_snake[0][0],
                            pos_snake[0][1],
                            (co_piege[i][0]+co_piege[i][2])/2,
                            (co_piege[i][1]+co_piege[i][3])/2) ==True:
            perdu=True
            print("serpent touche piege")

    if test!=True:
        perdu=True

def avancer():
    global pos_snake,co_piece,perdu,score,piege,balise,pieges,co_piege,test,pillule,inversement
    test=False
    if score>=5+balise: ### Si on atteint un multiple de 5 dans le score
        balise=score

        a=randrange(t_x+2,largeur-t_x-2)
        b=randrange(t_x+2,hauteur-t_x-2)
        co_piege.append([a-t_x,b-t_x,a+t_x,b+t_x]) ### Ajout coordonnees piege supplementaire
        pieges.append(can.create_oval( ### Creation piege : objet
                                        a-t_x,
                                        b-t_x,
                                        a+t_x,
                                        b+t_x,
                                        fill=cou_piege,
                                        outline=cou_piege)
                                        )

    if len(co_piege)>0: ### Si il existe des pieges
        for i in range(len(co_piege)):
            a=randrange(0,4) ## Choix
            b=randrange(0,4) ## Coordonnees
            if co_piege[i][0]+pos_alea[a]>0: ### Si le piege ne va pas sortir de la fenetre
                if co_piege[i][1]+pos_alea[b] >0:
                    if co_piege[i][2]+pos_alea[a] < largeur :
                        if co_piege[i][3]+pos_alea[b]<hauteur:
                            co_piege[i]=[ ### Le piege prend de nouvelles coordonnees
                                        co_piege[i][0]+pos_alea[a],
                                        co_piege[i][1]+pos_alea[b],
                                        co_piege[i][2]+pos_alea[a],
                                        co_piege[i][3]+pos_alea[b]]

            can.coords( ### Le piege change de palce
                        pieges[i],
                        co_piege[i][0],
                        co_piege[i][1],
                        co_piege[i][2],
                        co_piege[i][3])

    verif_collision() ### Verifie qu il n y a pas de collision

    if test==True: ### Si le serpent n est pas mort
        i=0
        save=pos_snake ### Sauvegarde de la position actuelle - la new position de la tête
        pos_snake=[save2]

        while i < len(save)-1 : ### La position d un point du serpent prend la precedente position du point qui le precede
            pos_snake.append(save[i])
            i+=1
        can.coords( ###  On actualise la position de la tete egalement
                    snake,
                    pos_snake[0][0]-t_s,
                    pos_snake[0][1]-t_s,
                    pos_snake[0][0]+t_s,
                    pos_snake[0][1]+t_s)
        i=1


        if collision_detect(t_s,t_p,pos_snake[0][0],pos_snake[0][1],(co_piece[0]+co_piece[2])/2,(co_piece[1]+co_piece[3])/2)==True:
            score+=1
            if  pillule==True:
                inversement=-1
            else:
                inversement=1
            a=randrange(t_p+5,largeur-t_p-5)
            b=randrange(t_p+5,hauteur-t_p-5)

            can.coords( ### alors elle change de place
                        piece,
                        a-t_p,
                        b-t_p,
                        a+t_p,
                        b+t_p)

            co_piece=[ ### Enregistrement des new coordonnees
                        a-t_p,
                        b-t_p,
                        a+t_p,
                        b+t_p]

            value=randrange(0,10)

            if value==0 and pillule==False:
                can.itemconfigure(piece, fill="green")
                can.itemconfigure(piece, outline="green")
                pillule=True

            elif pillule==True:
                can.itemconfigure(piece, fill="red")
                can.itemconfigure(piece, outline="red")
                pillule=False

            for i in range(10): ### On ajoute des points a la queue du serpent
                pos_snake.append([
                                    pos_snake[len(pos_snake)-1][0],
                                    pos_snake[len(pos_snake)-1][1]])

                corps_snake.append(can.create_oval(
                                                    pos_snake[len(pos_snake)-1]
[0]-t_s,
                                                    pos_snake[len(pos_snake)-1][1]-t_s,
                                                    pos_snake[len(pos_snake)-1][0]+t_s,
                                                    pos_snake[len(pos_snake)-1][1]+t_s,
                                                    fill=cou_snake,
                                                    outline=cou_snake)
                                                    )
            for i in range(10): ### On les met en place
                can.coords(
                            corps_snake[len(corps_snake)-11+i],
                            pos_snake[len(corps_snake)-10+i][0]-t_s,
                            pos_snake[len(corps_snake)-10+i][1]-t_s,
                            pos_snake[len(corps_snake)-10+i][0]+t_s,
                            pos_snake[len(corps_snake)-10+i][1]+t_s)

    fen.after(30,go)


def go(): ### Si on a pas perdu, le serpent continue d avancer
    global debut
    debut=True
    if perdu==False:
        avancer()
    else:
        texte=str ("Ton score est de " + str(score))
        noir=can.create_rectangle(0,0,largeur,hauteur,fill="black",stipple="gray50")
        can.create_text(hauteur/2,largeur/2,text="PERDU !",fill="red",font="Comic 30")
        can.create_text(hauteur/2,largeur/2+50,text=texte,fill="red",font="Comic 15")
        fen.after(4000,fen.destroy)

def boost(event): ### Augmente la vitesse du serpent
    global speed
    if debut==True:
        speed=2
    else:
        go()

def nonboost(event): ### Diminue la vitesse du serpent
    global speed
    if debut==True:
        speed=1

def demarrer(event): ### Demarre le jeu
    if debut==False:
        go()

# # # # # Gestion directions # # # # #

def k_up(event):
    global direction,speed,X,Y
    if direction!="bas" and direction!="haut":
        direction="haut"
        X=0*inversement
        Y=-1*inversement
    if debut==False:
        go()

def k_down(event):
    global sens,direction,speed,X,Y
    if direction!="haut" and direction !="bas":
        direction="bas"
        X=0*inversement
        Y=1*inversement
    if debut==False:
        go()

def k_left(event):
    global sens,direction,speed,X,Y
    if direction!="droite" and direction!="gauche":
        direction="gauche"
        X=-1*inversement
        Y=0*inversement
    if debut==False:
        go()

def k_right(event):
    global sens,direction,speed,X,Y
    if debut==True and direction!="gauche" and direction!="droite":
        direction="droite"
        X=1*inversement
        Y=0*inversement


# # # # # # # # # # # # #  # # # # #

# # # # Gestion d evenements # # # #

fen.bind("<Up>",k_up)
fen.bind("<Down>",k_down)
fen.bind("<Left>",k_left)
fen.bind("<Right>",k_right)
fen.bind("<KeyRelease-space>",nonboost)
fen.bind("<space>",boost)

# # # # # # # # # # # # # # # # # # #

fen.mainloop()


Dossier et Programme du Projet
Projet
Copyright © 2014 by Mahboub Leïla  ·  All Rights reserved  ·  E-Mail: nourmah028@gmail.com
YOUR WEBSITES NAME