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é: 5 240 / 379

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

Cliquez pour voir la capture en taille normale
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).
 

Fichier Zip

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

Historique

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 :

Commentaires et avis

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 dans le forum

modification de jeu morpion en python [ par apprenti2008 ] salut a tous ! SVP j'ai vraiment besoin d'aide , je suis en première année MASS , le prof nous a demander de créer un jeu morpion en python , le princ [Jeu par navigateur] Miraemos - Projet sérieux [ par jesslaly ] Bonjour,Je suis Jessica, étudiante qui a monté un projet depuis une année maintenant.Je me suis lancée dans un projet assez intéressant de jeu en lign jeu de la vie [ par dia100daly ] je veux poster un code. Mais j'aimerai savoir si c'etait vraiment la peine car c'est la première fois. Pour plus de détail voir sur Wikipédia ( jeu de codage Windows jeu de caractères [ par creaduff ] Bonjour,Avant tout, précisons que je ne suis pas un aigle en Python ! Voici mon problème:J'ai écrit une petit programme permettant d'accéder à ma boit


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,546 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.