Advertisement
Guest User

Script Danmaku 3 : template

a guest
May 28th, 2017
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.70 KB | None | 0 0
  1. #Si vous voyer un commentaire A MODIFIER en fin de ligne,cela veut dire que vous devez personaliser la ligne
  2.  
  3. #Lexique des abréviations:
  4. #posx : Position de l'objet selon l'axe x
  5. #posy : Position de l'objet selon l'axe x
  6.  
  7. #Fct loop de la phase shmup
  8. def looper2()
  9.   #--Chose a modifier pour personaliser votre phase de Shmup lors de l'initialisation--
  10.   perso = Personagesmup.new("Image de votre perso",posx,posy) #on crée un objet personage A MODIFIER
  11.   vitesse_personage = 5 #on paramètre la vitesse du personage en pixel par frame
  12.   vie = 100 #Variable qui stocke les points de vie de vos perso A MODIFIER
  13.   temps_de_recharge = 500#Temps que mets le tir a se recharger A MODIFIER
  14.   barreShoot = BarreVie.new("cadre de la jauge","contenu de la jauge",posx,posy,temps_de_recharge) #Barre montrant si le tir est chargée A MODIFIER
  15.   barreVie = BarreVie.new("cadre de la jauge","contenu de la jauge",posx,posy,vie) #Barre de vie A MODIFIER
  16.   #A MODIFIER (Modifiez hitbox_x_balle_perso et hitbox_y_balle_perso pour parametrer la taille en pixel de la hitbox des balles des ennemies)
  17.   hitbox_x_balle_ennemie = 15
  18.   hitbox_x_balle_ennemie = 15
  19.   #A MODIFIER (Modifiez hitbox_x_balle_perso et hitbox_y_balle_perso pour parametrer la taille en pixel de la hitbox des balles du personage)
  20.   hitbox_x_balle_perso = 50
  21.   hitbox_y_balle_perso = 50
  22.  
  23.   #--On initialise le "Boss"-- Le boss n'est pas très sofistiqué
  24.   sprite_Boss = Sprite.new #NE PAS MODIFIER
  25.   sprite_Boss.bitmap = RPG::Cache.picture("image de votre boss") #A MODIFIER
  26.   sprite_Boss.x = posx #Position de départ du boss selon x A MODIFIER
  27.   sprite_Boss.y = posy #Position de départ du boss selon y A MODIFIER
  28.   sprite_Boss.z = 10 #Position selon z : Cette valeur permet de garder le sprite du Boss au dessus du reste
  29.   vie_Boss = 10 #Nb de tir que prend le boss a mourir A MODIFIER
  30.  
  31.  
  32.   #--Variables à ne pas modifier--
  33.   recovery_Boss = 0 #NE PAS MODIFIER
  34.   sprite_Boss.ox = sprite_Boss.bitmap.width/2 #NE PAS MODIFIER (permet de centrer le repere en fonction de l'image selon l'axe x)
  35.   sprite_Boss.oy = sprite_Boss.bitmap.height/2 #NE PAS MODIFIER (permet de centrer le repere en fonction de l'image selon l'axe y)
  36.   timerBoss = 0 #NE PAS MODIFIER
  37.   timerPatern = 0
  38.   timerBullet = 0
  39.   animationTimer = 0
  40.   recoveryTimer = 0 # on met le timer de frame d'invulnérabilité à 0
  41.   vieBuffer = vie #Cette variable sert juste a afficher fluidement les changements de points de vie dans la barre de vie
  42.   bulletStock = [] #chaque bullet est stocké dans le tableau
  43.   timerRegen = 0
  44.   boolVictory = false
  45.   timerShoot = 0
  46.   bulletJoueur = nil
  47.   noShootToKill = true #Si vous avez touché avec un tir le boss, cette valeurs passe a Faux
  48.  
  49.   loop do
  50.      Graphics.update #On attend une frame
  51.      Input.update #on update le lecteur d'input
  52.      
  53.      #on applique les commandes demanndé par les inputs (si haut est préssé, on va en haut)
  54.     #syntaxe de la fonction translate : objet_perso.translate(translation selon x, translation selon y)
  55.       if Input.press?(Input::UP)
  56.         perso.translate(0,-vitesse_personage)
  57.       end
  58.       if Input.press?(Input::LEFT)
  59.         perso.translate(-vitesse_personage,0)
  60.       end
  61.       if Input.press?(Input::RIGHT)
  62.         perso.translate(vitesse_personage,0)
  63.       end
  64.       if Input.press?(Input::DOWN)
  65.         perso.translate(0,vitesse_personage)
  66.       end
  67.       if Input.press?(Input::C)
  68.         if timerShoot == temps_de_recharge
  69.           bulletJoueur = TransBullet.new("bitmap de la balle du personage",perso.x,perso.y) #A MODIFIER (ne modifiez que le bitmap de la balle)
  70.           bulletJoueur.definMove(6,-Math::PI/2) #A MODIFIER (on paramètre ici la vitesse et l'angle de départ (en radian) de la balle)
  71.           timerShoot = 0
  72.           barreShoot.update(timerShoot)
  73.         end
  74.       end
  75.      
  76.       if timerShoot < temps_de_recharge
  77.         timerShoot = timerShoot + 1
  78.         barreShoot.update(timerShoot)
  79.       end
  80.       #Déplacement du sprite du boss
  81.       sprite_Boss.x = 320 + (Math.sin(timerCourgerite))*10
  82.       timerCourgerite = timerCourgerite + (Math::PI/32)
  83.      
  84.     #On crée les pattern en fonction du métronome
  85.     #----------PATTERN DEFINI DANS CETTE ZONE-----------
  86.     case timerPatern
  87.     #Chaque bloc when ... end corespond a un pattern. Pour rajouter des pattern, vous n'avez qu'a dupliquer un bloc, a changer son numéro et a changer la génération
  88.     when 0
  89.         #On genere des bullets toute les X frames
  90.         if Graphics.frame_count % 10 == 0
  91.         #Génération des bullets
  92.             #Génération manuelle
  93.             i = bulletStock.length
  94.             bulletStock[i] = AimBullet.new("image de la balle",posx,posy) #On ajoute une balle au tableau des balles
  95.             bulletStock[i].definMove(hello.x,hello.y,3) #On paramètre son mouvement (cf script ShmupClasses)
  96.             #Génération assisté
  97.             cercle(bulletStock,320,0,20,0,3) #Vous utiliser une des fonctions de génération de bulle de cette manière : generateur(paramètre du générateur cf bas de page)
  98.         #On incrémente la variable comptant le nombre de tir que l'on a effectué (et pas le nombre de balle tiré)
  99.         timerBullet = timerBullet + 1
  100.         end
  101.         #On passe au pattern suivant si on a répété le patern actuel Y fois
  102.         if timerBullet >= 50
  103.         timerPatern = timerPatern + 1
  104.         end
  105.     end
  106.     #------------------------------------------------------------------
  107.      
  108.      if bulletStock.length > 250 #On supprime les bullet si il y en a trop pour eviter les lags
  109.        bulletStock.delete(0)
  110.      end
  111.     #on check les position entre bulletJoueur et courgerite
  112.     if bulletJoueur != nil && bulletJoueur.testCol(sprite_Boss.x ,sprite_Boss.y,hitbox_x_balle_perso,hitbox_y_balle_perso) == true
  113.       if recovery_courgerite < 1
  114.         vie_courgerite = vie_courgerite - 1
  115.         noShootToKill = false
  116.         #effet_visuels
  117.         sprite_Boss.opacity = 150
  118.         recovery_courgerite = 100
  119.       end
  120.       bulletJoueur.remove()
  121.       bulletJoueur = nil
  122.     end
  123.     if bulletJoueur != nil
  124.       bulletJoueur.update()
  125.       bulletJoueur.display()
  126.     end
  127.     #gestion du timer de recovery de courgerite
  128.     if recovery_courgerite > 0
  129.       recovery_courgerite = recovery_courgerite - 1
  130.     else
  131.       sprite_Boss.opacity = 255
  132.     end
  133.     #on check si courgerite est morte
  134.     if vie_courgerite <= 0
  135.       boolVictory = true
  136.       break
  137.     end
  138.     #on check les colision entre les bullets et le perso
  139.     if bulletStock.any? {|obj| obj.testCol(perso.x,perso.y,hitbox_x_balle_ennemie,hitbox_y_balle_ennemie) == true} == true
  140.       if recoveryTimer < 1
  141.         recoveryTimer = 100
  142.         vieBuffer = vieBuffer - 20
  143.       end
  144.     end
  145.  
  146.     #---régénération de la vie --- (Vous pouvez supprimer ce paragraphe de code si vous ne voulez pas de régen)
  147.     if timerRegen >= 200 && vie < 100
  148.       vieBuffer = vieBuffer + 2
  149.       timerRegen = 0
  150.     end
  151.     timerRegen = timerRegen + 1
  152.    
  153.     #on update la vie du personage
  154.     if vie > vieBuffer
  155.       vie = vie - 1
  156.     elsif vie < vieBuffer
  157.       vie = vie + 1
  158.     end
  159.     #on update la barre de vie
  160.     barreVie.update(vie)
  161.     #on verifie la condition de game over
  162.     if vie <= 0
  163.       boolVictory = false
  164.       break
  165.     end
  166.    
  167.     #on vérifie si il y a des bullets en dehors de l'écran et on les supprimes
  168.     if bulletStock.any? {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500} == true
  169.       bulletStock.find {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}.remove()
  170.       bulletStock.delete_if {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}
  171.     end
  172.  
  173.     #on mets a jour chaque bullet
  174.     for bullet in bulletStock
  175.       bullet.update()
  176.       bullet.display()
  177.     end
  178.    
  179.     #on affiche le personage en fonction de son état
  180.     if recoveryTimer > 0
  181.       perso.blink()
  182.       recoveryTimer -= 1
  183.     elsif recoveryTimer <= 0
  184.       perso.visible()
  185.     end
  186.       perso.display()        
  187.     end
  188.    
  189.     #vidage propre de l'écran
  190.     for bullet in bulletStock
  191.       bullet.remove()
  192.     end
  193.     bulletStock = []
  194.     perso.remove()
  195.     barreVie.remove()
  196.     sprite_Boss.dispose
  197.     Graphics.update
  198.     return boolVictory
  199. end
  200.  
  201. #---------GENERATEUR DE BULLET---------------
  202. #Les générateur de bullets sont des fonctions qui permette d'ajouter une balle ou un groupe de balle avec un comportement prédéfini (Balle a tête chercheure, arc de cercle de balle a tête chercheuse, etc)
  203.  
  204. #Exemple de générateur de bullet
  205.   def soleil_rayon(arrayBullet,xInit,yInit,angle,vitesse) #Paramètres : Tableau stockant les balles(ici bulletStock),position de départ selon x, position de départ selon y, angle d'étalement de l'arc de cercle en fonction de l'axe vertical, vitesse des balles
  206.     a = 45 - angle
  207.     for i in (arrayBullet.length)...(arrayBullet.length + 10 + angle/5)
  208.       arrayBullet[i] = TransBullet.new("bullet_courgerite",posx,posy)
  209.       arrayBullet[i].definMove(2,(a * Math::PI)/180)
  210.     a = a + 10
  211.     end
  212.   end
  213.  
  214. #Génère un arc de bullet qui va vers le perso
  215.   def arcAim(arrayBullet,personage,xInit,yInit,nbBullet,angBtwBullet,vitesse) #Paramètres : Tableau stockant les balles(ici bulletStock),objet personage (ici perso) ,position de départ selon x, position de départ selon y, nombre de balle composant l'arc de cercle, angle entre chaque balle, vitesse des balles
  216.     angle = personage.getAngleFrom(xInit,yInit)
  217.     o = 0
  218.     for i in (arrayBullet.length)...(arrayBullet.length + nbBullet)
  219.       a = angle + ( (-1)**o * ((angBtwBullet * Math::PI)/180)*o)
  220.       arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  221.       arrayBullet[i].definMove(vitesse,a)
  222.       o = o + 1
  223.     end
  224.   end
  225.  
  226. #génère une bullet qui va vers le perso avec un cone d'aléatoire
  227.   def bulletCone(arrayBullet,personage,xInit,yInit,angleEcart,vitesse)#Paramètres : Tableau stockant les balles(ici bulletStock),objet personage (ici perso) ,position de départ selon x, position de départ selon y, nombre de balle composant l'arc de cercle, angle du cône de présence probable de la balle, vitesse des balles
  228.     angle = personage.getAngleFrom(xInit,yInit)
  229.     i = arrayBullet.length
  230.     a = angle + (((rand(angleEcart)-angleEcart/2) * Math::PI)/180)
  231.     arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  232.     arrayBullet[i].definMove(vitesse,a)
  233.   end
  234.  
  235. #génère un cercle de bullet
  236.   def cercle(arrayBullet,xInit,yInit,nbBullet,angleInit,vitesse)#Paramètres : Tableau stockant les balles(ici bulletStock),position de départ selon x, position de départ selon y, nombre de balle dans le cercle, angle de décalage avec l'axe vertical, vitesse des balles
  237.     a = angleInit
  238.     i = arrayBullet.length
  239.     while a <= Math::PI
  240.       arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
  241.       arrayBullet[i].definMove(vitesse,a)
  242.       a = a + (Math::PI/(nbBullet))
  243.       i = i + 1
  244.     end
  245.   end
  246.  
  247.   #génère une bulet qui suit une ligne horizontale ou verticale aléatoire
  248.   def ligne(arrayBullet,position_de_départ,sens,vitesse)#Paramètres : Tableau stockant les balles(ici bulletStock),position de départ de la balle selon le sens choisi, sens de la balle, vitesse de la balle
  249.     #on paramètre la position de la bullet initiale
  250.     case sens
  251.       when 0 #bullet va vers la droite
  252.         a = 0
  253.         x = 0
  254.         y = posInit
  255.       when 1 #bullet va vers le bas
  256.         a = Math::PI/2
  257.         x = posInit
  258.         y = 0
  259.       when 2 #bullet va vers la gauche
  260.         a = Math::PI
  261.         x = 645
  262.         y = posInit
  263.       when 3 #bullet va vers le haut
  264.         a = -Math::PI/2
  265.         x = posInit
  266.         y = 485
  267.     end
  268.      
  269.     i = arrayBullet.length
  270.     arrayBullet[i] = TransBullet.new("bullet_courgerite",x,y)
  271.     arrayBullet[i].definMove(vitesse,a)
  272.   end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement