IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GUI Python Discussion :

[TOUS GUI] propositions d' exercices


Sujet :

GUI Python

  1. #41
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    salut afranck64;

    j'avoue que "l'archer" ça ne m'a pas inspiré, je suis plutôt puzzle, désolé de ne pas avoir fait l'effort
    il me manque le module phy pour que ton code fonctionne chez moi.

    Pipes fonctionne plutôt bien, le path-mode est une bonne idée; et je vois que l'on fait de l'auto-promotion ^^

    à la place de l'archer j'ai fait un sokoban:



    http://joel-murielle.perso.sfr.fr/sokoban.tar

    et un samegame:



    http://joel-murielle.perso.sfr.fr/samegame.tar

    Si ça vous inspire ...

  2. #42
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    @Joesmiley:
    C'était bien joué le personnage transparent. Il me faudra beaucoup de temps pour développer comme ça. Et le Samegame pour pouvoir faire cette compression des cases vides la va me falloir bosser dur.

    pour ce qui est du sokoban j'en ai déjà codé un bien qu'il soit en pascal et en mode console; bref si tu as une machine qui tourne sous Windows ou un compilateur pascal, voila le truc.

    Pièce jointe 65911

    pour ce qui est du samegame je risque mettre du temps avant de le coder j'ai un exam dans 2 semaines.

    Bon code et @+

    ps: le module phy est contenu dans le dossier data (Pipes)
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #43
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    re,
    j'ai une idée assez simple, mais j'y connais rien en socket ...
    j'aurais donc besoin d'un p'tit coup de main
    c'est un jeu de tir. 2 à 4 chars qui se poursuivent pour se tirer dessus et donc qui pourrait se jouer en réseau.
    voilà un premier brouillon;utilisez les flèches et la barre espace.
    http://joel-murielle.perso.sfr.fr/chars.zip

    le decors pourrait être détruit.
    c'est surtout histoire d'apprendre à utiliser les sockets.
    alors, que doit faire le serveur et que doit faire le client ?

    merci.

  4. #44
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    j'ai réfléchi, et j'ai dans l'idée que:
    -le serveur recolte l'état du clavier auprès de chaque client puis redistribut les infos
    -il attend ensuite que tous les clients se soient acquité de leur tâches.
    dans le principe, c'est bon ?

  5. #45
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonsoir Josmiley,
    ça fait un bail!

    bon pour le jeu je ne m'y connait pas très bien (du moins pour le moment en socket) mais tu devrais faire un serveur multithread sinon à chaque émission, il faudra attendre une réception alors tu devra avoir un Thread chargé de la réception des infos envoyées par les clients (mouvements,...) et un autre chargé de l'émission/re-émission des infos en direction des clients (nouvelle position des joueurs...) bien entendu les clients également devront être multithread.

    bon je vais un peu lire et je te fais signe

    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #46
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    salut afranck64,
    justement, pour rester synchro, je pense pas faire du multi-thread. Ainsi, un joueur n'ira pas plus vite qu'un autre si sa connection est plus rapide.

    bon, j'ai faim une maj du jeu, les flèches pour se déplacer, space pour tirer un obus, et left alt pour mitrailler.
    les 4 chars se déplacent en même temps ... jusqu' à ce que je pige les sockets.

    http://joel-murielle.perso.sfr.fr/chars.zip


  7. #47
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Salut,

    Je pense que tu ne m'as pas bien compris en fait le multi-threading c'est pour que les sockets ne se bloquent pas les uns les autres car la méthode socket.recv fait un sorte de mainloop jusqu'à ce que des informations soient reçuent... bref je documente encore

    @+ et bon code!
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  8. #48
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    bon, allez !!
    faut faire quelque chose.
    je vais refaire un tetris, classique.
    sauf qu'au lieu de s'appuyer sur des matrices pour gerer le jeu, on va utiliser des rectangles et des images. Enfin, je vais essayer ...

    voilà un début de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    from pygame import *
    from random import choice
     
    screen = display.set_mode((200,400))
    colors = 'red','royalblue','springgreen','yellow','khaki4'
     
    class Bg(Surface):
    	''
     
    	def __init__(self):
    		Surface.__init__(self,(240,420),SRCALPHA)
    		self.fill((0,0,0,255))
    		self.fill((0,0,0,0),(20,0,200,400))
    		self.mask = mask.from_surface(self)
     
    class Piece:
    	''
    	liste = ((0,),(0,1,1),(0,1,1)),((0,),(0,1,1),(0,1),(0,1)),((0,),(0,0,1),(0,1,1,1)),((0,),(0,1,1),(1,1)),((0,),(1,1,1,1))
     
    	def __init__(self):
    		piece = choice(Piece.liste)
    		self.surface = Surface((80,80),SRCALPHA)
    		color = Color(choice(colors))
    		for y,i in enumerate(piece):
    			for x,j in enumerate(i):
    				if j:self.surface.fill(color,(x*20,y*20,20,20))
    		self.surface = transform.rotate(transform.flip(self.surface,choice((0,1)),0),choice((0,90,180,270)))
    		self.rect = self.surface.get_rect()
    		self.rect.topleft = 60,-80
    		self.mask = mask.from_surface(self.surface)
     
    	def update(self):
    		def test_move(x,y):
    			if not bg.mask.overlap(self.mask,(self.rect.left+x+20,self.rect.top+y)): return 1
    		def test_rot():
    			if not bg.mask.overlap(mask.from_surface(transform.rotate(self.surface,90)),(self.rect.left+20,self.rect.top)): return 1
    		while True:
    			ev = event.wait()
    			if ev.type == USEREVENT or (ev.type == KEYDOWN and ev.key in (K_DOWN,K_LEFT,K_RIGHT,K_UP)):
    				if ev.type == USEREVENT or ev.key == K_DOWN:
    					if test_move(0,20): self.rect.top   += 20
    					else:
    						bg.blit(self.surface,(self.rect.left+20,self.rect.top))
    						bg.mask = mask.from_surface(bg)
    						break
    				elif ev.key == K_LEFT  and test_move(-20,0): self.rect.left  -= 20
    				elif ev.key == K_RIGHT and test_move(20,0 ): self.rect.right += 20
    				elif ev.key == K_UP    and test_rot():
    					self.surface = transform.rotate(self.surface,90)
    					self.mask    = mask.from_surface(self.surface)
    				screen.fill(0)
    				screen.blit(bg,(-20,0))
    				screen.blit(self.surface,self.rect)
    				display.flip()
    		return self.rect.top > -60
     
    time.set_timer(USEREVENT,300)
    key.set_repeat(50,50)
    bg = Bg()
    while Piece().update(): pass
    Misère, je ne pensais pas que ça serait aussi galère de na pas utiliser de matrice
    je dois trouver un moyen d'éliminer les lignes pleines

  9. #49
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Salut ,

    tu as finalement relance la discussion c est genial.
    Je vais voir ce que je peux faire comme Tetris avec Tkinter

    a plus.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  10. #50
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    re,
    j'ai mis un peu en standby.
    voilà, la chute des pièces accélère et ça compte les points; à améliorer.
    le ficher motif.png ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    from pygame import *
    from random import choice
     
    screen = display.set_mode((200,400))
    colors = 'red','royalblue','springgreen','yellow','khaki4'
    motif = image.load('motif.png')
    speed = 300
    pts = 0
     
    class Bg(Surface):
    	''
     
    	def __init__(self):
    		Surface.__init__(self,(240,500),SRCALPHA)
    		self.fill((0,0,0,255))
    		self.fill((0,0,0,0),(20,0,200,480))
    		self.mask = mask.from_surface(self)
     
    	def update(self):
    		global speed,pts
    		rmline = 0
    		for y in range(0,480,20):
    			if not (0,0,0,0) in [bg.get_at((x,y)) for x in range(20,220,20)]:
    				rmline += 1
    				screen.blit(bg,(0,y-80),(20,y,200,20))
    				display.flip();time.wait(200)
    				cp = bg.copy()
    				bg.fill((0,0,0,0),(20,0,200,y+20))
    				bg.blit(cp,(20,20),(20,0,200,y))
    				screen.fill(0)
    				screen.blit(bg,(-20,-80))
    				screen.blit(motif,(0,0))
    		self.mask = mask.from_surface(self)
    		if rmline:
    			event.clear()
    			speed -= 5
    			time.set_timer(USEREVENT,speed)
    			pts += rmline**2
    			display.set_caption('score: '+str(pts))
    		return rmline
     
    class Piece:
    	''
    	liste = ((0,),(0,1,1),(0,1,1)),((0,),(0,1,1),(0,1),(0,1)),((0,),(0,0,1),(0,1,1,1)),((0,),(0,1,1),(1,1)),((0,),(1,1,1,1))
     
    	def __init__(self):
    		self.surface = Surface((80,80),SRCALPHA)
    		color = Color(choice(colors))
    		for y,i in enumerate(choice(Piece.liste)):
    			for x,j in enumerate(i):
    				if j:self.surface.fill(color,(x*20,y*20,20,20))
    		self.surface = transform.rotate(transform.flip(self.surface,choice((0,1)),0),choice((0,90,180,270)))
    		self.rect = Rect(60,-80,80,80)
    		self.mask = mask.from_surface(self.surface)
     
    	def update(self):
    		def test_move(x,y):
    			if not bg.mask.overlap(self.mask,(self.rect.left+x+20,self.rect.top+y+80)): return 1
    		def test_rot():
    			if not bg.mask.overlap(mask.from_surface(transform.rotate(self.surface,90)),(self.rect.left+20,self.rect.top+80)): return 1
    		bgu = None
    		while True:
    			ev = event.wait()
    			if ev.type == USEREVENT or (ev.type == KEYDOWN and ev.key in (K_DOWN,K_LEFT,K_RIGHT,K_UP)):
    				if ev.type == USEREVENT or ev.key == K_DOWN:
    					if test_move(0,20): self.rect.top   += 20
    					else:
    						bg.blit(self.surface,(self.rect.left+20,self.rect.top+80))
    						bg.mask = mask.from_surface(bg)
    						break
    				elif ev.key == K_LEFT  and test_move(-20,0): self.rect.left  -= 20
    				elif ev.key == K_RIGHT and test_move( 20,0): self.rect.right += 20
    				elif ev.key == K_UP    and test_rot():
    					self.surface = transform.rotate(self.surface,90)
    					self.mask    = mask.from_surface(self.surface)
    				screen.fill(0)
    				screen.blit(bg,(-20,-80))
    				screen.blit(self.surface,self.rect)
    				screen.blit(motif,(0,0))
    				display.flip()
    				bgu = bg.update()
    		return self.rect.top > -60 or bgu
     
    display.set_caption('score: 0')
    time.set_timer(USEREVENT,speed)
    key.set_repeat(50,50)
    bg = Bg()
    while Piece().update(): pass

  11. #51
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    un passe-temps de quelques lignes ... un simple snake.
    http://joel-murielle.perso.sfr.fr/snake1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    from pygame import*
    from random import choice
    screen=display.set_mode([225]*2)
    font.init()
    font=font.Font(font.get_default_font(),17)
    area=set(sum([range(i,i+15) for i in range(17,242,16)],[]))
    while event.wait().type != QUIT:
    	screen.blit(font.render('HIT SPACE TO (RE)START',1,(255,255,255)),(7,100))
    	display.flip()
    	screen.fill(0)
    	if key.get_pressed()[K_SPACE]:
    		_,direction,head=snake=[15,16,17]
    		apple=255
    		display.set_caption('snake length: 3')
    		while(snake.count(head)&1)*head%16*(head&240):
    			for e in event.get(2):direction=(-1,-16,16,1)[e.key&3]
    			event.clear()
    			snake=snake[apple!=head:]+[head+direction]
    			if apple==head:
    				apple=choice(list(area.difference(set(snake))))
    				display.set_caption('snake length: '+str(len(snake)))
    			screen.fill(0)
    			for i in[apple]+snake:
    				draw.ellipse(screen,Color(('brown3','azure','bisque4')[1 if i==snake[-1]else 0 if i==apple else 2]),((i-1)%16*15,(i-16)/16*15,15,15))
    			display.flip()
    			head=snake[-1]
    			time.wait(150-len(snake))

  12. #52
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    Un simple démineur.
    Gameplay classic, j'ai juste travaillé sur le flip des cases cliquées.
    http://joel-murielle.perso.sfr.fr/demineur.zip

  13. #53
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par josmiley Voir le message
    re,
    j'ai une idée assez simple, mais j'y connais rien en socket ...
    j'aurais donc besoin d'un p'tit coup de main
    c'est un jeu de tir. 2 à 4 chars qui se poursuivent pour se tirer dessus et donc qui pourrait se jouer en réseau.
    voilà un premier brouillon;utilisez les flèches et la barre espace.
    http://joel-murielle.perso.sfr.fr/chars.zip

    le decors pourrait être détruit.
    c'est surtout histoire d'apprendre à utiliser les sockets.
    alors, que doit faire le serveur et que doit faire le client ?

    merci.
    L'ancêtre de ce jeu en réseau était Xpilot

    )jack(

Discussions similaires

  1. Obtenir de l'aide pour tous les composants GUI
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 17/03/2009, 10h29
  2. [Exercice] Afficher tous les nombres
    Par zlatino dans le forum Pascal
    Réponses: 7
    Dernier message: 05/03/2009, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo