Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Si vous voyer un commentaire A MODIFIER en fin de ligne,cela veut dire que vous devez personaliser la ligne
- #Lexique des abréviations:
- #posx : Position de l'objet selon l'axe x
- #posy : Position de l'objet selon l'axe x
- #Fct loop de la phase shmup
- def looper2()
- #--Chose a modifier pour personaliser votre phase de Shmup lors de l'initialisation--
- perso = Personagesmup.new("Image de votre perso",posx,posy) #on crée un objet personage A MODIFIER
- vitesse_personage = 5 #on paramètre la vitesse du personage en pixel par frame
- vie = 100 #Variable qui stocke les points de vie de vos perso A MODIFIER
- temps_de_recharge = 500#Temps que mets le tir a se recharger A MODIFIER
- 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
- barreVie = BarreVie.new("cadre de la jauge","contenu de la jauge",posx,posy,vie) #Barre de vie A MODIFIER
- #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)
- hitbox_x_balle_ennemie = 15
- hitbox_x_balle_ennemie = 15
- #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)
- hitbox_x_balle_perso = 50
- hitbox_y_balle_perso = 50
- #--On initialise le "Boss"-- Le boss n'est pas très sofistiqué
- sprite_Boss = Sprite.new #NE PAS MODIFIER
- sprite_Boss.bitmap = RPG::Cache.picture("image de votre boss") #A MODIFIER
- sprite_Boss.x = posx #Position de départ du boss selon x A MODIFIER
- sprite_Boss.y = posy #Position de départ du boss selon y A MODIFIER
- sprite_Boss.z = 10 #Position selon z : Cette valeur permet de garder le sprite du Boss au dessus du reste
- vie_Boss = 10 #Nb de tir que prend le boss a mourir A MODIFIER
- #--Variables à ne pas modifier--
- recovery_Boss = 0 #NE PAS MODIFIER
- 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)
- 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)
- timerBoss = 0 #NE PAS MODIFIER
- timerPatern = 0
- timerBullet = 0
- animationTimer = 0
- recoveryTimer = 0 # on met le timer de frame d'invulnérabilité à 0
- vieBuffer = vie #Cette variable sert juste a afficher fluidement les changements de points de vie dans la barre de vie
- bulletStock = [] #chaque bullet est stocké dans le tableau
- timerRegen = 0
- boolVictory = false
- timerShoot = 0
- bulletJoueur = nil
- noShootToKill = true #Si vous avez touché avec un tir le boss, cette valeurs passe a Faux
- loop do
- Graphics.update #On attend une frame
- Input.update #on update le lecteur d'input
- #on applique les commandes demanndé par les inputs (si haut est préssé, on va en haut)
- #syntaxe de la fonction translate : objet_perso.translate(translation selon x, translation selon y)
- if Input.press?(Input::UP)
- perso.translate(0,-vitesse_personage)
- end
- if Input.press?(Input::LEFT)
- perso.translate(-vitesse_personage,0)
- end
- if Input.press?(Input::RIGHT)
- perso.translate(vitesse_personage,0)
- end
- if Input.press?(Input::DOWN)
- perso.translate(0,vitesse_personage)
- end
- if Input.press?(Input::C)
- if timerShoot == temps_de_recharge
- bulletJoueur = TransBullet.new("bitmap de la balle du personage",perso.x,perso.y) #A MODIFIER (ne modifiez que le bitmap de la balle)
- 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)
- timerShoot = 0
- barreShoot.update(timerShoot)
- end
- end
- if timerShoot < temps_de_recharge
- timerShoot = timerShoot + 1
- barreShoot.update(timerShoot)
- end
- #Déplacement du sprite du boss
- sprite_Boss.x = 320 + (Math.sin(timerCourgerite))*10
- timerCourgerite = timerCourgerite + (Math::PI/32)
- #On crée les pattern en fonction du métronome
- #----------PATTERN DEFINI DANS CETTE ZONE-----------
- case timerPatern
- #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
- when 0
- #On genere des bullets toute les X frames
- if Graphics.frame_count % 10 == 0
- #Génération des bullets
- #Génération manuelle
- i = bulletStock.length
- bulletStock[i] = AimBullet.new("image de la balle",posx,posy) #On ajoute une balle au tableau des balles
- bulletStock[i].definMove(hello.x,hello.y,3) #On paramètre son mouvement (cf script ShmupClasses)
- #Génération assisté
- 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)
- #On incrémente la variable comptant le nombre de tir que l'on a effectué (et pas le nombre de balle tiré)
- timerBullet = timerBullet + 1
- end
- #On passe au pattern suivant si on a répété le patern actuel Y fois
- if timerBullet >= 50
- timerPatern = timerPatern + 1
- end
- end
- #------------------------------------------------------------------
- if bulletStock.length > 250 #On supprime les bullet si il y en a trop pour eviter les lags
- bulletStock.delete(0)
- end
- #on check les position entre bulletJoueur et courgerite
- if bulletJoueur != nil && bulletJoueur.testCol(sprite_Boss.x ,sprite_Boss.y,hitbox_x_balle_perso,hitbox_y_balle_perso) == true
- if recovery_courgerite < 1
- vie_courgerite = vie_courgerite - 1
- noShootToKill = false
- #effet_visuels
- sprite_Boss.opacity = 150
- recovery_courgerite = 100
- end
- bulletJoueur.remove()
- bulletJoueur = nil
- end
- if bulletJoueur != nil
- bulletJoueur.update()
- bulletJoueur.display()
- end
- #gestion du timer de recovery de courgerite
- if recovery_courgerite > 0
- recovery_courgerite = recovery_courgerite - 1
- else
- sprite_Boss.opacity = 255
- end
- #on check si courgerite est morte
- if vie_courgerite <= 0
- boolVictory = true
- break
- end
- #on check les colision entre les bullets et le perso
- if bulletStock.any? {|obj| obj.testCol(perso.x,perso.y,hitbox_x_balle_ennemie,hitbox_y_balle_ennemie) == true} == true
- if recoveryTimer < 1
- recoveryTimer = 100
- vieBuffer = vieBuffer - 20
- end
- end
- #---régénération de la vie --- (Vous pouvez supprimer ce paragraphe de code si vous ne voulez pas de régen)
- if timerRegen >= 200 && vie < 100
- vieBuffer = vieBuffer + 2
- timerRegen = 0
- end
- timerRegen = timerRegen + 1
- #on update la vie du personage
- if vie > vieBuffer
- vie = vie - 1
- elsif vie < vieBuffer
- vie = vie + 1
- end
- #on update la barre de vie
- barreVie.update(vie)
- #on verifie la condition de game over
- if vie <= 0
- boolVictory = false
- break
- end
- #on vérifie si il y a des bullets en dehors de l'écran et on les supprimes
- if bulletStock.any? {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500} == true
- bulletStock.find {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}.remove()
- bulletStock.delete_if {|obj| obj.x < -20 || obj.x > 660 || obj.y < -20 || obj.y > 500}
- end
- #on mets a jour chaque bullet
- for bullet in bulletStock
- bullet.update()
- bullet.display()
- end
- #on affiche le personage en fonction de son état
- if recoveryTimer > 0
- perso.blink()
- recoveryTimer -= 1
- elsif recoveryTimer <= 0
- perso.visible()
- end
- perso.display()
- end
- #vidage propre de l'écran
- for bullet in bulletStock
- bullet.remove()
- end
- bulletStock = []
- perso.remove()
- barreVie.remove()
- sprite_Boss.dispose
- Graphics.update
- return boolVictory
- end
- #---------GENERATEUR DE BULLET---------------
- #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)
- #Exemple de générateur de bullet
- 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
- a = 45 - angle
- for i in (arrayBullet.length)...(arrayBullet.length + 10 + angle/5)
- arrayBullet[i] = TransBullet.new("bullet_courgerite",posx,posy)
- arrayBullet[i].definMove(2,(a * Math::PI)/180)
- a = a + 10
- end
- end
- #Génère un arc de bullet qui va vers le perso
- 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
- angle = personage.getAngleFrom(xInit,yInit)
- o = 0
- for i in (arrayBullet.length)...(arrayBullet.length + nbBullet)
- a = angle + ( (-1)**o * ((angBtwBullet * Math::PI)/180)*o)
- arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
- arrayBullet[i].definMove(vitesse,a)
- o = o + 1
- end
- end
- #génère une bullet qui va vers le perso avec un cone d'aléatoire
- 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
- angle = personage.getAngleFrom(xInit,yInit)
- i = arrayBullet.length
- a = angle + (((rand(angleEcart)-angleEcart/2) * Math::PI)/180)
- arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
- arrayBullet[i].definMove(vitesse,a)
- end
- #génère un cercle de bullet
- 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
- a = angleInit
- i = arrayBullet.length
- while a <= Math::PI
- arrayBullet[i] = TransBullet.new("bullet_courgerite",xInit,yInit)
- arrayBullet[i].definMove(vitesse,a)
- a = a + (Math::PI/(nbBullet))
- i = i + 1
- end
- end
- #génère une bulet qui suit une ligne horizontale ou verticale aléatoire
- 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
- #on paramètre la position de la bullet initiale
- case sens
- when 0 #bullet va vers la droite
- a = 0
- x = 0
- y = posInit
- when 1 #bullet va vers le bas
- a = Math::PI/2
- x = posInit
- y = 0
- when 2 #bullet va vers la gauche
- a = Math::PI
- x = 645
- y = posInit
- when 3 #bullet va vers le haut
- a = -Math::PI/2
- x = posInit
- y = 485
- end
- i = arrayBullet.length
- arrayBullet[i] = TransBullet.new("bullet_courgerite",x,y)
- arrayBullet[i].definMove(vitesse,a)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement