#76 Le 16/05/2011, à 19:01
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Attention, dans l'album, il y a les même nounours plus grands. ici, ce sont les petits qu'on utilise.
Mon jeu avec les couleurs devient assez complet. J'ai essayé d'utiliser pygame.time.wait(temps en ms) pour finir le jeu, sans succès. J'ai donc rusé énormément, ce qui n'est peut-être pas orthodoxe mais ça marche !
J'ai créé encore une nouvelle image, arriereplan_cote2.png (de même taille que arriereplan_cote.png, qui elle est entièrement blanche) et j'ai fait 2 nouveaux arrière plans mieux conçus, avec un carré jaune comme destination finale. Le jaune provoque l'affichage de la victoire si on a obtenu 6 points en passant dans le bleu.
Vous trouverez ces nouveautés dans mon album web. Vérifiez que les noms correspondent bien à ceux du programme ci-dessous au cas où j'aurais fait une erreur !
Pensez aussi à changer le chemin avec celui de votre dossier à vous.
#!/usr/bin/ env python
# -*- coding: utf-8 -*-
# importe la bibliothèque Pygame
import pygame
from pygame.locals import *
from sys import exit
import os.path
# indique le chemin des images
chemin = '/home/user/programmes_maternelles/'
# définit les images choisies pour l'arrière-plan et la souris sans le chemin de leur dossier
nom_image_arriereplan = 'arriereplan.png'
nom_image_arriereplan_cote = 'arriereplan_cote.png'
nom_image_arriereplan_cote2 = 'arriereplan_cote2.png'
nom_image_arriereplan1 = 'arriereplan1.png'
nom_image_arriereplan2 = 'arriereplan2.png'
nom_image_victoire = 'tux_victoire.png'
nom_image_defaite = 'tux_defaite.png'
nom_image_souris1 = 'miks_static.png'
nom_image_souris2 = 'miks_smackup2.png'
nom_image_souris3 = 'miks_roll2.png'
nom_image_souris1b = 'miks_walk2.png'
# définit les images choisies pour l'arrière-plan et la souris avec le chemin du dossier
image_arriereplan = chemin + nom_image_arriereplan
image_arriereplan_cote = chemin + nom_image_arriereplan_cote
image_arriereplan_cote2 = chemin + nom_image_arriereplan_cote2
image_arriereplan1 = chemin + nom_image_arriereplan1
image_arriereplan2 = chemin + nom_image_arriereplan2
image_victoire = chemin + nom_image_victoire
image_defaite = chemin + nom_image_defaite
image_souris1 = chemin + nom_image_souris1
image_souris2 = chemin + nom_image_souris2
image_souris3 = chemin + nom_image_souris3
image_souris1b = chemin + nom_image_souris1b
# appelle la fonction horloge et le temps
clock = pygame.time.Clock()
temps = pygame.time.get_ticks()
temps2 = clock.get_time()
#initialise pygame
pygame.init()
# initialise les variables
i = 0
k = 0
score = 0
# définit la taille de la fenêtre
screen = pygame.display.set_mode((800, 472), 0, 32)
# donne le titre de la fenêtre
pygame.display.set_caption("Miks aime le bleu")
# charge les images
arriereplan = pygame.image.load(image_arriereplan).convert()
arriereplan_cote = pygame.image.load(image_arriereplan_cote).convert()
arriereplan_cote2 = pygame.image.load(image_arriereplan_cote2).convert_alpha()
arriereplan1 = pygame.image.load(image_arriereplan1).convert()
arriereplan2 = pygame.image.load(image_arriereplan2).convert()
victoire = pygame.image.load(image_victoire).convert()
defaite = pygame.image.load(image_defaite).convert()
souris1 = pygame.image.load(image_souris1).convert_alpha()
souris2 = pygame.image.load(image_souris2).convert_alpha()
souris3 = pygame.image.load(image_souris3).convert_alpha()
souris1b = pygame.image.load(image_souris1b).convert_alpha()
# récupère la largeur et la hauteur de l'image d'arrière-plan
largeur_arriereplan = arriereplan.get_width()
hauteur_arriereplan = arriereplan.get_height()
# divise et réduit la largeur et la hauteur d'arrière-plan
width = largeur_arriereplan/2-18
height = hauteur_arriereplan/2-12
# crée les vignettes de la page accueil
arriereplan1p = pygame.transform.scale(arriereplan1, (width, height))
arriereplan2p = pygame.transform.scale(arriereplan2, (width, height))
# définit les couleurs
bleu = (50, 100, 255, 255)
rouge = (255, 0, 0, 255)
vert = (0, 255, 0)
jaune = (255, 255, 0)
blanc = (255, 255, 255)
orange = (255, 128, 0)
# indique les scores maximums et minimums
score_max = 3000
score_min = -3000
# fonction d'affichage de la souris suivant la couleur de l'arrière-plan
def rendu_miks():
""" si la couleur est bleue, change k et donc l'image de la souris """
if couleur_ecran != bleu and couleur_ecran != rouge:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 3
pygame.time.wait(100)
if couleur_ecran == bleu:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 1
pygame.time.wait(200)
elif couleur_ecran == rouge:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 2
pygame.time.wait(200)
""" affiche l'image de la souris """
screen.blit(souris_x[k], (x,y))
def imprime_texte(texte,x_texte):
""" affiche du texte à l'écran avec la police et la couleur choisie """
ma_police = pygame.font.SysFont("arial", 100)
surface_texte = ma_police.render(texte, True, vert)
screen.blit(surface_texte, (x_texte, height+(height/2)))
def accueil_jeu():
""" Définit les dimensions du rectangle de la page d'accueil """
Rect = (6, 16, largeur_arriereplan-12, height+12)
i = 0
""" remplit l'écran de blanc """
screen.fill((255,255,255))
""" crée un rectangle vert """
pygame.draw.rect(screen, vert, Rect, 0)
""" affiche successivement la première vignette et la deuxième sur la page d'accueil """
screen.blit(arriereplan1p, (10, 20))
screen.blit(arriereplan2p, ((width+24), 20))
""" affiche l'image de la souris """
k = 0
screen.blit(souris_x[k], (x,y))
def verifie_score():
""" affiche le score réel puis le temps dans la console """
print score
print temps
""" affiche le nombre de nounours correspondant au score affiché """
if score2 == 0:
screen.blit(souris_x[0], ((largeur_arriereplan+30), 20))
if score2 < 0:
for s in range(0,3):
if score2 < -s:
screen.blit(souris_x[2], ((largeur_arriereplan+30), (20+s*80)))
for s in range(0,3):
if score2 < -(s+3):
screen.blit(souris_x[2], ((largeur_arriereplan+130), (20+s*80)))
if score2 > 0:
for s in range(0,3):
if score2 > s:
screen.blit(souris_x[1], ((largeur_arriereplan+30), (20+s*80)))
for s in range(0,3):
if score2 > (s+3):
screen.blit(souris_x[1], ((largeur_arriereplan+130), (20+s*80)))
while True:
# pour fermer la fenêtre
for event in pygame.event.get():
if event.type == QUIT:
exit()
# inscrémente le temps depuis le début du jeu
temps += 1
# récupère les touches pressées
touche_pressee = pygame.key.get_pressed()
#tableau des images pour l'arrière-plan
arriereplan_x = [arriereplan, arriereplan1, arriereplan2]
screen.blit(arriereplan_cote, (608, 0))
# choisit l'image d'arrière-plan selon la touche
if touche_pressee[K_KP1]:
i = 1
elif touche_pressee[K_KP2]:
i = 2
elif touche_pressee[K_KP0]:
i = 0
# affiche l'arrière-plan en fonction de la touche pressée, connue grâce à la variable i
screen.blit(arriereplan_x[i], (0, 0))
# définit la position de la souris
x, y = pygame.mouse.get_pos()
# échantillonne la couleur que survole la souris
couleur_ecran = screen.get_at((x, y))
# tableau des images utilisées pour la souris
souris_x = [souris1, souris2, souris3, souris1b]
# Place le curseur de la souris au centre de l'image
x-= souris_x[k].get_width() / 2
y-= souris_x[k].get_height() / 2
# Si on presse la touche 0
if i == 0:
# appelle la fonction qui affiche la page d'accueil
accueil_jeu()
# affiche les chiffres 1 puis 2 grâce à al fonction d'affichage de texte
imprime_texte("1", width-(width/2))
imprime_texte("2", width+(width/2))
# si la touche 1 ou la touche 2 sont pressés
elif i == 1 or i == 2:
# divise le score par 500 pour des chiffres plus petits et un changement moins rapide
score2 = score/10
# si la couleur est bleue, on ajoute 1 au score
if couleur_ecran == bleu and score2 < 6:
score +=1
# si la couleur est rouge, on ote 1 au score
if couleur_ecran == rouge and score2 > -6:
score -=1
# appelle la fonction d'affichage l'image de la souris
rendu_miks()
# appelle la fonction de vérification du score
verifie_score()
# transforme le chiffre du petit score en texte à afficher
texte_score = str(score2)
# affiche le petit score sur l'écran grâce à la fonction d'affichage de texte
if score2 >= -6 and score2 <=6:
imprime_texte(texte_score,(largeur_arriereplan + 40))
# si le score dépasse le maximum et que la partie jaune est atteinte, affiche l'image de la victoire
if score2 >= 6 and couleur_ecran == jaune:
screen.blit(victoire, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
score += 3000
if score > 3000:
screen.blit(victoire, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
# si le score est inférieur au minimum, affiche l'image de la défaite
if score2 <= -6:
score -=10000
screen.blit(defaite, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
# réactualise l'affichage
pygame.display.flip()
La ruse que j'ai trouvée, c'est d'augmenter ou de réduire drastiquement la variable score pour que le jeu s'interrompe suffisamment longtemps après l'affichage de tux_victoire.png (appelé à la fois par un score supérieur à 6 et par la couleur jaune) et de tux_defaite.png (appelé par un score inférieur à -6)
Ça ne me permet pas de revenir à l'accueil, je n'y suis pas parvenue avec pygame.time.wait qui bloquait un moment le nounours sur le jaune avant d'afficher l'image de la victoire et non après comme je m'y attendais.
A noter qu'il est indispensable que seul le lieu d'arrivée contienne du jaune dans les images d'arrière-plan.
Dernière modification par doudoulolita (Le 16/05/2011, à 19:25)
Hors ligne
#77 Le 16/05/2011, à 20:44
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Le code ci-dessus a été réalisé sous Linux. J'ai réussi à ouvrir le programme également sous Windows7 en changeant bien sûr le chemin. La ruse est que les \ doivent être remplacés par des / dans le chemin du fichier, et il ne faut pas oublier le dernier / à la fin du chemin.
Exemple :
C:/Users/nom_user/Documents/programmation/programmes_maternelles/
Ca c'est pas trop simple à faire pour des gamins de maternelles mais ils ont bien des parents, non ?
Dans les propriétés de mon fichier, j'ai bien précisé qu'il devait s'ouvrir avec python, comme ça un double-clic suffit pour l'ouvrir.
J'ai ensuite créé un raccourci sur le bureau. J'ai créé une icône au format carré pour mon raccourci avec Gimp (enregistrement en .ico) C'est super !
Manquerait plus que j'arrive à créer un .exe ne nécessitant pas l'installation préalable de python et pygame et ça ferait un petit jeu rigolo à proposer sur mon site nounours.
Evidemment, il serait très intéressant de pouvoir charger un fichier de Tuxpaint sans avoir à le renommer et en tout cas de ne pas avoir besoin de changer le chemin du dossier, mais je n'en suis pas encore là.
Je pense par contre déjà à concocter une version avec plus d'arrière-plans et peut-être un truc où les éléments rouges bougeraient aléatoirement ou selon un chemin déterminé.
En tout cas, j'ai réussi un vrai jeu avec un objectif à atteindre pour gagner. Même s'il est très simple et pas forcément codé très correctement, je suis assez fière de moi !
Dernière modification par doudoulolita (Le 16/05/2011, à 20:48)
Hors ligne
#78 Le 16/05/2011, à 21:21
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
bravo
(bon, le code, je t'avoue que j'ai pas le courage de tout passer en revue pour te dire comment il aurait fallu faire mais après tout, c'est le résultat qui compte )
sinon, pour créer un installeur pour ton jeu, tu peux t'inspirer de la procédure que j'ai pour faire une release d'usf pour windows… http://usf.tuxfamily.org/wiki/Make_a_release#Windows
Dernière modification par tshirtman (Le 16/05/2011, à 21:22)
Hors ligne
#79 Le 16/05/2011, à 23:36
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Encore une amélioration: le répertoire du jeu doit contenir un sous-dossier data. On y place les images d'arrière-plan venant de Tuxpaint sans les renommer (penser à faire un raccourci vers le répertoire de sauvegarde des images de Tuxpaint, les enfants ou les parents n'auront qu'à les glisser d'un dossier à l'autre) .
note: Il faut auparavant supprimer du dossier global les images arriereplan1.png et arriereplan2.png utilisées dans le code précédent ou tout bêtement les déplacer dans le dossier data.
Ce code permet de récupérer le nom des images, quel qu'il soit contenues dans le dossier data (minimum 2 images sinon je ne garantis rien !). Je l'ai d'abord testé dans un fichier à part, je souhaitais faire un 'import' mais ça n'a pas marché. Il faut sans doute veiller à ce que les noms de fichier ne comportent pas d'espace, mais dans Tuxpaint, il n'y en a pas.
data_file = 'data/'
print data_file
currentPath = chemin+data_file
dirFiles = os.listdir(currentPath)
numFiles = len(dirFiles)
print numFiles
print dirFiles[0]
print dirFiles[1]
# nom des images contenues dans le dossier data
image1 = dirFiles[0]
image2 = dirFiles[1]
print image1
print image2
Il suffit d'indiquer au programme que ce sont ces images là qu'on veut comme arriere-plan grâce à:
nom_image_arriereplan1 = image1
nom_image_arriereplan2 = image2
On pense aussi à indiquer qu'elles sont dans le dossier data:
image_arriereplan1 = chemin + data_file + nom_image_arriereplan1
image_arriereplan2 = chemin + data_file + nom_image_arriereplan2
Ce qui donne au total (ne pas oublier de changer le chemin du dossier global):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# importe la bibliothèque Pygame
import pygame
from pygame.locals import *
import os
import sys
# indique le chemin du dossier
chemin = 'C:/Users/nom_user/Documents/programmation/04c_programmes_maternelles/'
# chemin des images personnelles
data_file = 'data/'
print data_file
currentPath = chemin+data_file
dirFiles = os.listdir(currentPath)
numFiles = len(dirFiles)
print numFiles
print dirFiles[0]
print dirFiles[1]
# nom des images contenues dans le dossier data
image1 = dirFiles[0]
image2 = dirFiles[1]
print image1
print image2
# définit les images choisies pour l'arrière-plan et la souris sans le chemin de leur dossier
nom_image_arriereplan = 'arriereplan.png'
nom_image_arriereplan_cote = 'arriereplan_cote.png'
nom_image_arriereplan_cote2 = 'arriereplan_cote2.png'
nom_image_arriereplan1 = image1
nom_image_arriereplan2 = image2
nom_image_victoire = 'tux_victoire.png'
nom_image_defaite = 'tux_defaite.png'
nom_image_souris1 = 'miks_static.png'
nom_image_souris2 = 'miks_smackup2.png'
nom_image_souris3 = 'miks_roll2.png'
nom_image_souris1b = 'miks_walk2.png'
# définit les images choisies pour l'arrière-plan et la souris avec le chemin du dossier
image_arriereplan = chemin + nom_image_arriereplan
image_arriereplan_cote = chemin + nom_image_arriereplan_cote
image_arriereplan_cote2 = chemin + nom_image_arriereplan_cote2
image_arriereplan1 = chemin + data_file + nom_image_arriereplan1
image_arriereplan2 = chemin + data_file + nom_image_arriereplan2
image_victoire = chemin + nom_image_victoire
image_defaite = chemin + nom_image_defaite
image_souris1 = chemin + nom_image_souris1
image_souris2 = chemin + nom_image_souris2
image_souris3 = chemin + nom_image_souris3
image_souris1b = chemin + nom_image_souris1b
# appelle la fonction horloge et le temps
clock = pygame.time.Clock()
temps = pygame.time.get_ticks()
temps2 = clock.get_time()
#initialise pygame
pygame.init()
# initialise les variables
i = 0
k = 0
score = 0
# définit la taille de la fenêtre
screen = pygame.display.set_mode((800, 472), 0, 32)
# donne le titre de la fenêtre
pygame.display.set_caption("Miks aime le bleu")
# charge les images
arriereplan = pygame.image.load(image_arriereplan).convert()
arriereplan_cote = pygame.image.load(image_arriereplan_cote).convert()
arriereplan_cote2 = pygame.image.load(image_arriereplan_cote2).convert_alpha()
arriereplan1 = pygame.image.load(image_arriereplan1).convert()
arriereplan2 = pygame.image.load(image_arriereplan2).convert()
victoire = pygame.image.load(image_victoire).convert()
defaite = pygame.image.load(image_defaite).convert()
souris1 = pygame.image.load(image_souris1).convert_alpha()
souris2 = pygame.image.load(image_souris2).convert_alpha()
souris3 = pygame.image.load(image_souris3).convert_alpha()
souris1b = pygame.image.load(image_souris1b).convert_alpha()
# récupère la largeur et la hauteur de l'image d'arrière-plan
largeur_arriereplan = arriereplan.get_width()
hauteur_arriereplan = arriereplan.get_height()
# divise et réduit la largeur et la hauteur d'arrière-plan
width = largeur_arriereplan/2-18
height = hauteur_arriereplan/2-12
# crée les vignettes de la page accueil
arriereplan1p = pygame.transform.scale(arriereplan1, (width, height))
arriereplan2p = pygame.transform.scale(arriereplan2, (width, height))
# définit les couleurs
bleu = (50, 100, 255, 255)
rouge = (255, 0, 0, 255)
vert = (0, 255, 0)
jaune = (255, 255, 0)
blanc = (255, 255, 255)
orange = (255, 128, 0)
# indique les scores maximums et minimums
score_max = 3000
score_min = -3000
# fonction d'affichage de la souris suivant la couleur de l'arrière-plan
def rendu_miks():
""" si la couleur est bleue, change k et donc l'image de la souris """
if couleur_ecran != bleu and couleur_ecran != rouge:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 3
pygame.time.wait(100)
if couleur_ecran == bleu:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 1
pygame.time.wait(200)
elif couleur_ecran == rouge:
if temps%2 == 0:
k = 0
pygame.time.wait(100)
else:
k = 2
pygame.time.wait(200)
""" affiche l'image de la souris """
screen.blit(souris_x[k], (x,y))
def imprime_texte(texte,x_texte):
""" affiche du texte à l'écran avec la police et la couleur choisie """
ma_police = pygame.font.SysFont("arial", 100)
surface_texte = ma_police.render(texte, True, vert)
screen.blit(surface_texte, (x_texte, height+(height/2)))
def accueil_jeu():
""" Définit les dimensions du rectangle de la page d'accueil """
Rect = (6, 16, largeur_arriereplan-12, height+12)
i = 0
""" remplit l'écran de blanc """
screen.fill((255,255,255))
""" crée un rectangle vert """
pygame.draw.rect(screen, vert, Rect, 0)
""" affiche successivement la première vignette et la deuxième sur la page d'accueil """
screen.blit(arriereplan1p, (10, 20))
screen.blit(arriereplan2p, ((width+24), 20))
""" affiche l'image de la souris """
k = 0
screen.blit(souris_x[k], (x,y))
def verifie_score():
""" affiche le score réel puis le temps dans la console """
print score
print temps
""" affiche le nombre de nounours correspondant au score affiché """
if score2 == 0:
screen.blit(souris_x[0], ((largeur_arriereplan+30), 20))
if score2 < 0:
for s in range(0,3):
if score2 < -s:
screen.blit(souris_x[2], ((largeur_arriereplan+30), (20+s*80)))
for s in range(0,3):
if score2 < -(s+3):
screen.blit(souris_x[2], ((largeur_arriereplan+130), (20+s*80)))
if score2 > 0:
for s in range(0,3):
if score2 > s:
screen.blit(souris_x[1], ((largeur_arriereplan+30), (20+s*80)))
for s in range(0,3):
if score2 > (s+3):
screen.blit(souris_x[1], ((largeur_arriereplan+130), (20+s*80)))
while True:
# pour fermer la fenêtre
for event in pygame.event.get():
if event.type == QUIT:
exit()
# inscrémente le temps depuis le début du jeu
temps += 1
# récupère les touches pressées
touche_pressee = pygame.key.get_pressed()
#tableau des images pour l'arrière-plan
arriereplan_x = [arriereplan, arriereplan1, arriereplan2]
screen.blit(arriereplan_cote, (608, 0))
# choisit l'image d'arrière-plan selon la touche
if touche_pressee[K_KP1]:
i = 1
elif touche_pressee[K_KP2]:
i = 2
elif touche_pressee[K_KP0]:
i = 0
# affiche l'arrière-plan en fonction de la touche pressée, connue grâce à la variable i
screen.blit(arriereplan_x[i], (0, 0))
# définit la position de la souris
x, y = pygame.mouse.get_pos()
# échantillonne la couleur que survole la souris
couleur_ecran = screen.get_at((x, y))
# tableau des images utilisées pour la souris
souris_x = [souris1, souris2, souris3, souris1b]
# Place le curseur de la souris au centre de l'image
x-= souris_x[k].get_width() / 2
y-= souris_x[k].get_height() / 2
# Si on presse la touche 0
if i == 0:
# appelle la fonction qui affiche la page d'accueil
accueil_jeu()
# affiche les chiffres 1 puis 2 grâce à al fonction d'affichage de texte
imprime_texte("1", width-(width/2))
imprime_texte("2", width+(width/2))
# si la touche 1 ou la touche 2 sont pressés
elif i == 1 or i == 2:
# divise le score par 500 pour des chiffres plus petits et un changement moins rapide
score2 = score/10
# si la couleur est bleue, on ajoute 1 au score
if couleur_ecran == bleu and score2 < 6:
score +=1
# si la couleur est rouge, on ote 1 au score
if couleur_ecran == rouge and score2 > -6:
score -=1
# appelle la fonction d'affichage l'image de la souris
rendu_miks()
# appelle la fonction de vérification du score
verifie_score()
# transforme le chiffre du petit score en texte à afficher
texte_score = str(score2)
# affiche le petit score sur l'écran grâce à la fonction d'affichage de texte
if score2 >= -6 and score2 <=6:
imprime_texte(texte_score,(largeur_arriereplan + 40))
# si le score dépasse le maximum et que la partie jaune est atteinte, affiche l'image de la victoire
if score2 >= 6 and couleur_ecran == jaune:
screen.blit(victoire, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
score += 3000
if score > 3000:
screen.blit(victoire, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
# si le score est inférieur au minimum, affiche l'image de la défaite
if score2 <= -6:
score -=10000
screen.blit(defaite, (0, 0))
screen.blit(arriereplan_cote2, (608, 0))
# réactualise l'affichage
pygame.display.flip()
De mieux en mieux, non ?
Dernière modification par doudoulolita (Le 23/05/2011, à 11:08)
Hors ligne
#80 Le 17/05/2011, à 10:14
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Essai du programme sur Linux (Ubuntu 10.04):
En partant de la console, le jeu se lance correctement. Pour le raccourci sur le bureau par contre, il ne se passe rien quand je double clique dessus. Voici ce que j'obtiens en contrôlant via la console:
epn13@epn13-desktop:~$ Bureau/miks_tuxpaint.desktop
Bureau/miks_tuxpaint.desktop: line 2: [Desktop : commande introuvable
Bureau/miks_tuxpaint.desktop: /home/epn13/01-laurence/programmation/04c_programmes_maternelles/13c_miks_tuxpaint.py : /usr/bin/ : mauvais interpréteur: Permission non accordée
Pourtant, j'ai bien rendu le fichier exécutable.
Mes programmes précédents ne posaient pas ce type de problème quand j'utilisais un lanceur sur le Bureau.
Dernière modification par doudoulolita (Le 17/05/2011, à 10:15)
Hors ligne
#81 Le 17/05/2011, à 10:29
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
hum, non un fichier .desktop ne se lance pas comme ça en commande, il faut lancer la commande qui est dedans, (la ligne "exec")
edit, il est possible que la première ligne de ton script ne soit pas correcte:
#!/usr/bin/env python
pour un script python
#!/usr/bin/env sh
pour un script shell.
Dernière modification par tshirtman (Le 17/05/2011, à 10:30)
Hors ligne
#82 Le 23/05/2011, à 10:36
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Cette correction ne donnait rien mais j'ai trouvé le problème et sa solution:
currentPath = chemin+data_file
En fait, le chemin des images du dossier data n'était pas accessible puisque c'était le chemin relatif et non le chemin absolu.
J'ai fait la correction dans le post où j'ai mis tout le programme.
Ce qui pose encore problème avant de faire un .deb ou un .exe, c'est tout de même ce chemin, qu'on doit changer en fonction de son ordi, et ça c'est pas cool pour des débutants.
J'ai trouvé ces pages mais je n'y comprends goutte: en anglais http://docs.python.org/library/os.path.html et en français: http://diveintopython.adrahon.org/funct … _path.html
A mon avis, tout se passe ici mais il va falloir que je teste plus avant pour bien piger.
import os
>>> os.getcwd()
/home/you
>>> os.path.abspath('')
/home/you
Hors ligne
#83 Le 23/05/2011, à 11:05
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
En fait, le même problème qu'avant se pose. Quand j'utilise ça, cela marche dans la console:
chemin = os.getcwd() + '/'
ou
chemin = os.path.abspath('')+'/'
Par contre, je n'arrive pas à lancer avec le lanceur sur le bureau (sous ubuntu)
Dernière modification par doudoulolita (Le 23/05/2011, à 11:09)
Hors ligne
#84 Le 23/05/2011, à 11:07
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
La solution semble de chercher d'abord le chemin du fichier, puis d'en ôter le nom du fichier pour obtenir le chemin du répertoire. Ici, le test est fait sous Linux.
# indique le chemin du dossier
chemin = '/home/user/programmation/04c_programmes_maternelles/'
est remplacé par
# indique le chemin du dossier
chemin_fichier = sys.argv[0]
chemin1 = os.path.abspath(chemin_fichier)
chemin = os.path.dirname(chemin1) + '/'
print chemin
Je rappelle que je me suis inspirée de http://diveintopython.adrahon.org/funct … _path.html pour trouver ça. Il faut rendre à César ce qui est à César !
Dernière modification par doudoulolita (Le 23/05/2011, à 11:15)
Hors ligne
#85 Le 23/05/2011, à 11:15
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
J'ai eu des soucis de ce genre dans USF aussi, d'où la création d'un fichier de config, la détection de si on est une version installée ou non du jeu, et pas mal d'autres détails, c'est un vrai problême... après quand tu package, tu maitrises ou vont être les données (/usr/share/games/ton_jeu la plupart du temps) et donc tu peut gérer ça en dur, mais construire quelque chose qui marche dans plusieurs situations est assez problématique.
Donc il est normal que tu butte sur ce problème
Hors ligne
#86 Le 26/05/2011, à 14:04
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Pour la création de setup.py et pour faire une archive de mon jeu pour Linux, j'essaie ce qui est marqué là: http://docs.python.org/distutils/introd … le-example
Ca paraît plus simple que l'autre qui est en lien sur la page.
Hors ligne
#87 Le 26/05/2011, à 14:26
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Pour simplifier, J'ai changé le nom de mon jeu en miks_game (pour le dossier comme pour miks_game.py)
Voici le contenu de setup.py que j'ai créé dans le dossier du jeu:
#!/usr/bin/env python
from distutils.core import setup
setup(name='miks_game',
version='1.0',
py_modules=['miks_game'],
)
Après, je suis la procédure:
python setup.py sdist
cela me donne:
epn13@epn13-desktop:~/01-laurence/programmation/miks_game$ python setup.py sdistrunning sdist
warning: sdist: missing required meta-data: url
warning: sdist: missing meta-data: either (author and author_email) or (maintainer and maintainer_email) must be supplied
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating miks_game-1.0
making hard links in miks_game-1.0...
hard linking miks_game.py -> miks_game-1.0
hard linking setup.py -> miks_game-1.0
creating dist
tar -cf dist/miks_game-1.0.tar miks_game-1.0
gzip -f9 dist/miks_game-1.0.tar
removing 'miks_game-1.0' (and everything under it)
J'obtiens bien l'archive miks_game-1.0.tar.gz, elle est contenue dans un répertoire dist.
Je place l'archive sur le bureau et je la décompresse. Je me mets dans la peau d'un usager qui veut installer le jeu.
python setup.py install
Je n'ai pas eu le temps de copier ce que me donne la console mais ça a l'air de fonctionner. J'ai un répertoire build qui s'est installé dans le répertoire du jeu.
Le problème, c'est que je ne parviens pas à faire démarrer le jeu avec ça ! Si je double-clic sur setup.py ou sur miks_game.py, ça les ouvre dans gedit.
Peut-être aurais-je dû utiliser l'autre méthode plus complexe...
Dernière modification par doudoulolita (Le 26/05/2011, à 15:05)
Hors ligne
#88 Le 26/05/2011, à 14:35
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Ensuite, j'ai essayé de faire un .deb avec ta méthode mais ça ne marche pas:
root@epn13-desktop:~/Bureau/miks_game-1.0# python setup.py --command-packages=stdeb.command bdist_deb
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
error: invalid command 'bdist_deb'
J'ai tout recommencé et avant de faire ta commande, j'ai installé python-distutils-extra, python-setuptools et python-stdeb.
je ne sais pas lequel a marché mais ça s'est mis à bouger dans le terminal !
Le problème est que dans mon dossier miks_game, il y a un dossier deb_dist avec plein de trucs dedans mais pas de .deb et la console me dit qu'il manque debhelper.
Dernière modification par doudoulolita (Le 26/05/2011, à 15:28)
Hors ligne
#89 Le 26/05/2011, à 15:24
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
il faut installer le paquet python-stdeb sinon ça marchera pas…
sinon je pense que tes fichiers python n'ont pas les droits d'execution, tu veux plutot enregistrer un lancer (.desktop) dans le dossier, et dire à ton installeur de le mettre dans /user/share/applications
Hors ligne
#90 Le 26/05/2011, à 15:36
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
avec python-stdeb + debhelper, ça a l'air marcher, cette fois !
J'ai un python-miksgame_1.0-1_all.deb dans le dossier deb_dist et quand je le lance avec gdebi, il ne fait pas la tête...
Par contre je ne trouve pas miks_game dans le menu Applications alors je vais redémarrer pour voir.
A noter que j'avais préalablement coché autoriser l'execution du fichier comme programme dans les propriétés de setup.py mais pas de miks_game.py.
Je recommence tout avant de redémarrer !
Dernière modification par doudoulolita (Le 26/05/2011, à 15:46)
Hors ligne
#91 Le 26/05/2011, à 16:01
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
J'ai bien tout recommencé, j'ai mon .deb dans deb_dist et quand je double-clique dessus, ça lance gdebi sans soucis.
gdebi me dit que c'est installé et je le retrouve sous le nom python-miksgame dans Synaptic.
Par contre, impossible de le trouver dans les menus ni de le lancer avec le terminal, même après un redémarrage.
Ce soir, j'uploaderai tout ça sur mon serveur pour que tu puisses jeter un oeil.
Hors ligne
#92 Le 26/05/2011, à 16:05
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Je viens de regarder l'archive miks_game-1.0.tar.gz crée initialement et en fait elle ne contient pas les images !
Je pense que je dois reprendre l'explication complexe pour refaire tout ça.
Hors ligne
#93 Le 26/05/2011, à 16:10
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
il y a des parametres data et autres pour envoyer des données… le setup.py d'usf est un peu complexe, mais il fait tout ça…
Hors ligne
#94 Le 26/05/2011, à 16:32
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Je vais tenter avec quelque chose comme ça pour setup.py mais j'ai un peu peur du plantage...
#!/usr/bin/env python
from distutils.core import setup
setup(name='miks_game',
version='1.0',
description='game for kids',
author='Doudoulolita',
py_modules=['miks_game'],
data_files=[('miks_game', ['arriereplan.png', 'arriereplan_cote.png', 'arriereplan_cote2.png', 'miks_roll2.png', 'miks_smackup2.png', 'miks_static.png', 'miks_walk2.png', 'tux_defaite.png', 'tux_victoire.png']),
(item[0], item[1]) for item in files('data')]
)
Hors ligne
#95 Le 26/05/2011, à 17:07
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Effectivement, ça plante et même si je vire (item[0], item[1]) for item in files('data'), je n'arrive pas à incorporer les autres images dans l'archive avec python setup.py sdist
Hors ligne
#96 Le 27/05/2011, à 11:15
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Même si je n'ai pas terminé, je n'ai pas résisté à présenter mon jeu miks_game (sans setup.py) sur mon blog nounours :
Dernière modification par doudoulolita (Le 24/06/2011, à 06:54)
Hors ligne
#97 Le 27/05/2011, à 13:43
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Voici maintenant mon setup.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
setup(name='miks_game',
version='1.0',
description='game for kids',
author='Doudoulolita',
author_email='doudou-lolita@hotmail.fr',
url='http://oursement-votre.com/document/',
py_modules=['miks_game'],
)
Pour inclure les images, il semble qu'il faille créer un autre fichier nommé MANIFEST.in:
include *.png
include *.py
include data/*.png
Si je fais python setup.py sdist dans la console (de préférence pas en root), j'obtiens bien une archive qui contient toutes mes images et le dossier data. Ca progresse !
Si je le teste avec une installation, je le retrouve dans synaptic mais je ne parviens pas à le lancer avec la console. Il me dit que cette commande n'existe pas.
Dernière modification par doudoulolita (Le 27/05/2011, à 14:08)
Hors ligne
#98 Le 27/05/2011, à 14:51
- tshirtman
Re : Faire une animation sur la création de jeux vidéo libres
Hey, je viens d'aller voir, le résultat est pas mal quand même et bonne utilisation d'open game art
Bon, sur le code, tu fera mieux plus tard, c'est pas si dramatique que ce à quoi je m'attendais, je pense que je faisait pas mieux dans mes premières années de dev ^^
Hors ligne
#99 Le 28/05/2011, à 11:57
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Je pense que si j'ai relativement bien réussi mon petit jeu, c'est grâce à ton aide ( en plus de mon intelligence supérieure )
Ce qui est bien, c'est que tu ne me donnes pas la solution toute cuite mais des indices qui me permettent d'avancer, ou des corrections pour mes erreurs.
Je pense que ce mode d'apprentissage via un forum est très pratique car les tutoriels sont parfois très éloignés des problématiques auxquelles on est confrontés ou trop complexes.
Cela ne marche cependant que si on tombe sur quelqu'un comme toi qui sait s'adapter à son interlocuteur et qui ne fait pas à ma place. En fait, tu m'incites à trouver par moi-même comment faire, ce qui veut dire que tu es un très bon prof de programmation !
Je regrette que ce post ne soit pas plus fréquenté mais d'un autre côté, trop d'interlocuteurs peut parfois être problématique. Sur le post d'USF, je ne ressens pas trop ce souci car chacun s'occupe de son truc tout en aidant les autres mais sur d'autres forums, j'ai du mal à obtenir des réponses claires, parfois.
Là où c'est embêtant pour les jeunes dont je m'occupe à mon boulot et qui aimeraient créer des jeux vidéos, c'est que beaucoup de tutos sont en anglais et qu'ils ne le maîtrisent pas tous (ou pas suffisamment). Mais bon, s'ils en veulent vraiment, ils peuvent aussi apprendre l'anglais !
Dernière modification par doudoulolita (Le 28/05/2011, à 11:59)
Hors ligne
#100 Le 29/05/2011, à 11:48
- doudoulolita
Re : Faire une animation sur la création de jeux vidéo libres
Ce niveau pour Ultimate Smash Friends a été réalisé par Abdellah, un des jeunes qui vient à mon travail jouer en accès libre.
Il l'a nommé Papone.
Il est un des seuls du groupe des 10/15 ans qui avait envie de dessiner, je l'ai donc pris individuellement pendant que les autres jouaient. Je lui ai montré Inkscape et très rapidement l'outil Courbes de Béziers mais celui-ci ne l'intéressait pas car il le trouvait trop compliqué. Il a préféré s'entraîner avec les rectangles, les cubes et les spirales.
Je lui ai montré rapidement le principe des calques et il a voulu ajouter un personnage à son décor, ce qui manquait un peu de logique mais bon, il ne fait pas brimer la créativité !
Il l'a réalisé de lui-même avec l'outil de tracé Calligraphique, qui lui a beaucoup plu.
J'ai d'abord nettoyé un peu ce qui me semblait en trop et replacé un peu les plate-formes (sinon, les personnages tombaient à leur arrivée dans le jeu ).
Ensuite, j'ai vite fait pour lui un fichier xml afin qu'il puisse voir le niveau dans le jeu assez rapidement. C'est réalisé avec un simple éditeur de texte et le fichier est enregistré sous le nom level.xml.
Dans le fichier xml, on donne d'abord le nom du niveau, puis celui des 3 images utilisées (voir l'album)
Il n'y a que 3 plate-formes, nommées block dans le xml. Leurs coordonnées sont d'abord celles du coin supérieur gauche (position x puis position y) puis la taille du block (largeur puis hauteur).
En mettant des guides horizontaux et verticaux dans Gimp et en regardant leur coordonnées dans la barre d'état quand on les déplace, on trouve facilement les coordonnées du coin des blocks. En resélectionnant le rectangle avec l'outil rectangle de sélection de Gimp, on obtient la taille du block dans la barre d'état.
<?xml version="1.0" encoding="UTF-8"?>
<map
name="papone"
background="background.png"
foreground="foreground.png"
middle="middle.png"
margins="250,250,250,250"
>
<block coords="290 211 238 39" ></block>
<block coords="599 400 294 46" ></block>
<block coords="226 584 381 31" ></block>
</map>
Il suffit ensuite de mettre le dossier papone contenant les 4 images foreground.png, middle.png et background.png, screenshot.png + level.xml dans Ultimate-Smash-Friends/data/levels ( C:\Program Files\Ultimate Smash Friends\data\levels sous Windows 7 )
L'idéal serait d'ajouter du mouvement aux cubes, mais cela est un peu trop complexe pour l'instant.
Dernière modification par doudoulolita (Le 29/05/2011, à 12:17)
Hors ligne