Midilibre.fr
Tous les blogs | Alerter le modérateur| Envoyer à un ami | Créer un Blog

13/05/2009

[grabouille] - V0.5 Ca vient de sortir !

grab0.5.jpg

Alors la voila enfin cette version v0.5, aprés un gros creux dans le développement, voici la réécriture complète de Grabouille, un remodelage complet pour pouvoir évoluer vers autre chose... c'est donc une version intermédiaire, avec un nouveau mode de jeux : Tracer. Ou il faut regarder l'apparition de pastille et tracer un trait pour lié les deux points (ce mode en est a ces balbutiements vous excuserez la simplicité.)

Pour ce qui est des ajouts sympathique  : maintenant vous avez deux nouveaux dossiers : mes_grabouilles/images et mes_grabouilles/musiques ou vous pouvez placer vos jpg et vos mp3 pour personnaliser un peu plus le jeux.

Pour ce qui est de l'enregistrement des images, il est maintenant possible de sauvegarder plus d'une image par jour et surtout il y a une conversion en jpg  (plus léger que le bmp)...

Quelques petites innovations par ci par la, mais en préparation plein de noveauté pour la  v0.6 qui devrait sortir rapidement maintenant que la base est stabilisé.

Zzzzzzz m'a également informé d'une page sur ubuntu-fr que je viens de mettre a jour avec les nouvelles options.http://doc.ubuntu-fr.org/grabouille

comme toujours les sources sont la et le deb la

Edit du 16 Mai : Merci à la classe pour sa version Windows : http://velay-pc.nuxit.net/portable/grabouille-0.5-portabl...

(note : les problémes de grésillements au niveau des sons ont également été résolu)

10/05/2009

[grabouille] - Version v0.5 en vue (dites l'Arlésienne)

1.jpg

Enfin, dirons certains... la v0.4 de Grabouille remonte à plusieurs mois. Entre temps beaucoup de changements, beaucoup de nouveautés, et un emploi du temps qui ne m'a pas forcément laissé le temps suffisant pour travailler sereinnement sur le code. D'autant qu'avec cette version je voulait faire plus qu'une évolution : je voulais tout recoder, en effet avec le temps le code était un chateau de carte. J'ai donc tout repris, tout repensé de manière a pouvoir faire évoluer sereinnement mon petit soft. Ne vous attendez donc pas à un changement radical, pour cette version il s'agit d'une étape vers autre chose. Mais que je vous rassure tout de suite, nouveautés il y a ... Christophe (http://www.road2mayotte.org/) m'avait demandé dés la première version la possibilité de mettre un fond musical, il y a maintenant un dossier musiques qui vous permettra de placer les fichiers que vous souhaitez voir votre chérubin écouter pendant sa scéance de grabouillage. Il y avait également en attente les différents retours de François (http://scideralle.org/AbulEduLive-8-04.html) (Amélioration de certains points...) que je remercie pour son interêt pour grabouille. Bref pas de grande révolution mais un petit lot de nouveautés qui en anoncent de plus grand. J'ai déja en tête quelques projets pour faire évoluer Grabouille.

J'oubliais, il y aura un nouveau mode de jeux : Tracer, qui fonctionnera sur le principe des points liés. C'est à dire que des pastilles apparaissent à l'écran dans un certains ordre, il faudra les rejoindre pour retrouver le dessin (un sapin, une etoile...) c'est à destination des un peu plus grand car il faut mémoriser l'ordre d'appartition

J'en profite également pour remercier Stéphane (pas moi, l'autre, celui de laclasse) pour avoir porté grabouille sous windows et ainsi avoir pu mettre grabouille sur la framakey : http://framakey.org/Portables/PortableGrabouille

Voila pour les fonctionnalités de cette v0.5, qui devrait voir le jour sous 2 semaines, il me reste a peaufiner certaines choses, mettre a jour le svn et refaire completement le deb qui apparement ne fonctionnait pas sur toutes les machines.

22/10/2008

[python] - Python débutant : fonctions & conditions - programmer un carnet de téléphone

python_deb.jpgNous avons vu la dernière fois comment débuter en programmation avec Python. Nous avons vu que finalement cela n'était pas si compliqué que cela. Alors du coup aujourd'hui on augmente un petit peu le niveau et nous allons aborder trois nouvelles notions : les fonctions, les conditions et les boucles.
Petites définitions avant de commencer. Une fonction en programmation est un bout de code que l'on peut appeller pour lui faire effectuer un traitement, par exemple si dans votre programme vous retailler une photo, au lieu de remettre 10 fois le même code vous pouvez faire appel à votre fonction qui contiendra le code pour retailler la fonction (il vaut mieux 1 code de 10 lignes appelé des dizainnes des fois plutot que 10 lignes répété des dizainnes de fois), vous économisez des lignes de codes et la lecture en sera simplé. Avec l'usage vous verrez que c'est extremement souple. nous allons le voir de toutes facons avec notre carnet téléphonique.
Concernant les boucles et les conditions, il s'agit en fait de spécifier au programme ce qu'il doit faire, ainsi vous allez pouvoir dire a votre programme "tant qu'il y a des personnes dans le carnet" on affiche leur nom. ou bien "si la demande est ajouter" on fera quelque chose de particulier, en l'occurence appeler la fonction ajouter pour permettre l'ajout de la personne.

Passons à la pratique. Je vous propose de récupérer le fichier source ici.

Récapitulons ce que nous voulons faire : un carnet avec des numéros de téléphone, nous voudrons donc ajouter un numero, effacer un numéro, l'afficher. Et surtout stocker nos informations dans un fichier et pouvoir les lire ultérieurment. En faisant cette démarche de conceptualisation vous avez déja fait 50% du travail puisque vous avez défini la structure du programme, et chacune de ces idées que nous avons énnoncé ci dessous correspondent en fait à la notion de fonction, ainsi vous pouvez en déduire que notre programme aura 5 fonctions.

Rappelez vous, il nous faut faire tout d'abord les bonnes déclarations au début du fichier, voici ce que nous avons :

#!/usr/bin/python
#-*- coding: utf-8 -*-

import sys
import os
fichier = 'fichier_donnee.txt'

Nous déclarons que le programme doit être lancé avec python et avec un encodage utf-8 (par rapport au accent), nous importons sys et os pour pouvoir appeller os.system (qui permettra de nettoyer le terminal) et sys.exit pour sortir du programme. nous déclarons une variable fichier, qui sera le nom du fichier ou nous stockerons les éléments que nous allons saisir. Le fait de placer le nom de la variable tout en haut et en dehors des fonctions permet de définir une variable globale qui sera visible partout, à l'inverse d'une variable locale (déclaré dans une fonction par exemple) qui elle ne sera visible que dans la fonction.

Maintenant prenons le point de départ de notre programme (qui est en fait tout à la fin) :

          if __name__ == "__main__":
os.system('clear')
if os.path.isfile(fichier) == False :
openfile=open(fichier,'w')
openfile.close()
ma_liste_tel = lire_le_fichier()

Premier point nous allons effacer le terminal, pour que cela soit plus propre, pour cela nous appelons la fonction système clear. Puis nous testons l'existence du fichier défini dans la variable fichier. Si il n'existe pas (IF == FALSE) alors nous le créeons avec open. Par contre si il existe alors nous appelons la fonction lire_le_fichier.(nous verrons plus bas comment définir une fonction)

Il est temps de créer notre première boucle. A la ligne 64, vous pouvez voir qu'il y a une while True, ce qui signifie que nous créons une boucle infini, tant que vous ne fermez pas le programme, il continuera à s'exécuter.

Cette boucle consiste a poser toujours la même question: que voulez vous faire ? nous allons donc stocker la variable de retour dans question :
question = raw_input('Que voulez vous faire ? Options : ajouter*nom*tel - effacer nom - afficher nom - sortir > ')

tout ce que voulez allez répondre sera stocké dans question, il ne restera plus qu'à analyser ce que contient question pour effectuer des actions et appeller les bonnes fonctions.

Nous avons 4 actions, la première permettra de marquer ajouter*stephane*235689 (je sépare les éléments * pour pouvoir les stocker et les analyser dans un tableau, cela évite les problèmes lié à l'utilisation d'espaces ou de virgules, .... on a rarement vu un numéro de téléphone avec un *).

Pour tester la variable question nous appelons de nous if, if question == 'sortir': alors nous appelons sys.exit() (notez que pour effectuer une comparaison nous utilisons == et non pas = qui lui affecterait la variable, question vaudrait alors toujours 'sortir')

SINON SI question commence par afficher (elif question.startswith('afficher'): elif veut dire sinon si) alors appelons la fonction affiche_tout(). Le try en début permet de vérifier que tout se passe bien, si il y a une erreur alors c'est ce qui est dans except qui sera appelé. En l'occurence, nous tentons de récupérer un tableau avec split en détectant espaces(ajouter stephane donne un tableau avec deux éléments ajouter et stephane), si il y a une erreur (vous n'avez pas mis de nom) alors except prends le relais et affiche (avec la commande print) qu'il y a une erreur. Nous pouvons alors appeler notre tableau avec aff_nom[1] (comme nous comptons à partir de 0 aff_nom[0] vaut afficher). Il suffit maintenant d'appeler la fonction avec une variable dedans : affiche_numero(aff_nom[1])

Nous faisons pareil avec la fonction effacer et ajouter (qui elle sera découper avec des * pour permettre de taper un numéro de téléphone avec des points des virgules des espaces...) cette derniere appellera une fonction avec deux variables (que nous séparons par des virgules) mais le principe est le même.

Nous avons donc un SI (if) des SINON SI (elif).... et si rien ne se vérifie (cad si vous avez tapez par exemple gbzfzshbfshsf ... ) nous appelons un SINON (else) qui clos la série de test, qui permet d'afficher une phrase qui indique que le programme n'a rien compris : print 'Bravo ! une forte tête ! j'aime ça ! Ce n' est pas une option valable'

Le coeur du programme est crée, il reste a dire au programme ce qu nous allons faire avec nos fonctions. Pour définir une fonction on utilise def le_nom_de_la_fonction(variable1, variable2,....)

Prenons l'appel de fonction affiche_numero(qui): ademettons que vous ayez appellé la fonction comme suis : affiche_numéro('steph') le programme va se rendre au def affiche_numero(qui) et la variable qui prendra alors la valeur de steph. vous pouvez alors utiliser cette variable qui pour lui appliquer un traitement. Notre variable qui est donc stocké, nous la testons. Dans le cas ou le nom est égal à tout alors nous allons lister toutes les entrées définit. Nous appelons un autre type de boucle un FOR, qui reviendrait a dire que tant que des éléments sont fournit alors on recommence. Qui dans notre cas équivaut à "tant que je peut lire mon fichier" je fait quelque chose.

Les fonctions efface_numero() et ajoute_numero() fonctionne sur le même principe, on récupère la variable qui, et on ajoute ou on retire l'entrée. Dans chaque cas nous enregistrons notre fichier, en appelant la fonction ecrire_le_fichier() avec la valeur de la liste ma_liste_tel.

Les fonctions d'écriture dans le fichier sont assez simple. (on ouvre le fichier avec open et tant qu'ils y a des entrées dans notre liste (FOR) alors on écris (write). une fois terminé on ferme proprement le ficheir avec close())

Quand à la fonction de lecture, elle est également facile à comprendre, on ouvre le fichier (on n'oublie pas try pour lever d'éventuelle probleme) avec open, on lit le fichier ligne par ligne (avec un WHILE - qui équivaut a un TANT QUE) et traite la variable ligne.

donnees = ligne[:-1]
On enlève le dernière caractère (qui est un retour à la ligne, on en a pas besoin)

donnees_split = donnees.split('*')
dico[donnees_split[0]]= str(donnees_split[1])

On génére un tableau avec le nom et le tel, on affecte ensutie les variables

ligne = notre_fichier.readline()
on lis la ligne suivante (et on repart dans le while si elle existe, sinon on passe à la suite)

Puis on ferme notre fichier. 92 Lignes de codes plus tard (en comptant les lignes vides c'est dire) vous avez un programme tout à fait fonctionnel et prêt à recevoir vos demandes d'ajout de personne. On peut imaginer augmenter la capacité du programme en ajouter un champs adresse, prénom,... je vous laisse faire, pour voir si vous avez compris.

La prochainne fois nous verrons comment gréffer trés simplement ce que nous venons de créer a une interface graphique.

13/10/2008

[pygtk] - Python débutant rajouter une interface avec Glade

Suite à notre petite mise en jambe de la dernière fois avec python, nous allons maintenant voir comment sortir de l'atmosphère de la ligne de commande pour rajouter une interface graphique à nos petits programmes. Les paquets que vous devez ajouter sont : python-gtk2 (pour l'interface entre python et gtk) et glade pour concevoir facilement des interfaces en mode visuel.
L'objectif d'aujourd'hui sera de faire une conversion euros vers dollars (on reste dans le financier, crise oblige ;-)).
De quoi avons nous besoins ? du taux de change, que nous récupérerons sur http://download.finance.yahoo.com/d/quotes.csv?s=EURUSD=X... qui nous fournira un csv (comma separated value) un fichier séparé par des virgules qui sera trés simple à exploiter.

Première étape la création de l'interface :

pugtk_glade.pngDans glade, créez une nouvelle fenêtre, et ajoutez y un conteneur de type boîte horizontal (avec 3 colonnes).
Dans la colonne de gauche créez une "saisie de texte" (dans Contrôle et affichage) pour laquelle vous donnerez le nom de 'montant_euro'. Au centre rajoutez un "label" dont le texte sera "Euros font en Dollars".

Et dans la colonne de droite, une autre saisie de texte, qui s'appelera "resultat_dollars".

Nous avons notre interface, sauvegardons là dans un dossier, sous le nom de convertisseur.glade

Deuxième étape voici venu le temps de python et de pygtk :

tout d'abord il nous faut faire les imports nécéssaire :

import gtk.glade
import urllib

nous avons bien entendu besoin de gtk.glade pour bénéficier de gtk sous python pour analyser le fichier glade que nous crée.
et nous avons besoins de urllib pour récupérer en ligne le taux de change.

le coeur du programme :

if __name__ == '__main__':

taux = urllib.urlopen('http://download.finance.yahoo.com/d/quotes.csv?s=EURUSD=X&f=sl1d1t1ba&e=.csv')
liste = taux.read().split(',')
app = window1()
gtk.main()

la première ligne est classique, elle demande à python de vérifier si le programme est bien lancé en autonome (et non pas une fonction).
nous stockons le csv dans la variable taux, qui est ensuite lu avec read() et découpé avec split(',') la virgule permet de définir ce qui sépare les éléments dans le fichier.
l'avant dernière ligne premet d'indiquer le nom de notre fenêtre (attention le nom doit correspondre à ce que vous avez mis dans glade)

Concernant la variable liste, elle est structurée de la sorte :

['"EURUSD=X"', '1.3403', '"10/10/2008"', '"5:36pm"', '1.3401', '1.3406rn']

ainsi pour récupérer le taux de change il faudra faire appel au deuxième élément de la liste avec liste[1] (on compte à partir de 0)

La création de classe de notre fenêtre :

class window1:
def __init__(self):

ui = gtk.glade.XML('convertisseur.glade')
self.main_window = ui.get_widget('window1')
self.montant_euro = ui.get_widget('montant_euro')
self.resultat_dollars = ui.get_widget('resultat_dollars')
self.montant_euro.set_text(liste[1])
self.resultat_dollars.set_text("1")
self.main_window.connect('destroy', gtk.main_quit);
self.montant_euro.connect('changed', self.modification_du_dollar);
self.main_window.show_all()

Nous créons donc notre classe, et initialisons les différents éléments avec __init__
le ui.get.widget permet de récupérer les différents éléments crée avec glade et de les stocker dans des variables.
set_text permet de régler le texte dans une zone de saisie, ainsi nous mettons 1 pour nos euros et la variable 1 de la liste récupéré chez yahoo.
le .connect permet d'indiquer ce que nous voulons faire, destroy si un appel de type fermeture sur la main_window. et 'changed' sur montant_euro permet de détecter dés que l'on change le texte et ainsi d'appeler la fonction modification_du_dollar
enfin nous affichons la fenêtre avec .show_all()

La fonction qui fait tout le travail :

def modification_du_dollar(self, widget):

try:

euros = self.montant_euro.get_text()
resultat = float(euros)*float(liste[1])
self.resultat_dollars.set_text(str(resultat))

except:

pass

donc nous avons vu que dés que vous allez modifier le texte dans la zone 'montant_euro' nous appelons la fonction modification_du_dollar, qui est en fait l'endroit ou nous allons faire le calcul par rapport au nouveau prix. Il faut donc récupérer le texte avec get_text() sur montant_euro. la valeur du dollar est dans liste[1] comme nous l'avons vu, il ne reste qu'a stocker la multiplication dans resultat. float (salut reeth) permet de convertir notre texte (string) en chiffre à virgule (flottant float). set_text permet d'affecter le resultat (en le convertissant en texte avec str (pour string)) à resultat_dollars.

Vous remarquerez que j'ai entouré ces trois ligne d'un try et d'un except, je demande en fait a python d'essayer de faire le calcul, si il n'y arrive pas (parceque yahoo n'a pas fournit le csv ou que vous avez tapez du texte dans les zones de saisie) il appelle except, à qui nous demandons de ne rien faire avec pass.

voici le résultat de notre application une fois terminé :

pygtk_convert.png

Vous trouverez l'exemple complet ici.

11/10/2008

[python] - Programmation débutante sous linux

Nous allons nous lancer dans une série qui va apprendre à faire des petits programmes en Python.

Pré-requis - Créons notre fichier :

Grâce à cette série sur la programmation, nous allons également aborder la "console"... sous kde vous pouvez lancez konsole et sous gnome gnome-terminal

Vous vous trouvez devant un terminal qui va nous permettre de donner des ordres à l'ordinateur.

Ce que nous voulons faire :

1- créer un dossier, pour cela vous devez taper mkdir python et valider avec la touche entrée, vous venez de créer un dossier python dans votre dossier utilisateur (qui est l'emplacement par défaut du terminal) mkdir signifie make directory (créer un répertoire), vous pouvez allez voir dans gestionnaire de fichiers graphique il est bien là.

2- nous déplacer dedans, tapez cd python ce qui signifie que vous êtes dans le répertoire python (Change Directory).

3- créer un fichier,nous allons maintenant lancer notre éditeur de texte pour taper le programme. Sous kde, tapez kate bonjour et sous gnome gedit bonjour (vous l'aurez compris bonjour sera le nom de notre programme) une fois cela fait tapez :

#!/usr/bin/python
print "Bonjour"

C'est tout simple, la première ligne indique où se trouve python, elle sera systématiquement présente dans tous vos programmes, et la deuxième indique qu'il faut afficher le mot bonjour.Enregistrez votre programme.

4- le rendre exécutable, de retour dans notre terminal nous allons rendre notre programme exécutable : chmod +x bonjour voilà il ne nous reste plus qu'à lancer notre joli programme ./bonjour (le ./au début indique qu'il faut lancer le fichier bonjour dans le répertoire dans lequel on se trouve)

5- voir le rendu :

e9a80eef16adc6c85e2b9a06d63f787e.png

Notre programme nous dit bonjour, vous avez crée votre premier programme,.Nous allons maintenant rendre le programme plus évolué et plus poli, nous allons faire en sorte qu'il nous demande notre nom, et qu'il nous réponde bonjour "votre nom".

Réeditez votre programme (inutile de tout retaper, utilisez les flèches du clavier vers le haut pour revenir au moment  ou vous avez tapé kate bonjour ou gedit bonjour) et rajoutez les éléments en vert

#!/usr/bin/python
nom = raw_input('Votre nom : ')
print "Bonjour" + nom

lancez votre programme en tapant   ./bonjour et voyez la différence.....

f9b6230bfe02b85b64ca5df2d851a6f5.png
En fait vous avez stocké le nom dans ce qu'on appelle une variable, qui ici s'appelait nom, et nous l'avons appelé au moment de dire bonjour.
Un peu de calcul....
Travailler sur des chaînes c'est bien mais un peu de calcul ne fait pas de mal. Supposons que vous multipliez encore les chiffres par 6.55957 (allez savoir pourquoi...) nous allons créer un programme convertir.py (sur la même base que ci dessus) qui va récupérer un chiffre que nous allons donné à la suite du programme pour nous afficher la conversion :

#!/usr/bin/python
from string import atoi

valeur = raw_input('Montant : ')
combien = atoi(valeur)
multiplication = combien * 6.55957

print valeur + " en francs fait " + str(multiplication) + " Francs"

Automatiquement votre programme vous converti votre valeur en francs. Analysons un peu le code. une nouveauté  la deuxième ligne : nous avons besoins de convertir ce que vous allez rentré en chiffre (sinon cela s'appelle un string : autrement dit du texte) il est donc nécessaire d'appeler en renfort  des modules qui vont nous permettre de faire cela automatiquement en l'occurrence atoi d'ou le "from string import atoi".
la 3eme ligne vous demande le champs comme nous l'avons vu. et la quatrième permet de convertir votre texte (string) en chiffre (ici un int c'est à dire un chiffre sans virgule, si vous tapez 15.2 vous aurez une erreur). la variable combien converti donc votre texte (string) en chiffre entier (int). la variable multiplication elle, permet de multiplier "combien"
par 6.55957... et la vous me direz mais y'a une virgule là?

Et oui effectivement, 6.55957 est un flottant (float), mais python fait le nécessaire pour vous et converti automatiquement votre "combien" (qui est un int) en float. d'où le résultat que vous obtenez avec le print.

Un programme plus probant serait d'autoriser la saisie de variable avec virgule(en fait des points), pour cela il suffit de remplacer à la ligne 2 et 5 les atoi en atof pour convertir notre texte (string) en flottant (float).

Pour réaliser des opérations de calcul, vous avez à votre disposition : + pour les additions,  - pour les soustractions, * pour les multiplications et / pour les divisions.

Les conditions
Notre programme était jusqu'à  présent très linéaire, il suivait le programme de la première ligne jusqu'à  la dernière, nous allons introduire un nouveau concept : les conditions. Admettons que vous ayez dans votre portefeuille un certains montant et que vous souhaitiez acheter un objet. Nous allons demander à python de vérifier si vous avez assez pour vous faire plaisir.

#!/usr/bin/python
from string import atof

combien_sur_vous = atof(raw_input('Combien avez vous : '))
objet_desire = atof(raw_input('Montant de votre achat : '))

if combien_sur_vous < objet_desire:
print "Rentrez a la maison"
else:
print "ok vous pouvez achetez"

On rècupèrer donc le module atof (il est possible que quelques centimes traînent au fond de la poche et donc engendre des virgules).

Petite nouveauté vous constatez que l'on a placé atof et raw_input sur la même ligne, on gagne de la place en en-capsulant les variables, atof converti directement le retour de raw_input. On prends donc les deux variables (combien_sur_vous et objet_desire)
Nota: jamais d'espace ni d'accent dans les noms de variables ... attention.
et nous commencons notre conditions if combien_sur_vous < objet_desire: qui signifie tout simplement SI combien_sur_vous est inférieur à la variable objet_desire, on demande à l'ordinateur d'afficher une petite phrase nous demandant de rentrez chez nous plutôt que de faire du leche vitrine. dans le cas inverse ELSE (sinon) on demande d'afficher l'accord.

NOTE IMPORTANTE : python structure son code sur les espaces ou les tabulations, c'est à dire qu'aprés le IF et le ELSE vous avez notez que j'ai rajouté une tabulation, en fait chaque tabulation correspond à un niveau d'ordre dans les blocs de conditions.
Donc si vous avez 10 lignes dans un IF il vous faudra indenter (mettre le même nom d'espace ou de tabulation entre le bord et le début de votre texte) de la même manière chacune des 10 lignes). C'est un concept propre à Python mais qui permet d'avoir un code finalement  propre.

07/10/2008

[grabouille] - Le dessin pour les petits sous linux en v0.4

grabouille-0.4.jpg

1 mois que je n'avais pas touché au code de Grabouille, j'avais mis des idées de coté, et puis de chose en chose, du temps manquant, des aides diverses (G'mic par exemple ;-))...
Alors ce week end j'ai pris les choses en mains, et j'ai implémenté tout ce que j'avais noté dans ma todolist.
Et voilà le changelog de la V0.4.
- ajout d'un écran d'accueil
- fonctionnalité de sauvegarde dans mes_grabouilles du dossier utilisateur (CTRL+s)
- choix d'un théme (garçon/fille)
- possibilité de taper au clavier en linéaire
- ajout de 5 nouveaux fonds
- ajout d'un fond sonore sur l'intro
- nouveau mode de jeu : Attraper (catch the flag/flower pour petitou)
- ajout d'un menu dans Educations (plus besoins de lancer le logiciel en mode console) (merci Romain et Claude pour vos informations à ce sujet)

Le deb ici et les sources

16/09/2008

[grabouille] - l'ardoise magique en v0.3

Déja la version v0.3 avec pas mal  de nouveautés, merci à tout ceux qui m'ont fait des retours, et qui ont apprécié les versions précédentes.f717345af95416519a1fc1946fa2ed83.png

Version v0.3 :

- migration des photos dans le dossier fonds pour permettre l'ajout de ses propres photos.
- ajout de 4 fonds supplémentaires
- le changement de fond est aléatoire (flêche)
- la touche espace efface et reste sur la même image
- compatible windows (installer python et pygame)
- clic gauche dessine des coccinelles
- possibilité d'écrire des lettres avec le clavier
- encore en test  possibilité de sauvegarder (test: une seule image, un seul répertoire il faut au préalable créer un dossier dans HOME grabouille_sauvegarde) avec CTRL+s ==> à  faire évoluer avant de mettre l'option en bas
- ajout des sons sur clic gauche/milieu/droit
- modification des combinaisons de touche pour sortir (CTRL+ESC)
- transitions entre les images
- créations d'un deb

Les Sources
Le .deb

12/09/2008

[grabouille] - Le dessin pour enfants sous linux en v0.2

2b5df0e1b6e54b5191936f7bf6ef887c.jpg

Grabouille, je viens de sortir la v0.2, encore en test, elle est déja beaucoup plus abouti que ne l'étaient les premiers jets.

Dépendance : python-pygame

Cette version est disponible ici 

Au rayon des nouveautés :

- Réglage de la taille du pinceau avec + et -
- le clic du milieu fait maintenant une alternance de coeurs et d'étoiles
- le code a été nettoyé complètement (merci atlante pour le retour)
- renforcement de la sécurité en cas de souris avec plus de 3 bouttons (merci Sel)

@virtual -> je n'oubli pas la suggestion mais ca sera pour la v0.3