Partage
  • Partager sur Facebook
  • Partager sur Twitter

[feedback] casse-brique

vos avis

    15 février 2011 à 20:39:04

    salut,
    suite à une discution sur le casse-brique sur ce forum même, je me suis dis "tiens, si j'en recodais un" ...
    et pour une fois j'aimerai mener un projet à terme :p
    j'aimerai donc avoir des feedback sur le gameplay et le design, ainsi que des reports d'éventuels bugs, des améliorations à apporter.

    pour le moment il n'y a qu'un seul niveau de teste et 5 bonus/malus dispos:
    -agrandissement/reduction du palet
    -palet collant temporisé (10 secondes normalement)
    -triple balle
    -balle rapide (jusqu'au prochain bonus attrapé)
    -palet inversé (5 secondes ou jusqu'au prochain bonus attrapé normalement, pas vérifié)

    le code est volontairement monolithique.

    http://joel-murielle.perso.sfr.fr/arnakoid.py

    Image utilisateur

    Merci.

    from pygame import *
    from base64 import b64decode
    from cStringIO import StringIO
    from math import sin,cos,radians,degrees,acos
    #**************************LEVELS***************************************
    level0 = """
    03 01 01 01 02 02 m1 01 i1 03
    01 i1 02 02 01 01 02 02 01 01 
    t1 01 02 m2 01 i1 02 02 01 01 
    01 02 02 02 02 02 t2 02 02 01
    t1 m2 t2 m1 t1 m1 t1 m2 t2 m1 
    """
    def load(level):
        for e,i in enumerate(level.split(),10):
            if i !='__': Brick(e%10,e/10,int(i[1]),i[0])
    def inflate():
        if palet_w<Palet.all.w<palet_w+palet_plus:
            Palet.all.inflate_ip(Palet.inflate,0)
            Palet.img = transform.scale(palet,Palet.all.size)
    def magnet():
        if Palet.magnet:
            Palet.magnet += 1
            if Palet.magnet == 750: Palet.magnet = 0
    def reverse():
        if Palet.reverse:
            Palet.reverse += 1
            if Palet.reverse == 250: Palet.reverse = 0
    #**************************CONSTANTES***********************************
    bg_color = 223,218,209
    brick_color = (120,15,60),(200,100,100),(100,50,50),(50,25,25),bg_color
    brick_w,brick_h = brick_size = 30,20
    brick_inflate = -3,-3
    brick_msk = image.load(StringIO(b64decode("""iVBORw0KGgoAAAANSUhEUgAAABs
    AAAARCAYAAAAsT9czAAAAAXNSR0IArs4c6QAAAUpJREFUOMu9krFqwlAUhv/Ecy26ZCitQ6C
    DQ9ZMUYQufYOAg8/RxYfwTZzUp5Bcp6x3sINEiKWhcbgxySXpoqUUWkox9x8Ph/87/znHqOv
    6GcArGtZisbgzkiR5LIpCNQ3zPI9ov98bq9Xqxfd9pynQcrkUu93OMdbr9dNoNAqHwyGbTqe
    2bdvWtSBRFKWz2SwKgqAE4NLxeGQAWBAEGI/H0WAwOEwmk1vXde//CwnD8DCfz9845+W5xAA
    wklISgPalkXMOznkCIHEchzzP6/T7/U6v1+tYlnXT7XaZaZpmVVWVlLJM0zSP4zjbbrfZZrP
    JhBCX+xtffQEQZVlG34qfEkJACJEDyAG8/yGU+ZMXACIpJTvHbFqMTqcT/TLNNUWU57m+ZEV
    RkCYYXWBtXTB9a1RKtTTBWqSU0pesLEt9DxLH8QOAlgaY/QGZko1bwP7gKwAAAABJRU5ErkJ
    ggg==""")))
    screen = display.set_mode((brick_size[0]*10,brick_size[1]*15))
    screen_rect = screen.get_rect()
    palet = image.load(StringIO(b64decode("""iVBORw0KGgoAAAANSUhEUgAAADwAAAA
    GCAYAAACfHf25AAAAAXNSR0IArs4c6QAAAb1JREFUOMvdkz2OFDEQhb/ndvesVnAetAGII5A
    gEmJEDhlIuyESNyAnAWn3EIQchAusUE+P7Udg97RnWC6Ak2pXvx9X2SUA//j5gnm5439eY3y
    t50++6vu7Dze2r4PEeLFjevyIOE1gQwgVbG9ECUqpUar/1ojBVF7PWXkuQMdZtVf+yjvq8YC
    GtzP0Puc8ibwcmO/vSfuFkvMv2Z/18uqp7YI0NF5GGogxMk4j027HxeUl025iHCdsN10jhZP
    z2KV5heNeUi2y29tuOXe1qGmu2O17w6rT3DApJfbzzPx7ZtnvOSwLh8O+nUPHmsBIkgECAUK
    BUqOzK6jlCgW1W4ghMoxiCJFxisQYiWEixMAUaxyGgXEY0SBC40jC2gqRa5G2KSRSKuScyTl
    jZ1JKpJQ4LImcEktKlBZzzlAgOxNCu3DqOfu4XUZGEvHV1bMvwJu121ZA69PrOgvluK8Y//V
    9ineHr8WdrjUfGtZAaD4gDdgFq+bPPdxe0WmeM386jwLwSQC37z/eQLi2XFsF2/zCNi/NwP1
    8HfP16WztDkctKTRj437+eu3V91/4fp151ObkynN5YPQHoLy1/e0PwdUp7kFDyB0AAAAASUV
    ORK5CYII=""")))
    palet_w,palet_h = palet_size = palet.get_size()
    palet_plus = 20
    palet_color1 = 50,50,100
    palet_color2 = 100,100,200
    palet_speed = 6
    palet_up = 5
    balle = image.load(StringIO(b64decode("""iVBORw0KGgoAAAANSUhEUgAAAAUAAAA
    FCAYAAACNbyblAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwA
    ACxMBAJqcGAAAAAd0SU1FB9sCDgk7J7hbA8MAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXR
    oIEdJTVBXgQ4XAAAAdElEQVQI1wFpAJb/AX9/fxAnJyeYERERSODg4Ljl5eVoAuDg4IgWFhZ
    XFxcXD/b29lfi4uKIASkpKdIUFBQtDw8P/+zs7AH19fXTA/Pz8w/j4+NE9fX1Afr6+gDk5OS
    QA/39/c4AAADyDw8PBQYGBpf19fWTcKk1R2BmlV0AAAAASUVORK5CYII=""")))
    balle_speed = 5
    bonus = Surface((brick_w/2,brick_h/2),SRCALPHA)
    bonus.fill((0,0,0,0))
    draw.ellipse(bonus,(150,150,200),bonus.get_rect())
    draw.ellipse(bonus,(200,75,50),bonus.get_rect(),2)
    bonus_speed = 10
    bc = image.load(StringIO(b64decode("""iVBORw0KGgoAAAANSUhEUgAAASoAAAASCA
    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
    d/ffr0CwD8D2/RdODLLt+DAAAAAElFTkSuQmCC""")))
    #***********************************************************************
    #**************************BONUS****************************************
    class Bonus(Rect):
        all = []
        t = time.Clock()
        tt = 0
        laps = bonus_speed
    
        def __init__(self,rect,bon):
            Rect.__init__(self,bonus.get_rect())
            self.center = rect.center
            self.bonus = bon
            Bonus.all.append(self)
            
        @staticmethod
        def update():
            Bonus.tt += Bonus.t.tick()
            if Bonus.tt >= Bonus.laps:
                for b in Bonus.all:
                    b.move_ip(0,1)
                    if b.top > screen_rect.bottom:
                        Bonus.all.remove(b)
                Bonus.tt -= Bonus.laps
            
        @staticmethod
        def display():   
            for b in Bonus.all:
                screen.blit(bonus,b)
    
        def inflate():
            Palet.reverse = 0
            Balle.laps = balle_speed
            Palet.magnet = 0
            Palet.inflate = -Palet.inflate
            Palet.all.inflate_ip(Palet.inflate,0)
        
        def magnet():
            Palet.reverse = 0
            Balle.laps = balle_speed
            Palet.magnet = 0 if Palet.magnet else 1
            if not Palet.magnet:
                for b in Balle.all: b.magnet = 0
        
        def triple():
            Palet.reverse = 0
            Balle.laps = balle_speed
            Palet.magnet = 0
            for b in Balle.all[:]:
                Balle(b.X,b.Y,b.angle+10)
                Balle(b.X,b.Y,b.angle-10)
        
        def speed():
            Palet.reverse = 0
            Balle.laps = balle_speed
            if Balle.laps == balle_speed: Balle.laps = balle_speed/1.3
            else: Balle.laps = balle_speed
        
        def reverse():
            Palet.reverse = 0 if Palet.reverse else 1
    
        dic = {'i': inflate,'m': magnet,'t': triple,'s': speed,'r': reverse}
    #***********************************************************************
    #**************************BALLE****************************************
    class Balle(Rect):
        all = []
        t = time.Clock()
        tt = 0
        laps = balle_speed
        def __init__(self,x,y,angle):
            self.magnet = 0
            self.X = x
            self.Y = y
            self.vx = cos(radians(angle))
            self.vy = sin(radians(angle))
            Rect.__init__(self,(balle.get_rect().move(x,y)))
            Balle.all.append(self)
    
        @property
        def angle(self):
            return degrees(acos(self.vx))
        @angle.setter
        def angle(self,val):
            self.vx = cos(radians(val))
            self.vy = sin(radians(val))
            return val
        
        @staticmethod
        def update():
            Balle.tt += Balle.t.tick()
            if Balle.tt >= Balle.laps:
                for b in Balle.all: b._update()
                Balle.tt -= Balle.laps
        
        @staticmethod
        def display():
            for b in Balle.all:
                screen.blit(balle,b)        
        
        def _update(self):
            if  Rect((self.X+self.vx,self.Y+self.vy),self.size).colliderect(Palet.all):
                if not Palet.magnet:
                    k = key.get_pressed()
                    self.angle -= (k[K_RIGHT]-k[K_LEFT])*10
                else:
                    for b in Balle.all:
                        b.magnet = 0
                    self.magnet = 1
            f = Rect((self.X+self.vx,self.Y+self.vy),self.size)
            sp = Brick.all+[Palet.all]
            t = f.collidelist(sp)
            if t >= 0:
                try: Brick.all[t].update()
                except: pass
                if Rect((self.X,self.Y+self.vy),self.size).colliderect(sp[t]):
                    self.vy *= -1
                elif Rect((self.X+self.vx,self.Y),self.size).colliderect(sp[t]):
                    self.vx *= -1
                else:
                    self.vx *= -1
                    self.vy *= -1
            elif f.right > screen_rect.right or f.left < screen_rect.left:
                self.vx *= -1
            elif f.top < screen_rect.top:
                self.vy *= -1
            elif not self.magnet:
                self.X += self.vx
                self.Y += self.vy
                self.topleft = self.X,self.Y
                if not screen_rect.contains(self):
                    Balle.all.remove(self)
    #***********************************************************************
    #**************************BRICK****************************************
    class Brick(Rect):
        static_bg = Surface(screen_rect.size,SRCALPHA)
        static_bg.fill(bg_color)
        static_bg.blit(bc,(1,1))
        w,h = brick_size
        all = []
        def __init__(self,x,y,val,bonus):
            Rect.__init__(self,(x*Brick.w,y*Brick.h,Brick.w,Brick.h))
            self.inflate_ip(*brick_inflate)
            self.val = val
            try: self.bonus = Bonus.dic[bonus]
            except: pass
            Brick.static_bg.fill(brick_color[self.val],self)
            Brick.static_bg.blit(brick_msk,self)
            Brick.all.append(self)
        
        @staticmethod
        def display():
            screen.blit(Brick.static_bg,(0,0))
    
        def update(self):
            if self.val:
                self.val -= 1
                if not self.val:
                    Brick.static_bg.fill(bg_color,self)
                    Brick.all.remove(self)
                    Bonus(self,self.bonus)
                else:
                    Brick.static_bg.fill(brick_color[self.val],self)
                    Brick.static_bg.blit(brick_msk,self)
    #***********************************************************************
    #**************************PALET****************************************
    class Palet:
        img = palet
        laps = palet_speed
        all = Rect((0,0),palet_size)
        all.midbottom = screen_rect.midbottom
        all.move_ip(0,-palet_up)
        t = time.Clock()
        tt = 0
        inflate = -2
        magnet = 0
        reverse = 0
        
        @staticmethod
        def update():
            Palet.tt += Palet.t.tick()
            if Palet.tt >= Palet.laps:
                k = key.get_pressed()
                if k[K_SPACE]:
                    for b in Balle.all: b.magnet = 0
                x = (k[K_RIGHT]-k[K_LEFT])
                px = Palet.all.x
                Palet.all.x += -x if Palet.reverse else x
                Palet.all.clamp_ip(screen_rect)
                for b in Bonus.all:
                    if Palet.all.colliderect(b):
                        b.bonus()
                        Bonus.all.remove(b)
                for b in Balle.all:
                    if Palet.all.colliderect(b) or (b.magnet and px-Palet.all.x):
                        b.X += x
                        b.x = b.X
                        if not screen_rect.contains(b):
                            b.clamp_ip(screen_rect)
                            b.X = b.x
                            if b.centery <= Palet.all.centery:
                                b.bottom = Palet.all.top
                            else:
                                b.top = Palet.all.bottom
                            b.Y = b.y
                            b.magnet = 0
                Palet.tt -= Palet.laps
        
        @staticmethod
        def display():
            screen.blit(Palet.img,Palet.all)
        
    #***********************************************************************
    vie = 3
    vie_mini = transform.scale(palet,(30,4))
    vie_img = Surface(((vie_mini.get_width()+5)*3+5,18),SRCALPHA)
    vie_rect = vie_img.fill((0,0,0,0))
    for i in 0,1,2: vie_img.blit(vie_mini,(i*(vie_mini.get_width()+5)+5,9-vie_mini.get_height()/2.))
        
    def display_vie():
        screen.blit(vie_img,vie_rect,(0,0,vie*(vie_mini.get_width()+5),18))
            
    
    load(level0)
    t = time.Clock()
    tt =0
    laps = 20
    while vie > -1:
        Balle(Palet.all.centerx-2,Palet.all.top-balle.get_height(),-45)
        Balle.all[0].magnet = 1
        while not event.peek(QUIT) and Balle.all:
            event.clear()
            if key.get_pressed()[K_ESCAPE]:
                quit()
                exit()
            Balle.update()
            Palet.update()
            Bonus.update()
            tt += t.tick()
            if tt > laps:
                Brick.display()
                Balle.display()
                Palet.display()
                Bonus.display()
                display_vie()
                display.flip()
                inflate()
                magnet()
                tt -= laps
        vie -= 1
    
    • Partager sur Facebook
    • Partager sur Twitter

    Python c'est bon, mangez-en. 

      16 février 2011 à 13:31:41

      Je n'ai pas testé, j'ai juste parcouru rapidement.

      Alors, je trouve que l'utilisation de cos et de sin est inutile.

      ->ta balle à une vitesse(axe x et y combinée)fixe. Il suffit de conserver cette vitesse après modification de la vitesse en x ou y.

      Pour ta collision balle-brique, pas de problèmes sur certains cas particuliers?

      Je vais tester. :)
      Si tu comprends le C, j'ai également un début de casse-brique dans ma signature, et je me prend beaucoup plus la tête pour les collisions.
      C'est pour ça que j'ai un doute.
      ;)
      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        16 février 2011 à 13:39:35

        Citation : GurneyH


        Alors, je trouve que l'utilisation de cos et de sin est inutile.

        ->ta balle à une vitesse(axe x et y combinée)fixe. Il suffit de conserver cette vitesse après modification de la vitesse en x ou y.



        je pige pas o_O
        je jette un oeil à ton code ...
        • Partager sur Facebook
        • Partager sur Twitter

        Python c'est bon, mangez-en. 

          16 février 2011 à 14:16:20

          Alors j'ai testé, et c'est vraiment bien. :-°

          Pas vu de problêmes apparents sur les collisions balle brique(je suis jaloux).
          En si peu de ligne tu as intégré des bonus, des briques de résistances variables, chapeau!

          Pour ce que j'expliquais plus haut, j'ai précisé par mp.
          Je signale tout de même que c'est une idée que j'ai honteusement pompé dans un vieux post de bluestorm.:D

          Encore bravo, Josmiley.
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            17 février 2011 à 15:43:11

            j'ai changé un peu le design, vous en pensez quoi? ça fait fille non? (sans vouloir être sexiste)
            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              17 février 2011 à 17:39:14

              Excellent. Ca me rappelle des souvenirs ça, Arkanoid ^^

              Je n'ai pas de relevé de bugs à proprement parler, juste certaines étrangetés :
              - Le chariot peut sortir du cadre de la fenêtre indéfiniment
              - Le multiball fonctionne à l'infini (ce qui est excellent :-° ) : on passe de 3 balles, à 9 balles, à 27 balles etc.

              Sinon, plusieurs pistes :
              - Tu peux développer une UI où l'on verrai le score, le nombre de vies et le niveau.
              - La façon dont on perd est assez brutale : le programme part vite fait bien fait. Tu pourrait développer un écran titre et un écran de Game Over
              - A titre personel seulement, je prépère jouer aux jeux en plein écran : il serait bien de pouvoir agrandir la fenêtre si on le souhaite.
              - Les powers-up devrait apparaître aléatoiremement, et non pas prédéfinies.
              - Je pense que le plus pratique serait de "paver" l'écran de briques à l'aide d'une matrice :

              level1 = [[3, 0, 0, 3, 2, 1, 3, 3, 3, 3], 
              [3, 2, 3, 1, 0, 1, 2, 0, 2, 0], 
              [2, 3, 0, 0, 2, 0, 2, 0, 1, 1], 
              [2, 1, 1, 1, 3, 3, 3, 0, 0, 2], 
              [1, 2, 1, 3, 0, 1, 0, 1, 1, 1]]
              
              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2011 à 18:18:00

                Citation : Yohan88

                - Le chariot peut sortir du cadre de la fenêtre indéfiniment


                problème réglé, génère des bugs ...

                Citation : Yohan88

                - Tu peux développer une UI où l'on verrai le score, le nombre de vies et le niveau.
                - La façon dont on perd est assez brutale : le programme part vite fait bien fait. Tu pourrait développer un écran titre et un écran de Game Over


                j'ai pas encore attaqué l'enveloppe du jeu, j'ai encore quelques soucis avec le gameplay et l'intégration d'un bonus 'power'.

                Citation : Yohan88

                - A titre personel seulement, je prépère jouer aux jeux en plein écran : il serait bien de pouvoir agrandir la fenêtre si on le souhaite.


                le scaling pose un gros probleme car faudrait partir d'image de grandes taille (donc pas intégrée au code) pour conserver un beau rendu, je vais y réfléchir.
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                [feedback] casse-brique

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown