Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Classe deffinissant le personage de la phase shmup
- class Personagesmup
- #Initialisation du personage
- def initialize(picture,x,y)
- @perso_sprite=Sprite.new #Paramétrage du sprite
- @perso_sprite.bitmap=RPG::Cache.picture(picture) #paramétrage de l'image à utiliser
- @perso_sprite.ox = @perso_sprite.bitmap.width/2
- @perso_sprite.oy = @perso_sprite.bitmap.height/2
- #@perso_sprite.zoom_x = 0.5
- #@perso_sprite.zoom_y = 0.5
- @x = x
- @y = y
- @p = picture
- @delay = 0
- end
- #fct qui renvoie la position en x du Perso
- def x
- @x
- end
- #fct qui renvoie la position en y du Perso
- def y
- @y
- end
- #Change le sprite de l'objet personage
- def changePicture(pic)
- @perso_sprite.bitmap=RPG::Cache.picture(pic)
- end
- #renvoie l'angle entre un point A et le personage
- def getAngleFrom(xInit,yInit)
- lx = -(@x - xInit) #on calcule la longueur des cotés du triangle rectangle ayant
- ly = @y - yInit #la bullet et la cible aux extrémité de l'hypoténuse pour calculer
- lh = Math.sqrt(lx*lx + ly*ly)
- angle = Math.asin(lx/lh) + Math::PI/2
- return angle
- end
- #fct qui affiche le sprite du personage aux coordonées du personage
- def display()
- @perso_sprite.x=@x
- @perso_sprite.y=@y
- end
- #liberer le sprite
- def remove()
- @perso_sprite.dispose
- end
- #feedback des frames d'invulnérabilité
- def blink()
- @perso_sprite.opacity = 255/2
- end
- #reset du sprite lorsque le personage est de nouveau vulnérable
- def visible()
- @perso_sprite.opacity = 255
- end
- #fct qui permet de bouger le personage
- def translate(x,y)
- if @x <= 0 && x <= 0
- x = 0
- elsif @x >= 640 && x >= 0
- x = 0
- end
- if @y <= 0 && y <= 0
- y = 0
- elsif @y >= 480 && y >= 0
- y = 0
- end
- @x = @x + x
- @y = @y + y
- end
- end
- class BarreVie
- def initialize(pictureCadre,pictureBarre,x,y,valeurMax)
- #init du cadre
- @cadreVie=Sprite.new
- @cadreVie.bitmap=RPG::Cache.picture(pictureCadre)
- @cadreVie.x=x
- @cadreVie.y=y
- #initialisation de la barre de vie
- @barreVie=Sprite.new
- @barreVie.bitmap=RPG::Cache.picture(pictureBarre)#paramétrage de l'image à utiliser
- @barreVie.x=x
- @barreVie.y=y
- @vMax = valeurMax
- end
- #on met a jour le sprite de la barre pour refleter la valeur à afficher
- def update(valeur)
- @barreVie.zoom_x = valeur.to_f / @vMax
- end
- #liberer le sprite
- def remove()
- @barreVie.dispose
- @cadreVie.dispose
- end
- end
- #Modèle de basse des bullets
- class Bulletsmup
- #initialisation de la bullet
- def initialize(picture,x,y)
- @bullet_sprite=Sprite.new
- @bullet_sprite.bitmap=RPG::Cache.picture(picture)#paramétrage de l'image à utiliser
- @bullet_sprite.ox = @bullet_sprite.bitmap.width / 2
- @bullet_sprite.oy = @bullet_sprite.bitmap.height / 2
- #paramétrage de la position initiale
- @x = x
- @y = y
- @xInit = x
- @yInit = y
- @p = picture
- end
- #fct qui affiche le sprite de la bullet aux coordonées de la bullet
- def display()
- @bullet_sprite.x=@x
- @bullet_sprite.y=@y
- end
- #fct pour enlever le sprite de la bullet lors de la suppression de celle-ci
- def remove()
- @bullet_sprite.dispose
- end
- #renvoie la position de la bullet sur l'axe x
- def x
- @x
- end
- #renvoie la position de la bullet sur l'axe y
- def y
- @y
- end
- #fct qui vérifie la colision avec un objet dont on connait les coordonées et les dimensions
- def testCol(xPerso,yPerso,largPerso,hautPerso)
- if (@x - largPerso) < xPerso && (@x + largPerso) > xPerso && (@y - hautPerso) < yPerso && (@y + hautPerso) > yPerso
- return true
- else
- return false
- end
- end
- end
- #Bullet qui suit un mouvement rectiligne uniforme paramétré de manière fixe
- class TransBullet < Bulletsmup
- #on défini le movement avec des coordonées polaires que l'on converit en coordonées cartésienne
- def definMove(rayon,arg)
- @bullet_sprite.angle = -((arg*180)/Math::PI) - 90 #rotation du sprite en foction de l'angle de la bullet
- @tX = rayon * Math.cos(arg)
- @tY = rayon * Math.sin(arg)
- end
- #fct qui actualise la position de la bullet
- def update()
- @x = @x + @tX
- @y = @y + @tY
- end
- end
- #Bullet qui suit un mouvement rectiligne uniforme paramétré en fonction de la position d'une cible
- class AimBullet < Bulletsmup
- def definMove(xCible,yCible,vitesse)
- lx = xCible - @xInit #on calcule la longueur des cotés du triangle rectangle ayant
- ly = yCible - @yInit #la bullet et la cible aux extrémité de l'hypoténuse pour calculer
- lh = Math.sqrt(lx*lx + ly*ly) #l'angle de tir, puis on convertit cet angle et la vitesse
- @tX = vitesse * lh/180 * lx/lh #en coordonées cartésienne
- @tY = vitesse * lh/180 * ly/lh
- @bullet_sprite.angle = ((Math.asin(lx/lh)*180)/Math::PI) #rotation du sprite en foction de l'angle de la bullet
- end
- #fct qui actualise la position de la bullet
- def update()
- @x = @x + @tX
- @y = @y + @tY
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement