Accueil > > > PETIT JEU DE SERPENT DE BASE
PETIT JEU DE SERPENT DE BASE
Information sur la source
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).
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 :
Sources de la même categorie
Commentaires et avis
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
Réalisation d'un plus ou moins sur Tkinter [ par kuritsu ]
Bonsoir tout le monde, et je vous souhaite la bonne année à tous par la même occasion. Je viens de me mettre à la programmation sous Python, et j'avo
créer une simulation d'un jeu de cartes [ par jimux06 ]
# simulation d'un tirage de cartes # dans la version 3.1.x # afficher la date du jour (jj-mm-aaaa) et l'heure (hh:mm:ss), avant chaque jeu # utiliser
|
Derniers Blogs
ENUMERABLECOLLECTIONENUMERABLECOLLECTION par Matthieu MEZIL
Prenons le scénario suivant. On utilise MVVM. On a les deux classes suivantes dans le model : public class Child { } public class Parent { private ObservableCollection < Child > _children; public ObservableCollection < Child > Children { get {...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [HS] CHROME 6 + MOI = COUP DE GUEULE ![HS] CHROME 6 + MOI = COUP DE GUEULE ! par JeremyJeanson
Attention, le poste qui suit n'est pas la complainte d'une personne : Qui n'aime pas Chrome. D'un anti Google. D'un développeur qui a un poil énorme dans la main. Ceux qui me fréquentent savent que je change de navigateur favori tous les 2 ou 3 mois afin ...
Cliquez pour lire la suite de l'article par JeremyJeanson [WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas [TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION[TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION par cyril
Lorsque l'on créé un Work Item dans TFS, il est possible de le classer dans un "area" et dans une "iteration". Dans la plupart des types de projet, un "area" correspond à une catégorie, une "iteration" à un numéro de version. Il est possible de cré...
Cliquez pour lire la suite de l'article par cyril
Forum
RE : PYTHON 3.0RE : PYTHON 3.0 par aera group
Cliquez pour lire la suite par aera group RE : PYTHON 3.0RE : PYTHON 3.0 par xeolin
Cliquez pour lire la suite par xeolin RE : PYTHON 3.0RE : PYTHON 3.0 par aera group
Cliquez pour lire la suite par aera group
Logiciels
uTorrent (2.0.4)UTORRENT (2.0.4)C'est un client BitTorrent très puissant et très performant. Comme son nom l'indique, uTorrent (m... Cliquez pour télécharger uTorrent Bureau de Gestion - ERP Devis Facturation (2.02)BUREAU DE GESTION - ERP DEVIS FACTURATION (2.02)- Version gratuite du 10/06/2010
Le Bureau de Gestion est un logiciel dédié à la gestion de l'en... Cliquez pour télécharger Bureau de Gestion - ERP Devis Facturation 4Videosoft Transfert iPod Mac (3.2.08)4VIDEOSOFT TRANSFERT IPOD MAC (3.2.08)4Videosoft Transfert iPod-Mac caractérise principalement à transférer les fichiers iPod vers Mac.... Cliquez pour télécharger 4Videosoft Transfert iPod Mac 4Videosoft HD Convertisseur (3.3.08)4VIDEOSOFT HD CONVERTISSEUR (3.3.08)Etant le meilleur HD Vidéo Convertisseur, 4Videosoft HD Convertisseur, vous pouvez regarder la vi... Cliquez pour télécharger 4Videosoft HD Convertisseur 4Videosoft Transfert iPad Mac (3.2.08)4VIDEOSOFT TRANSFERT IPAD MAC (3.2.08)4Videosoft Transfert iPad-Mac est un logiciel managérial iPad professionnel qui a des fonctions i... Cliquez pour télécharger 4Videosoft Transfert iPad Mac
|