Advertisement
Guest User

Script Danmaku 1 : ShmupClasses

a guest
Feb 26th, 2017
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.13 KB | None | 0 0
  1. #Classe deffinissant le personage de la phase shmup
  2. class Personagesmup
  3.   #Initialisation du personage
  4.   def initialize(picture,x,y)
  5.     @perso_sprite=Sprite.new  #Paramétrage du sprite
  6.     @perso_sprite.bitmap=RPG::Cache.picture(picture) #paramétrage de l'image à utiliser
  7.     @perso_sprite.ox = @perso_sprite.bitmap.width/2
  8.     @perso_sprite.oy = @perso_sprite.bitmap.height/2
  9.     #@perso_sprite.zoom_x = 0.5
  10.     #@perso_sprite.zoom_y = 0.5
  11.     @x = x
  12.     @y = y
  13.     @p = picture
  14.     @delay = 0
  15.   end
  16.   #fct qui renvoie la position en x du Perso
  17.   def x
  18.     @x
  19.   end
  20.   #fct qui renvoie la position en y du Perso
  21.   def y
  22.     @y
  23.   end
  24.   #Change le sprite de l'objet personage
  25.   def changePicture(pic)
  26.     @perso_sprite.bitmap=RPG::Cache.picture(pic)
  27.   end
  28.  
  29.   #renvoie l'angle entre un point A et le personage
  30.   def getAngleFrom(xInit,yInit)
  31.     lx = -(@x - xInit)          #on calcule la longueur des cotés du triangle rectangle ayant
  32.     ly = @y - yInit          #la bullet et la cible aux extrémité de l'hypoténuse pour calculer
  33.     lh = Math.sqrt(lx*lx + ly*ly)
  34.     angle = Math.asin(lx/lh) + Math::PI/2
  35.     return angle
  36.   end
  37.  
  38.   #fct qui affiche le sprite du personage aux coordonées du personage
  39.   def display()
  40.     @perso_sprite.x=@x
  41.     @perso_sprite.y=@y
  42.   end
  43.  
  44.   #liberer le sprite
  45.   def remove()
  46.     @perso_sprite.dispose
  47.   end
  48.  
  49.   #feedback des frames d'invulnérabilité
  50.   def blink()
  51.     @perso_sprite.opacity = 255/2
  52.   end
  53.  
  54.   #reset du sprite lorsque le personage est de nouveau vulnérable
  55.   def visible()
  56.     @perso_sprite.opacity = 255
  57.   end
  58.  
  59.   #fct qui permet de bouger le personage
  60.   def translate(x,y)
  61.     if @x <= 0 && x <= 0
  62.       x = 0
  63.     elsif @x >= 640 && x >= 0
  64.       x = 0
  65.     end
  66.    
  67.     if @y <= 0 && y <= 0
  68.       y = 0
  69.     elsif @y >= 480 && y >= 0
  70.       y = 0
  71.     end
  72.    
  73.     @x = @x + x
  74.     @y = @y + y
  75.   end
  76.  
  77. end
  78.  
  79. class BarreVie
  80.   def initialize(pictureCadre,pictureBarre,x,y,valeurMax)
  81.     #init du cadre
  82.     @cadreVie=Sprite.new
  83.     @cadreVie.bitmap=RPG::Cache.picture(pictureCadre)
  84.     @cadreVie.x=x
  85.     @cadreVie.y=y
  86.     #initialisation de la barre de vie
  87.     @barreVie=Sprite.new
  88.     @barreVie.bitmap=RPG::Cache.picture(pictureBarre)#paramétrage de l'image à utiliser
  89.     @barreVie.x=x
  90.     @barreVie.y=y
  91.     @vMax = valeurMax
  92.   end
  93.   #on met a jour le sprite de la barre pour refleter la valeur à afficher
  94.   def update(valeur)
  95.     @barreVie.zoom_x = valeur.to_f / @vMax
  96.   end
  97.  
  98.     #liberer le sprite
  99.   def remove()
  100.     @barreVie.dispose
  101.     @cadreVie.dispose
  102.   end
  103.  
  104. end
  105.  
  106. #Modèle de basse des bullets
  107. class Bulletsmup
  108.   #initialisation de la bullet
  109.   def initialize(picture,x,y)
  110.     @bullet_sprite=Sprite.new
  111.     @bullet_sprite.bitmap=RPG::Cache.picture(picture)#paramétrage de l'image à utiliser
  112.     @bullet_sprite.ox = @bullet_sprite.bitmap.width / 2
  113.     @bullet_sprite.oy = @bullet_sprite.bitmap.height / 2
  114.     #paramétrage de la position initiale
  115.     @x = x
  116.     @y = y
  117.     @xInit = x
  118.     @yInit = y
  119.     @p = picture
  120.   end
  121.   #fct qui affiche le sprite de la bullet aux coordonées de la bullet
  122.   def display()
  123.     @bullet_sprite.x=@x
  124.     @bullet_sprite.y=@y
  125.   end
  126.   #fct pour enlever le sprite de la bullet lors de la suppression de celle-ci
  127.   def remove()
  128.     @bullet_sprite.dispose
  129.   end
  130.   #renvoie la position de la bullet sur l'axe x
  131.   def x
  132.     @x
  133.   end
  134.   #renvoie la position de la bullet sur l'axe y
  135.   def y
  136.     @y
  137.   end
  138.   #fct qui vérifie la colision avec un objet dont on connait les coordonées et les dimensions
  139.   def testCol(xPerso,yPerso,largPerso,hautPerso)
  140.     if (@x - largPerso) < xPerso && (@x + largPerso) > xPerso && (@y - hautPerso) < yPerso && (@y + hautPerso) > yPerso
  141.       return true
  142.     else
  143.       return false
  144.     end
  145.   end
  146.  
  147. end
  148.  
  149. #Bullet qui suit un mouvement rectiligne uniforme paramétré de manière fixe
  150. class TransBullet < Bulletsmup
  151.   #on défini le movement avec des coordonées polaires que l'on converit en coordonées cartésienne
  152.   def definMove(rayon,arg)
  153.     @bullet_sprite.angle = -((arg*180)/Math::PI) - 90  #rotation du sprite en foction de l'angle de la bullet
  154.     @tX = rayon * Math.cos(arg)
  155.     @tY = rayon * Math.sin(arg)
  156.   end
  157.   #fct qui actualise la position de la bullet
  158.   def update()
  159.     @x = @x + @tX
  160.     @y = @y + @tY
  161.   end
  162.  
  163. end
  164.  
  165. #Bullet qui suit un mouvement rectiligne uniforme paramétré en fonction de la position d'une cible
  166. class AimBullet < Bulletsmup
  167.  
  168.   def definMove(xCible,yCible,vitesse)
  169.     lx = xCible - @xInit          #on calcule la longueur des cotés du triangle rectangle ayant
  170.     ly = yCible - @yInit          #la bullet et la cible aux extrémité de l'hypoténuse pour calculer
  171.     lh = Math.sqrt(lx*lx + ly*ly)   #l'angle de tir, puis on convertit cet angle et la vitesse
  172.     @tX = vitesse * lh/180 * lx/lh  #en coordonées cartésienne
  173.     @tY = vitesse * lh/180 * ly/lh
  174.     @bullet_sprite.angle = ((Math.asin(lx/lh)*180)/Math::PI) #rotation du sprite en foction de l'angle de la bullet
  175.   end
  176.  
  177.   #fct qui actualise la position de la bullet
  178.   def update()
  179.     @x = @x + @tX
  180.     @y = @y + @tY
  181.   end
  182.  
  183. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement