La solution de josmiley qui est d'utiliser la surface de rendu (je suppose pour la convertir en tableau de pixels et accéder directement au pixel qui a été cliqué) a quand même le mérite de fonctionner en toutes circonstances...
Dans ce cas, mettre tous les carrés dans un tableaux de pixel que l'on modifie en fonction des zones de transparences du mask ...
Là ou le mask est noir, on change la valeur des pixels du tableau, et on laisse les pixels correspondants aux carrés de couleur là ou il est transparent.
vu qu'il est en construction une fois dans le menu faites : ---> New game ---> Easy , l'ordi fait sa séquence apres vous pourrez cliquer sur les couleur ..
dans le code , le probleme de détection de clique se situe a a partir de la ligne 298
Bon voila , probleme résolu .. encore un probleme de logique de ma part ...
j'explique les grandes lignes :
avant je faisais :
ma boucle :
- generation des carré des couleurs en arrieres plan
- gestion d'evenements et detection des cliques
- blit de l'image avec les ronds transparents (une sorte de calque)
- et le pygame display flip
et finalement en faisant sa :
- generation des carré des couleurs en arrieres plan
- blit de l'image avec les ronds transparents (une sorte de calque)
- gestion d'evenements et detection des cliques
- blit de l'image avec les ronds transparents (une sorte de calque)
- et le pygame display flip
Le probleme venait donc du fait que dans l'ordre de passage dans la boucle quand je cliquai il n'y avait pas encore mon image de blité mais seulement les carré de couleurs .. sa ma fait tilt d'un coup !
c'est vraiment idiot de ma part , maintenant sa me semble logique ..
vas falloir que je me penche un peu sur les mask et l'histoire des pixelarrays mais les docs en anglais , j'ai un peu de mal quand sa devient technique .........
Je pense que Josmiley parlait de ça, mais c'est pas moi le spécialiste
non, en fait je voulais dire que le get_at() ne se fesait pas sur la bonne surface et qu'il fallait le faire sur la surface finale(après le blit donc) et non pas sur l'image des carrés colorés
@PsyloW: je pense que t'as un peu abusé sur le menu flashy, c'est limite phychédélique ...
Flashy ??? je ne vois pas de quoi tu parle *sifflote*
moi j'aime les délires psyché
c'est en attente de changement , je pensais au vieux jeu d'arcade quand j'ai fait sa ..
A terme dans les options je vais me débrouiller pour que le joueur puisse changer le thème complet : (couleur, déco, polices ..)
Dans les differents level qu'il y aura, j'ai pensé a des truc du style remplacer les couleurs par des images bien coloré dans le styles d'Andy Waroll ..
en mode hard il y aura plus de couleur .. et durant la séquence ou la séquence est jouer je pense la faire tourné pour augmenter le challenge ..
Autre idée .. le joueur gagne une séquence et hop la jauge a droite augmente une fois en haut il reçoit la un coup suplémentaire .. ou un replay qui permeterai de revoir la séquence ..
plus je fait le code plus j'ai d'idée en fait .. et au final on peut rendre le jeu Simon un petit peu plus sympa ..
@josmiley : Dis moi d'apres ce que j'ai vu tu as l'air de bien maitrisé Pygame.. Connaitrai tu un moyen de recuperer le pseudo du joueur .. un peu comme un champ 'Entry' dans Tkinter ... ?
Archive: /home/fred1599/Bureau/PygameReadWrite.zip
[/home/fred1599/Bureau/PygameReadWrite.zip]
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
zipinfo: cannot find zipfile directory in one of /home/fred1599/Bureau/PygameReadWrite.zip or
/home/fred1599/Bureau/PygameReadWrite.zip.zip, and cannot find /home/fred1599/Bureau/PygameReadWrite.zip.ZIP, period.
tu update() l'objet Form en lui envoyant les evenements il faut donc l'inclure dans une boucle.
show() sert à l'afficher.
Form(pos,width,fontsize,height=None,font=None,bg=(250,250,250),fgcolor=(0,0,0),hlcolor=
(180,180,200),curscolor=(0xff0000),maxlines=0) ==> Rect
pos = (x,y) la position de la boite
width = largeur en pix
fontsize = la hauteur de la police
height = la hauteur de la boite en pix, si None alors height sera egale à la hauteur d' une ligne
font = nom de la fonte
bg = couleur de l'arriere plan ou un objet Surface
fgcolor = couleur du texte
hlcolor = couleur du surligneur
curscolor = couleur du curseur
maxlines = nombre max de nouvelles lignes, 0 = illimité
Form.cursor() : efface/affiche succesivement le curseur
Form.update(event) : update l'objet
Form.show() : affiche l'objet
Form.OUTPUT : est une propriétée et contient le résultat de l'entrée
voilà un exemple simple d'utilisation ...
import form
from pygame import *
font.init()
police = font.Font(font.get_default_font(),20)
scr = display.set_mode((500,50))
r = scr.blit(police.render('Enter Your Nick : ',1,(250,250,250)),(10,10))
display.update(r)
get_nick = form.Form((r.right+20,10),200,20,bg=(250,150,250),fgcolor=(50,50,50),hlcolor=(80,180,200),curscolor=(0xff0000),maxlines=1)
# on creee un objet Form qui sert a entrer du texte
while True:
ev = event.wait() # catch l'evenement
if ev.type == KEYDOWN and ev.key == K_RETURN: break # casse le while si appuie sur return
get_nick.update(ev) # on update en envoyant l' evenement
get_nick.show() # on affiche la boite
print get_nick.OUTPUT # contiend le texte entre par l'user
A mon avis sa va etre du Simon de "pro" que tu vas nous sortir
je suis curieux de voir sa
non,non ...
j'aime bien les codes courts. pour l'instant je l'ai fait en mode texte.
from random import randint
Game = True
SimonSeq = []
while Game:
SimonSeq.append(randint(1,4))
print SimonSeq
PlayerSeq = []
for x in range(len(SimonSeq)):
PlayerSeq.append(int(raw_input(': ')))
if PlayerSeq != SimonSeq[:len(PlayerSeq)]:
Game = False
break
On peut dire qu'il représente une limite de recherche peut etre ..
Quand je vois ton code , je me dis que j'ai encore du boulot dans l'apprentissage du python .. j'ai l'impression que par moment je me prend la tete car je vois pas le probleme du bon coté..
edit : je viens de faire une belle découverte , avant pour savoir si ma souris survolai un choix du menu je me débrouillai de la sorte :
for event in pygame.event.get() :
if event.type == MOUSEMOTION :
if event.pos[0] > 180 and event.pos[0] < 415 and event.pos[1] > 240 and event.pos[1] < 260 :
choix_menu = 0
if event.pos[0] > 180 and event.pos[0] < 415 and event.pos[1] > 300 and event.pos[1] < 320 :
choix_menu = 1
if event.pos[0] > 230 and event.pos[0] < 360 and event.pos[1] > 360 and event.pos[1] < 385 :
choix_menu = 2
if event.pos[0] > 230 and event.pos[0] < 360 and event.pos[1] > 420 and event.pos[1] < 440 :
choix_menu = 3
if event.pos[0] > 230 and event.pos[0] < 360 and event.pos[1] > 480 and event.pos[1] < 500 :
choix_menu = 4
Ce qui devient fastisieux plus le menu augmente , pour calculer la postion de chaque teste je faisai un imprime ecran , j'allais dans GIMP et je notai les positions et taille ... (on rigole pas svp )
et la en me promenant sur pygame.org j'ai découvert un moyen bien plus simple ... :
list_menu = [text2,text3,text4,text5,text6]
if event.type == MOUSEMOTION :
for x in list_menu :
if x.collidepoint(event.pos[0],event.pos[1]):
print ('survol : {}'.format(x))
c'est un peu comme si tout les jours on doit allé au boulot a 30km de chez soi .. on s'y rend a pied jusqu'au jour ou l'on se rend compte qu'il y a le metro et le bus qui peut nous y emmener en quelque minute ..
c'est magique je trouve
on devrait faire un post comme sa :
" Mieux vaut tard que jamais!! ce que vous avez découvert bien trop tard en en python et qui vous a changer la vie !"
en gros sa creer un rect au niveau du curseur de la souris et verifie si il rentre en collision avec un element de la liste ?. c'est bien sa ?
je viens d'essayer , par contre Item ne prend pas de valeur .. moi sa m'ecris sa si je survol un élément :
survol du choix:
survol du choix:
survol du choix:
survol du choix:
survol du choix:
survol du choix:
survol du choix:
psylow@Psy-Sys:~/Documents/Psymon$
pour recuperer la clé d'un élément de la liste j'ai utilisé sa :
if event.type == MOUSEMOTION :
for z,x in enumerate(list_menu) :
if x.collidepoint(event.pos[0],event.pos[1]):
choix = z
Y a pas un moyen de récupere le nom d'un objet , de le transferer en chaine de charactere pour pouvoir l'afficher ensuite ?
je viens d'essayer d'utiliser ton exemple pour utilisé ton script Form
alors quand je l'essaye dans un fichier seul tout vas bien , mais la je viens d'essayer de l'incorporer a mon jeu , et a chaque fois je me retrouve avec une erreur de ce type :
psylow@Psy-Sys:~/Documents/Psymon$ python simon.py
there is no soundcard
Traceback (most recent call last):
File "simon.py", line 81, in <module>
ev = event.wait() # catch l'evenement
AttributeError: event member not defined
EDIT : alors pour le fait que ton exemple marche seul mais pas dans mon jeu , je ne sais pas pourqoi .. mais pour qu'il marche dans le jeu , j'ai changer la ligne
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.