begin process at 2008 08 29 03:55:30
1 233 495 membres
36 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PETIT JEU DE SERPENT DE BASE


Information sur la source

Catégorie :Jeux Classé sous : serpent, snake, jeu, collision Niveau : Débutant Date de création : 24/11/2004 Date de mise à jour : 19/01/2005 13:51:12 Vu / téléchargé: 4 713 / 364

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Ba c'est un simple petit jeu de serpent de base (je débute ;-) avec  gestion des points, de collisions,.... ENfin même si il est simple il reste tout de même complet.

Source

  • # -*- coding: cp1252 -*-
  • # Ce programme est un simple petit jeu de serpent
  • # Les imports :
  • from Tkinter import *
  • from random import randrange
  • # Définition de fonctions :
  • # Fonction principale (déplacement) :
  • def avancer ():
  • global car_coord, step, arret_bcl, car, pts, temp
  • pomme() # Création de la pomme
  • # Déplacement du serpent proprement dit :
  • i = 0
  • while (i <= (len(car)-1)):
  • car_coord[i][0] = car_coord[i][0] + car_coord[i][2]
  • car_coord[i][1] = car_coord[i][1] + car_coord[i][3]
  • canv.coords(car[i], car_coord[i][0], car_coord[i][1], car_coord[i][0] + 10, car_coord[i][1] + 10)
  • if (i == 0):
  • temp[0] = [car_coord[i][2], car_coord[i][3]]
  • else :
  • temp[1] = [car_coord[i][2], car_coord[i][3]]
  • car_coord[i][2] = temp[0][0]
  • car_coord[i][3] = temp[0][1]
  • temp[0] = temp[1]
  • # Si le serpent se coupe la partie s'arrête :
  • if ((car_coord[0][0] == car_coord[i][0]) and (car_coord[0][1] == car_coord[i][1])):
  • arret_bcl = 1
  • i = i + 1
  • # Si le serpent touche les bords il s'arrête (partie finie):
  • if ((car_coord[0][0] == 0) or (car_coord[0][0] == 590)):
  • arret_bcl = 1
  • elif ((car_coord[0][1] == 0) or (car_coord[0][1] == 390)):
  • arret_bcl = 1
  • if (arret_bcl == 0):
  • fen.after(50, avancer)
  • #Fonction commencer :
  • def commencer():
  • global car_coord, car, pts, arret_bcl, temp, pom_la, pom_ov, pomx, pomy
  • i = 0
  • while (i <= (len(car)-1)): # On supprime les carrés de l'anciens serpent
  • canv.delete(car[i])
  • i = i + 1
  • canv.delete(pom_ov) # On supprime le carré de la pomme restante à l'écran
  • # On réinitialise les variables propres au jeu :
  • pts = 0
  • car = [0] *4
  • car_coord = [[0, 0, 0, 0]] *4
  • arret_bcl = 0
  • temp = [[0,0]]*2
  • pom_la, pom_ov, pomx, pomy = -1, 0, 0, 0
  • # Création du serpent de début :
  • i = 0
  • while (i <= (len(car)-1)): # On enregistre les coords de chaque carrés ds car_coord
  • if (i == 0):
  • car_coord[i] = [300, 200, -10, 0]
  • else :
  • car_coord[i] = [car_coord[i-1][0] + 10, 200, -10, 0]
  • # On dessine les carrés :
  • car[i] = canv.create_rectangle(car_coord[i][0], car_coord[i][1], car_coord[i][0] + 10, car_coord[i][1] + 10, fill='black')
  • i = i + 1
  • avancer() # On commence la partie en invoquant la fonction avancer()
  • #Fonction "ptites pommes vertes" :
  • def pomme ():
  • global pom_la, pom_ov, pomx, pomy, car, car_coord, pts
  • if (pom_la == 1):
  • if ((car_coord[0][0] == pomx) and (car_coord[0][1] == pomy)):
  • car.append(0) # On ajoute une entrée ds la liste d'identificateur des carrés
  • # On ajoute les infos propres au nvo carré :
  • x, y = car_coord[len(car_coord)-1][0] - car_coord[len(car_coord)-1][2] , car_coord[len(car_coord)-1][1] - car_coord[len(car_coord)-1][3]
  • stepx, stepy = car_coord[len(car_coord)-1][2], car_coord[len(car_coord)-1][3]
  • car_coord.append([x, y, stepx, stepy])
  • # On affiche le nvo carré :
  • car[len(car)-1] = canv.create_rectangle(x, y, x+10, y+10, fill='black')
  • pts = pts + 10 # On incrémente les points de 10
  • lb_pts.configure(text="Points = " + str(pts)) # On met à jour le label "points"
  • pom_la = 0
  • else:
  • pomx, pomy = (randrange(57) + 1)*10, (randrange(38) + 1)*10
  • if (pom_la != 0):
  • pom_ov = canv.create_rectangle(pomx, pomy, pomx+10, pomy+10, fill='green')
  • else :
  • canv.coords(pom_ov, pomx, pomy, pomx+10, pomy+10)
  • pom_la = 1
  • # Fonction de déplcament spécifique à chaque touche :
  • def left(event):
  • global car_coord
  • if (car_coord[0][2] != 10):
  • car_coord[0][2] = -10
  • car_coord[0][3] = 0
  • def right(event):
  • global car_coord
  • if (car_coord[0][2] != -10):
  • car_coord[0][2] = 10
  • car_coord[0][3] = 0
  • def up(event):
  • global car_coord
  • if (car_coord[0][3] != 10):
  • car_coord[0][2] = 0
  • car_coord[0][3] = -10
  • def down(event):
  • global car_coord
  • if (car_coord[0][3] != -10):
  • car_coord[0][2] = 0
  • car_coord[0][3] = 10
  • # Définition des vrariables (utilisées en global pour certaines) :
  • pts = 0 # Nbr de points
  • car = [0] *4 # Identifiants de chaque carré (5 au début)
  • car_coord = [[0, 0, 0, 0]] *4 # Coords de chaque carré + pas en x et y pour chaque carré
  • arret_bcl = 0 # Variable de "condition" pour quitter la fonction "avancer"
  • temp = [[0,0]]*2 # Var temporaire utilisée pour un échange de valeurs ds la fonction "avancer"
  • pom_la, pom_ov, pomx, pomy = -1, 0, 0, 0 # Var pour gérer la pomme
  • # Création du widget maitre :
  • fen = Tk()
  • fen.title('Jeu de serpent by Gulius')
  • fen.bind("<Left>", left)
  • fen.bind("<Right>", right)
  • fen.bind("<Up>", up)
  • fen.bind("<Down>", down)
  • # Création des widgets esclaves :
  • Label(fen, text='Serpent by Gulius', font="weight=BOLD").grid(row=0, sticky=W, padx=10)
  • lb_pts = Label(fen, text='Points = aucun')
  • lb_pts.grid(row=0, column=1, sticky=E, padx=20)
  • canv = Canvas(fen, width=600, height=400, bg='blue')
  • canv.grid(row=1, column=0, columnspan=2)
  • Button(fen, text='New game', command=commencer).grid(row=2, column=0, padx=30, pady=30)
  • Button(fen, text='Quiter', command=fen.quit).grid(row=2, column=1, padx=30, pady=30)
  • # Main :
  • fen.mainloop()
  • # After main :
  • fen.destroy()
# -*- coding: cp1252 -*-
# Ce programme est un simple petit jeu de serpent

# Les imports :
from Tkinter import *
from random import randrange

# Définition de fonctions :
    # Fonction principale (déplacement) :
def avancer ():
    global car_coord, step, arret_bcl, car, pts, temp
    pomme()         # Création de la pomme
    
    # Déplacement du serpent proprement dit :
    i = 0
    while (i <= (len(car)-1)):
        car_coord[i][0] = car_coord[i][0] + car_coord[i][2]
        car_coord[i][1] = car_coord[i][1] + car_coord[i][3]
        canv.coords(car[i], car_coord[i][0], car_coord[i][1], car_coord[i][0] + 10, car_coord[i][1] + 10)
        
        if (i == 0):
            temp[0] = [car_coord[i][2], car_coord[i][3]]
        else :
            temp[1] = [car_coord[i][2], car_coord[i][3]]
            car_coord[i][2] = temp[0][0]
            car_coord[i][3] = temp[0][1]
            temp[0] = temp[1]

            # Si le serpent se coupe la partie s'arrête :
            if ((car_coord[0][0] == car_coord[i][0]) and (car_coord[0][1] == car_coord[i][1])):
                arret_bcl = 1                
        i = i + 1
    # Si le serpent touche les bords il s'arrête (partie finie):
    if ((car_coord[0][0] == 0) or (car_coord[0][0] == 590)):
        arret_bcl = 1
    elif ((car_coord[0][1] == 0) or (car_coord[0][1] == 390)):
        arret_bcl = 1

    if (arret_bcl == 0):
        fen.after(50, avancer)

    #Fonction commencer :
def commencer():
    global car_coord, car, pts, arret_bcl, temp, pom_la, pom_ov, pomx, pomy
    
    i = 0
    while (i <= (len(car)-1)):      # On supprime les carrés de l'anciens serpent
        canv.delete(car[i])
        i = i + 1
    canv.delete(pom_ov)     # On supprime le carré de la pomme restante à l'écran

    # On réinitialise les variables propres au jeu :
    pts = 0
    car = [0] *4
    car_coord = [[0, 0, 0, 0]] *4
    arret_bcl = 0
    temp = [[0,0]]*2
    pom_la, pom_ov, pomx, pomy = -1, 0, 0, 0

    # Création du serpent de début :
    i = 0
    while (i <= (len(car)-1)):      # On enregistre les coords de chaque carrés ds car_coord
        if (i == 0):
            car_coord[i] = [300, 200, -10, 0]
        else :
            car_coord[i] = [car_coord[i-1][0] + 10, 200, -10, 0]
            # On dessine les carrés :
        car[i] = canv.create_rectangle(car_coord[i][0], car_coord[i][1], car_coord[i][0] + 10, car_coord[i][1] + 10, fill='black')

        i = i + 1
    avancer()   # On commence la partie en invoquant la fonction avancer()

    #Fonction "ptites pommes vertes" :
def pomme ():
    global pom_la, pom_ov, pomx, pomy, car, car_coord, pts
    if (pom_la == 1):
        if ((car_coord[0][0] == pomx) and (car_coord[0][1] == pomy)):
            car.append(0)         # On ajoute une entrée ds la liste d'identificateur des carrés
            # On ajoute les infos propres au nvo carré :
            x, y = car_coord[len(car_coord)-1][0] - car_coord[len(car_coord)-1][2] , car_coord[len(car_coord)-1][1] - car_coord[len(car_coord)-1][3]
            stepx, stepy = car_coord[len(car_coord)-1][2], car_coord[len(car_coord)-1][3]
            car_coord.append([x, y, stepx, stepy])
            # On affiche le nvo carré :
            car[len(car)-1] = canv.create_rectangle(x, y, x+10, y+10, fill='black')
            
            pts = pts + 10      # On incrémente les points de 10
            lb_pts.configure(text="Points = " + str(pts))   # On met à jour le label "points" 
            pom_la = 0
    else:
        pomx, pomy = (randrange(57) + 1)*10, (randrange(38) + 1)*10
        if (pom_la != 0):
            pom_ov = canv.create_rectangle(pomx, pomy, pomx+10, pomy+10, fill='green')
        else :
            canv.coords(pom_ov, pomx, pomy, pomx+10, pomy+10)
        pom_la = 1
    
    # Fonction de déplcament spécifique à chaque touche :
def left(event):
    global car_coord
    if (car_coord[0][2] != 10):
        car_coord[0][2] = -10
        car_coord[0][3] = 0
    
def right(event):
    global car_coord
    if (car_coord[0][2] != -10):
        car_coord[0][2] = 10
        car_coord[0][3] = 0
    
def up(event):
    global car_coord
    if (car_coord[0][3] != 10):
        car_coord[0][2] = 0
        car_coord[0][3] = -10
    
def down(event):
    global car_coord
    if (car_coord[0][3] != -10):
        car_coord[0][2] = 0
        car_coord[0][3] = 10

# Définition des vrariables (utilisées  en global pour certaines) :
pts = 0        # Nbr de points
car = [0] *4        # Identifiants de chaque carré (5 au début)
car_coord = [[0, 0, 0, 0]] *4      # Coords de chaque carré + pas en x et y pour chaque carré
arret_bcl = 0       # Variable de "condition" pour quitter la fonction "avancer"
temp = [[0,0]]*2    # Var temporaire utilisée pour un échange de valeurs ds la fonction "avancer"
pom_la, pom_ov, pomx, pomy = -1, 0, 0, 0      # Var pour gérer la pomme

# Création du widget maitre :
fen = Tk()
fen.title('Jeu de serpent by Gulius')
fen.bind("<Left>", left)
fen.bind("<Right>", right)
fen.bind("<Up>", up)
fen.bind("<Down>", down)

# Création des widgets esclaves :
Label(fen, text='Serpent by Gulius', font="weight=BOLD").grid(row=0, sticky=W, padx=10)
lb_pts = Label(fen, text='Points = aucun')
lb_pts.grid(row=0, column=1, sticky=E, padx=20)
canv = Canvas(fen, width=600, height=400, bg='blue')
canv.grid(row=1, column=0, columnspan=2)
Button(fen, text='New game', command=commencer).grid(row=2, column=0, padx=30, pady=30)
Button(fen, text='Quiter', command=fen.quit).grid(row=2, column=1, padx=30, pady=30)

# Main :
fen.mainloop()

# After main :
fen.destroy()

Conclusion

Voilà je début donc soyez indulgents. Menfin j'ai my cette source plus pour aider ceux qui comme moi débute ds ce language (fort passionant en passant).
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

24 novembre 2004 19:43:26 :
Ajout d'une image d'une capture d'écran (pti oubli dslé ;-)
24 novembre 2004 19:45:07 :
19 janvier 2005 13:51:13 :
  • signaler à un administrateur
    Commentaire de Pingouin le 14/02/2005 23:15:43

    Source modeste certes, mais comme moi aussi je débute, plus jeunot encore en Python que toi a mon avis ;-), je ne peux que te féliciter. Au moins...ca marche lol
    Quelques suggestions : retard à l'affichage, la pomme apparait dans le serpent mais j'ai po d'idée...
    Ce qui m'intéresse vraiment : est ce que ca ne pourrait pas etre une base intéressante pour apréhender directement et de facon simple la programmation orientée objet en créant une classe pour éviter les varaibles global et surtout expérimenter un peu tout ca ? si ca te tente je veux bien te filer un coup de main ca m'aidera sans doute (et peut etre toi aussi) à me familiariser avec le langage (j'etais deja content de tout comprendre a ton script lol)
    Voia c tout
    Et franchement...Python...c bien lol

    @+

    Pingouin

  • signaler à un administrateur
    Commentaire de Gulius le 15/02/2005 00:27:42

    Merci bcp pour ton commentaire.
    Euh bas jy avais penser. Pour le moment jsuis sur un pti projet de traceur de fonction mathématiques assez complet en POO (enfin le plus que je puis ;-). Mais quand jaurais fini (si jle fini car je suis feigant) et bien pas de prob.

    Mais merci bcp de my avoir fait penser.
    Sur le dernier code (le traceur de fonctions), jai vraiment découvert la POO, et .... fiou ..... jsuis vraiment tombé amoureux. Ca facilite vraiment bcp le travail. Et ya bcp plus dorganisation et moins de bidouillage.

    A++

  • signaler à un administrateur
    Commentaire de Pingouin le 15/02/2005 13:28:23

    Ué c sur la POO c tout de meme vachement mieux. Ben ecoute bon courage pour ton projet. Moi je vais continue a apprendre yen a tellement et c si bon... lol

    @+

    Pingouin

  • signaler à un administrateur
    Commentaire de craso le 12/04/2007 11:05:04

    je commence a m'interresser au python, et bien je crois que ce code m'a seduit, allez 10.

Ajouter un commentaire

Discussions en rapport avec ce code source

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS