Advertisement
Guest User

Script Danmaku 2 : smup

a guest
Feb 26th, 2017
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 18.24 KB | None | 0 0
  1. #Fct loop de la phase shmup
  2. def looper()
  3.   timerPhase = 0 #A MODIFIER
  4.   timerPatern = 0
  5.   timerBullet = 0
  6.   timerFrame = 0
  7.   animationTimer = 0
  8.   recoveryTimer = 0 # on met le timer de frame d'invulnérabilité à 0
  9.   hello = Personagesmup.new("alex3",320,240) #on crée un objet personage
  10.   vie = 100
  11.   vieBuffer = 100
  12.   barreShoot = BarreVie.new("CADRE_JAUGE_SHMUP","JAUGE_SHMUP",220,440,500)
  13.   barreVie = BarreVie.new("CADRE_JAUGE_SHMUP","JAUGE_SHMUP",220,460,100)
  14.   bulletStock = [] #chaque bullet est stocké dans le tableau
  15.   timerRegen = 0
  16.   boolVictory = false
  17.   head_Courgerite = Sprite.new
  18.   head_Courgerite.bitmap = RPG::Cache.picture("mooshroom head")
  19.   head_Courgerite.ox = head_Courgerite.bitmap.width/2
  20.   head_Courgerite.oy = head_Courgerite.bitmap.height/2
  21.   head_Courgerite.x = 320
  22.   head_Courgerite.y = 80
  23.   head_Courgerite.z = 10
  24.   head_Courgerite.zoom_x = 1.5
  25.   head_Courgerite.zoom_y = 1.5
  26.   timerCourgerite = 0
  27.   vie_courgerite = 10
  28.   recovery_courgerite = 0
  29.   timerShoot = 0
  30.   bulletJoueur = nil
  31.   noShootToKill = true
  32.  
  33.   loop do
  34.      Graphics.update #On attend une frame
  35.      Input.update #on update le lecteur d'input
  36.      
  37.      #on applique les commandes demanndé par les inputs (si haut est préssé, on va en haut)
  38.       if Input.press?(Input::UP)
  39.         hello.translate(0,-5)
  40.       end
  41.       if Input.press?(Input::LEFT)
  42.         hello.translate(-5,0)
  43.       end
  44.       if Input.press?(Input::RIGHT)
  45.         hello.translate(5,0)
  46.       end
  47.       if Input.press?(Input::DOWN)
  48.         hello.translate(0,5)
  49.       end
  50.       if Input.press?(Input::C)
  51.         if timerShoot == 500
  52.           bulletJoueur = TransBullet.new("beacon",hello.x,hello.y)
  53.           bulletJoueur.definMove(6,-Math::PI/2)
  54.           timerShoot = 0
  55.           barreShoot.update(timerShoot)
  56.         end
  57.       end
  58.      
  59.       if timerShoot < 500
  60.         timerShoot = timerShoot + 1
  61.         barreShoot.update(timerShoot)
  62.       end
  63.       #On update la tete de courgerite
  64.       head_Courgerite.x = 320 + (Math.sin(timerCourgerite))*10
  65.       timerCourgerite = timerCourgerite + (Math::PI/32)
  66.      
  67.     #On crée les pattern en fonction du métronome
  68.     #----------PATTERN DEFINI DANS CETTE ZONE-----------
  69.     case timerPhase
  70.     #Phase 1 : tutoriel, on présente chaque pattern au joueur
  71.       when 0
  72.         case timerPatern
  73.        
  74.           #premier pattern du tuto
  75.           when 0
  76.             if timerFrame == 10
  77.               #on update le compteur de bullet
  78.               timerBullet = timerBullet + 1
  79.               #Tir de bullet aim
  80.               i = bulletStock.length
  81.               bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
  82.               bulletStock[i].definMove(hello.x,hello.y,3)
  83.               #On verifie si on doit passer au prochain pattern
  84.               if timerBullet == 30
  85.                 timerBullet = 0
  86.                 timerPatern = timerPatern + 1
  87.               end
  88.             #on reset le timer de frame
  89.             timerFrame = 0
  90.             end
  91.          
  92.           #cercle interpattern
  93.           when 1
  94.             if timerFrame == 10
  95.               #on update le compteur de bullet
  96.               timerBullet = timerBullet + 1
  97.               #Tir de cercle
  98.               cercle(bulletStock,320,0,20,0,3)
  99.             end
  100.             #On verifie si on doit passer au prochain pattern
  101.             if timerFrame == 100
  102.                 timerBullet = 0
  103.                 timerPatern = timerPatern + 1
  104.                 #on reset le timer de frame
  105.                 timerFrame = 0
  106.             end
  107.          
  108.           #second pattern
  109.           when 2
  110.             if timerFrame == 5
  111.               #on update le compteur de bullet
  112.               timerBullet = timerBullet + 1
  113.               #Tir de quadrillage
  114.               ligne(bulletStock,rand(640),rand(3),3)
  115.               #On verifie si on doit passer au prochain pattern
  116.               if timerBullet == 100
  117.                 timerBullet = 0
  118.                 timerPatern = timerPatern + 1
  119.               end
  120.               #on reset le timer de frame
  121.               timerFrame = 0
  122.             end
  123.          
  124.           #cercle interpattern
  125.           when 3
  126.             if timerFrame == 10
  127.               #on update le compteur de bullet
  128.               timerBullet = timerBullet + 1
  129.               #Tir de cercle
  130.               cercle(bulletStock,320,0,20,0,3)
  131.             end
  132.             #On verifie si on doit passer au prochain pattern
  133.             if timerFrame == 100
  134.                 timerBullet = 0
  135.                 timerPatern = timerPatern + 1
  136.                 #on reset le timer de frame
  137.                 timerFrame = 0
  138.               end
  139.          
  140.           #troisième pattern : arc aim
  141.           when 4
  142.             if timerFrame == 50
  143.               #on update le compteur de bullet
  144.               timerBullet = timerBullet + 1
  145.               #Tir de arc aim
  146.               arcAim(bulletStock,hello,320,0,10,2,3)
  147.               #On verifie si on doit passer au prochain pattern
  148.               if timerBullet >= 20
  149.                 timerBullet = 0
  150.                 timerPatern = timerPatern + 1
  151.               end
  152.               #on reset le timer de frame
  153.               timerFrame = 0
  154.             end
  155.            
  156.           #cercle interpattern
  157.           when 5
  158.             if timerFrame == 50
  159.               #on update le compteur de bullet
  160.               timerBullet = timerBullet + 1
  161.               #Tir de cercle
  162.               cercle(bulletStock,320,0,20,0,3)
  163.             end
  164.             #On verifie si on doit passer au prochain pattern
  165.             if timerFrame == 125
  166.                 timerBullet = 0
  167.                 timerPatern = 0
  168.                 timerPhase = timerPhase + 1
  169.                 #on reset le timer de frame
  170.                 timerFrame = 0
  171.             end
  172.  
  173.         end
  174.         #Phase 2 : on commence a combiner des pattern
  175.         when 1
  176.           case timerPatern
  177.           #pattern 1 : cône aim
  178.             when 0
  179.               if timerFrame == 8
  180.                 #on update le compteur de bullet
  181.                 timerBullet = timerBullet + 1
  182.                 #Tir de cône
  183.                 bulletCone(bulletStock,hello,320,0,8,3)
  184.                 #On verifie si on doit passer au prochain pattern
  185.                   if timerBullet >= 70
  186.                     timerBullet = 0
  187.                     timerPatern = timerPatern + 1
  188.                   end
  189.                 #on reset le timer de frame
  190.                 timerFrame = 0
  191.               end
  192.            
  193.             #cercle interpattern
  194.             when 1
  195.               if timerFrame == 10
  196.                 #on update le compteur de bullet
  197.                 timerBullet = timerBullet + 1
  198.                 #Tir de cercle
  199.                 cercle(bulletStock,320,0,30,0,3)
  200.               end
  201.               #On verifie si on doit passer au prochain pattern
  202.               if timerFrame >= 100
  203.                   timerBullet = 0
  204.                   timerPatern = timerPatern + 1
  205.                   #on reset le timer de frame
  206.                   timerFrame = 0
  207.               end  
  208.                
  209.             #pattern 2 : arc aim + cercle
  210.             when 2
  211.                 if timerFrame == 42
  212.                   #on update le compteur de bullet
  213.                   timerBullet = timerBullet + 1
  214.                   #Tir de arc aim
  215.                   arcAim(bulletStock,hello,320,0,10,3,3)
  216.                
  217.                   #on reset le timer de frame
  218.                   timerFrame = 0
  219.                 end
  220.                 testAim = timerBullet%5
  221.                 if testAim == 0
  222.                   cercle(bulletStock,320,0,10,0,3)
  223.                   timerBullet = timerBullet + 1
  224.                 end
  225.                 #On verifie si on doit passer au prochain pattern
  226.                 if timerBullet >= 20
  227.                   timerBullet = 0
  228.                   timerPatern = timerPatern + 1
  229.                 end
  230.                
  231.             #cercle interpattern
  232.             when 3
  233.               if timerFrame == 50
  234.                 #on update le compteur de bullet
  235.                 timerBullet = timerBullet + 1
  236.                 #Tir de cercle
  237.                 cercle(bulletStock,320,0,30,0,3)
  238.               end
  239.               #On verifie si on doit passer au prochain pattern
  240.               if timerFrame >= 125
  241.                   timerBullet = 0
  242.                   timerPatern = timerPatern + 1
  243.                   #on reset le timer de frame
  244.                   timerFrame = 0
  245.               end
  246.                
  247.             #pattern 2 : quadrillage + cercle
  248.             when 4
  249.               if timerFrame == 5
  250.                 ligne(bulletStock,rand(640),rand(3),3)
  251.                 timerBullet = timerBullet + 1
  252.                 timerFrame = 0
  253.               end
  254.               testAim = timerBullet%20
  255.               if testAim == 0
  256.                 cercle(bulletStock,320,0,10,0,3)
  257.                 timerBullet = timerBullet + 1
  258.               end
  259.               if timerBullet >= 100
  260.                   timerBullet = 0
  261.                   timerPatern = 0
  262.                   timerPhase = timerPhase + 1
  263.                 end
  264.                
  265.             #cercle interpattern
  266.             when 5
  267.               if timerFrame == 10
  268.                 #on update le compteur de bullet
  269.                 timerBullet = timerBullet + 1
  270.                 #Tir de cercle
  271.                 cercle(bulletStock,320,0,30,0,3)
  272.               end
  273.               #On verifie si on doit passer au prochain pattern
  274.               if timerFrame >= 100
  275.                   timerBullet = 0
  276.                   timerPatern = timerPatern + 1
  277.                   #on reset le timer de frame
  278.                   timerFrame = 0
  279.               end  
  280.            
  281.           end
  282.  
  283.         #Phase 3 : on combine d'autre pattern et on réduit les délay entres bullet
  284.         when 2
  285.           case timerPatern
  286.             #pattern 1 : balle aim + arcAim
  287.             when 0
  288.               if timerFrame == 10
  289.                 i = bulletStock.length
  290.                 bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
  291.                 bulletStock[i].definMove(hello.x,hello.y,3)
  292.                 timerBullet = timerBullet + 1
  293.                 timerFrame = 0
  294.               end
  295.               testAim = timerBullet%10
  296.               if testAim == 0
  297.                 arcAim(bulletStock,hello,320,0,10,2,3)
  298.                 timerBullet = timerBullet + 1
  299.               end
  300.               if timerBullet >= 100
  301.                   timerBullet = 0
  302.                   timerPatern = timerPatern + 1
  303.                 end
  304.                
  305.             #cercle interpattern
  306.             when 1
  307.               if timerFrame == 50
  308.                 #on update le compteur de bullet
  309.                 timerBullet = timerBullet + 1
  310.                 #Tir de cercle
  311.                 cercle(bulletStock,320,0,30,0,3)
  312.               end
  313.               #On verifie si on doit passer au prochain pattern
  314.               if timerFrame >= 125
  315.                   timerBullet = 0
  316.                   timerPatern = timerPatern + 1
  317.                   #on reset le timer de frame
  318.                   timerFrame = 0
  319.                 end
  320.                
  321.             #pattern 2 : quadrillage + rayon aim
  322.             when 2
  323.               if timerFrame == 5
  324.                 ligne(bulletStock,rand(640),rand(3),3)
  325.                 timerBullet = timerBullet + 1
  326.                 timerFrame = 0
  327.               end
  328.               testAim = timerBullet%10
  329.               if testAim == 0
  330.                 i = bulletStock.length
  331.                 bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
  332.                 bulletStock[i].definMove(hello.x,hello.y,3)
  333.               end
  334.               if timerBullet >= 100
  335.                   timerBullet = 0
  336.                   timerPatern = timerPatern + 1
  337.                 end
  338.                
  339.             #cercle interpattern
  340.             when 3
  341.               if timerFrame == 50
  342.                 #on update le compteur de bullet
  343.                 timerBullet = timerBullet + 1
  344.                 #Tir de cercle
  345.                 cercle(bulletStock,320,0,30,0,3)
  346.               end
  347.               #On verifie si on doit passer au prochain pattern
  348.               if timerFrame >= 125
  349.                   timerBullet = 0
  350.                   timerPatern = timerPatern + 1
  351.                   #on reset le timer de frame
  352.                   timerFrame = 0
  353.               end
  354.              
  355.             #quadrillage + arc aim
  356.             when 4
  357.               if timerFrame == 5
  358.                 ligne(bulletStock,rand(640),rand(3),3)
  359.                 timerBullet = timerBullet + 1
  360.                 timerFrame = 0
  361.               end
  362.               testAim = timerBullet%20
  363.               if testAim == 0
  364.                 arcAim(bulletStock,hello,320,0,15,1,3)
  365.                 timerBullet = timerBullet + 1
  366.               end
  367.               if timerBullet >= 150
  368.                   timerBullet = 0
  369.                   timerPatern = 0
  370.                   timerPhase = timerPhase + 1
  371.                 end
  372.             end
  373.          
  374.         when 3
  375.           boolVictory = true
  376.           break
  377.  
  378.       end
  379.       timerFrame = timerFrame + 1
  380.       #------------------------------------------------------------------
  381.      
  382.      if bulletStock.length > 250 #On supprime les bullet si il y en a trop
  383.        bulletStock.delete(0)
  384.      end
  385.     #on check les position entre bulletJoueur et courgerite
  386.     if bulletJoueur != nil && bulletJoueur.testCol(head_Courgerite.x ,head_Courgerite.y,50,50) == true
  387.       if recovery_courgerite < 1
  388.         vie_courgerite = vie_courgerite - 1
  389.         noShootToKill = false
  390.         #effet_visuels
  391.         head_Courgerite.opacity = 150
  392.         recovery_courgerite = 100
  393.       end
  394.       bulletJoueur.remove()
  395.       bulletJoueur = nil
  396.     end
  397.     if bulletJoueur != nil
  398.       bulletJoueur.update()
  399.       bulletJoueur.display()
  400.     end
  401.     #gestion du timer de recovery de courgerite
  402.     if recovery_courgerite > 0
  403.       recovery_courgerite = recovery_courgerite - 1
  404.     else
  405.       head_Courgerite.opacity = 255
  406.     end
  407.     #on check si courgerite est morte
  408.     if vie_courgerite <= 0
  409.       boolVictory = true
  410.       break
  411.     end
  412.     #on check les colision entre les bullets et le perso
  413.     if bulletStock.any? {|obj| obj.testCol(hello.x,hello.y,15,15) == true} == true
  414.       if recoveryTimer < 1
  415.         recoveryTimer = 100
  416.         vieBuffer = vieBuffer - 20
  417.       end
  418.     end
  419.     #régénération de la vie
  420.     if timerRegen >= 200 && vie < 100
  421.       vieBuffer = vieBuffer + 2
  422.       timerRegen = 0
  423.     end
  424.     timerRegen = timerRegen + 1
  425.     #on update la vie du personage
  426.     if vie > vieBuffer
  427.       vie = vie - 1
  428.     elsif vie < vieBuffer
  429.       vie = vie + 1
  430.     end
  431.     #on update la barre de vie
  432.     barreVie.update(vie)
  433.     #on verifie la condition de game over
  434.     if vie <= 0
  435.       boolVictory = false
  436.       break
  437.     end
  438.    
  439.     #on vérifie si il y a des bullets en dehors de l'écran et on les supprimes
  440.     if bulletStock.any? {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500} == true
  441.       bulletStock.find {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}.remove()
  442.       bulletStock.delete_if {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}
  443.     end
  444.  
  445.     #on mets a jour chaque bullet
  446.     for bullet in bulletStock
  447.       bullet.update()
  448.       bullet.display()
  449.     end
  450.    
  451.     animationTimer = animationTimer + 1
  452.    
  453.     if animationTimer == 10
  454.       hello.changePicture("alex3")
  455.     end
  456.    
  457.     if animationTimer == 20
  458.       hello.changePicture("alex4")
  459.       animationTimer = 0
  460.     end
  461.    
  462.     #on affiche le personage en fonction de son état
  463.     if recoveryTimer > 0
  464.       hello.blink()
  465.       recoveryTimer -= 1
  466.     elsif recoveryTimer <= 0
  467.       hello.visible()
  468.     end
  469.       hello.display()        
  470.     end
  471.    
  472.     #vidage propre de l'écran
  473.     for bullet in bulletStock
  474.       bullet.remove()
  475.     end
  476.     bulletStock = []
  477.     hello.remove()
  478.     barreVie.remove()
  479.     head_Courgerite.dispose
  480.     Graphics.update
  481.     return boolVictory
  482.   end
  483. #Exemple de générateur de bullet
  484.   def soleil_rayon(arrayBullet,xInit,yInit,a,vitesse)
  485.     angle = 45 - a
  486.     for i in (arrayBullet.length)...(arrayBullet.length + 10 + a/5)
  487.       arrayBullet[i] = TransBullet.new("bullet_courgerite",320,80)
  488.       arrayBullet[i].definMove(2,(angle * Math::PI)/180)
  489.     angle = angle + 10
  490.     end
  491.   end
  492.  
  493. #Génère un arc de bullet qui va vers le perso
  494.   def arcAim(arrayBullet,personage,xInit,yInit,nbBullet,angBtwBullet,vitesse)
  495.     angle = personage.getAngleFrom(xInit,yInit)
  496.     o = 0
  497.     for i in (arrayBullet.length)...(arrayBullet.length + nbBullet)
  498.       a = angle + ( (-1)**o * ((angBtwBullet * Math::PI)/180)*o)
  499.       arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  500.       arrayBullet[i].definMove(vitesse,a)
  501.       o = o + 1
  502.     end
  503.   end
  504.  
  505. #génère une bullet qui va vers le perso avec un cone d'aléatoire
  506.   def bulletCone(arrayBullet,personage,xInit,yInit,angleEcart,vitesse)
  507.     angle = personage.getAngleFrom(xInit,yInit)
  508.     i = arrayBullet.length
  509.     a = angle + (((rand(angleEcart)-angleEcart/2) * Math::PI)/180)
  510.     arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  511.     arrayBullet[i].definMove(vitesse,a)
  512.   end
  513.  
  514. #génère un cercle de bullet
  515.   def cercle(arrayBullet,xInit,yInit,nbBullet,angleInit,vitesse)
  516.     a = angleInit
  517.     i = arrayBullet.length
  518.     while a <= Math::PI
  519.       arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  520.       arrayBullet[i].definMove(vitesse,a)
  521.       a = a + (Math::PI/(nbBullet))
  522.       i = i + 1
  523.     end
  524.   end
  525.  
  526.   #génère une bulet qui suit une ligne horizontale ou verticale aléatoire
  527.   def ligne(arrayBullet,posInit,sens,vitesse)
  528.     #on paramètre la position de la bullet initiale
  529.     case sens
  530.       when 0 #bullet va vers la droite
  531.         a = 0
  532.         x = 0
  533.         y = posInit
  534.       when 1 #bullet va vers le bas
  535.         a = Math::PI/2
  536.         x = posInit
  537.         y = 0
  538.       when 2 #bullet va vers la gauche
  539.         a = Math::PI
  540.         x = 645
  541.         y = posInit
  542.       when 3 #bullet va vers le haut
  543.         a = -Math::PI/2
  544.         x = posInit
  545.         y = 485
  546.     end
  547.      
  548.     i = arrayBullet.length
  549.     arrayBullet[i] = TransBullet.new("bullet_courgerite",x,y)
  550.     arrayBullet[i].definMove(vitesse,a)
  551.   end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement