Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Fct loop de la phase shmup
- def looper()
- timerPhase = 0 #A MODIFIER
- timerPatern = 0
- timerBullet = 0
- timerFrame = 0
- animationTimer = 0
- recoveryTimer = 0 # on met le timer de frame d'invulnérabilité à 0
- hello = Personagesmup.new("alex3",320,240) #on crée un objet personage
- vie = 100
- vieBuffer = 100
- barreShoot = BarreVie.new("CADRE_JAUGE_SHMUP","JAUGE_SHMUP",220,440,500)
- barreVie = BarreVie.new("CADRE_JAUGE_SHMUP","JAUGE_SHMUP",220,460,100)
- bulletStock = [] #chaque bullet est stocké dans le tableau
- timerRegen = 0
- boolVictory = false
- head_Courgerite = Sprite.new
- head_Courgerite.bitmap = RPG::Cache.picture("mooshroom head")
- head_Courgerite.ox = head_Courgerite.bitmap.width/2
- head_Courgerite.oy = head_Courgerite.bitmap.height/2
- head_Courgerite.x = 320
- head_Courgerite.y = 80
- head_Courgerite.z = 10
- head_Courgerite.zoom_x = 1.5
- head_Courgerite.zoom_y = 1.5
- timerCourgerite = 0
- vie_courgerite = 10
- recovery_courgerite = 0
- timerShoot = 0
- bulletJoueur = nil
- noShootToKill = true
- 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)
- if Input.press?(Input::UP)
- hello.translate(0,-5)
- end
- if Input.press?(Input::LEFT)
- hello.translate(-5,0)
- end
- if Input.press?(Input::RIGHT)
- hello.translate(5,0)
- end
- if Input.press?(Input::DOWN)
- hello.translate(0,5)
- end
- if Input.press?(Input::C)
- if timerShoot == 500
- bulletJoueur = TransBullet.new("beacon",hello.x,hello.y)
- bulletJoueur.definMove(6,-Math::PI/2)
- timerShoot = 0
- barreShoot.update(timerShoot)
- end
- end
- if timerShoot < 500
- timerShoot = timerShoot + 1
- barreShoot.update(timerShoot)
- end
- #On update la tete de courgerite
- head_Courgerite.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 timerPhase
- #Phase 1 : tutoriel, on présente chaque pattern au joueur
- when 0
- case timerPatern
- #premier pattern du tuto
- when 0
- if timerFrame == 10
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de bullet aim
- i = bulletStock.length
- bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
- bulletStock[i].definMove(hello.x,hello.y,3)
- #On verifie si on doit passer au prochain pattern
- if timerBullet == 30
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #on reset le timer de frame
- timerFrame = 0
- end
- #cercle interpattern
- when 1
- if timerFrame == 10
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,20,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame == 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #second pattern
- when 2
- if timerFrame == 5
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de quadrillage
- ligne(bulletStock,rand(640),rand(3),3)
- #On verifie si on doit passer au prochain pattern
- if timerBullet == 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #on reset le timer de frame
- timerFrame = 0
- end
- #cercle interpattern
- when 3
- if timerFrame == 10
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,20,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame == 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #troisième pattern : arc aim
- when 4
- if timerFrame == 50
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de arc aim
- arcAim(bulletStock,hello,320,0,10,2,3)
- #On verifie si on doit passer au prochain pattern
- if timerBullet >= 20
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #on reset le timer de frame
- timerFrame = 0
- end
- #cercle interpattern
- when 5
- if timerFrame == 50
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,20,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame == 125
- timerBullet = 0
- timerPatern = 0
- timerPhase = timerPhase + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- end
- #Phase 2 : on commence a combiner des pattern
- when 1
- case timerPatern
- #pattern 1 : cône aim
- when 0
- if timerFrame == 8
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cône
- bulletCone(bulletStock,hello,320,0,8,3)
- #On verifie si on doit passer au prochain pattern
- if timerBullet >= 70
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #on reset le timer de frame
- timerFrame = 0
- end
- #cercle interpattern
- when 1
- if timerFrame == 10
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,30,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame >= 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #pattern 2 : arc aim + cercle
- when 2
- if timerFrame == 42
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de arc aim
- arcAim(bulletStock,hello,320,0,10,3,3)
- #on reset le timer de frame
- timerFrame = 0
- end
- testAim = timerBullet%5
- if testAim == 0
- cercle(bulletStock,320,0,10,0,3)
- timerBullet = timerBullet + 1
- end
- #On verifie si on doit passer au prochain pattern
- if timerBullet >= 20
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #cercle interpattern
- when 3
- if timerFrame == 50
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,30,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame >= 125
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #pattern 2 : quadrillage + cercle
- when 4
- if timerFrame == 5
- ligne(bulletStock,rand(640),rand(3),3)
- timerBullet = timerBullet + 1
- timerFrame = 0
- end
- testAim = timerBullet%20
- if testAim == 0
- cercle(bulletStock,320,0,10,0,3)
- timerBullet = timerBullet + 1
- end
- if timerBullet >= 100
- timerBullet = 0
- timerPatern = 0
- timerPhase = timerPhase + 1
- end
- #cercle interpattern
- when 5
- if timerFrame == 10
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,30,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame >= 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- end
- #Phase 3 : on combine d'autre pattern et on réduit les délay entres bullet
- when 2
- case timerPatern
- #pattern 1 : balle aim + arcAim
- when 0
- if timerFrame == 10
- i = bulletStock.length
- bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
- bulletStock[i].definMove(hello.x,hello.y,3)
- timerBullet = timerBullet + 1
- timerFrame = 0
- end
- testAim = timerBullet%10
- if testAim == 0
- arcAim(bulletStock,hello,320,0,10,2,3)
- timerBullet = timerBullet + 1
- end
- if timerBullet >= 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #cercle interpattern
- when 1
- if timerFrame == 50
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,30,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame >= 125
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #pattern 2 : quadrillage + rayon aim
- when 2
- if timerFrame == 5
- ligne(bulletStock,rand(640),rand(3),3)
- timerBullet = timerBullet + 1
- timerFrame = 0
- end
- testAim = timerBullet%10
- if testAim == 0
- i = bulletStock.length
- bulletStock[i] = AimBullet.new("bullet_courgerite",320,0)
- bulletStock[i].definMove(hello.x,hello.y,3)
- end
- if timerBullet >= 100
- timerBullet = 0
- timerPatern = timerPatern + 1
- end
- #cercle interpattern
- when 3
- if timerFrame == 50
- #on update le compteur de bullet
- timerBullet = timerBullet + 1
- #Tir de cercle
- cercle(bulletStock,320,0,30,0,3)
- end
- #On verifie si on doit passer au prochain pattern
- if timerFrame >= 125
- timerBullet = 0
- timerPatern = timerPatern + 1
- #on reset le timer de frame
- timerFrame = 0
- end
- #quadrillage + arc aim
- when 4
- if timerFrame == 5
- ligne(bulletStock,rand(640),rand(3),3)
- timerBullet = timerBullet + 1
- timerFrame = 0
- end
- testAim = timerBullet%20
- if testAim == 0
- arcAim(bulletStock,hello,320,0,15,1,3)
- timerBullet = timerBullet + 1
- end
- if timerBullet >= 150
- timerBullet = 0
- timerPatern = 0
- timerPhase = timerPhase + 1
- end
- end
- when 3
- boolVictory = true
- break
- end
- timerFrame = timerFrame + 1
- #------------------------------------------------------------------
- if bulletStock.length > 250 #On supprime les bullet si il y en a trop
- bulletStock.delete(0)
- end
- #on check les position entre bulletJoueur et courgerite
- if bulletJoueur != nil && bulletJoueur.testCol(head_Courgerite.x ,head_Courgerite.y,50,50) == true
- if recovery_courgerite < 1
- vie_courgerite = vie_courgerite - 1
- noShootToKill = false
- #effet_visuels
- head_Courgerite.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
- head_Courgerite.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(hello.x,hello.y,15,15) == true} == true
- if recoveryTimer < 1
- recoveryTimer = 100
- vieBuffer = vieBuffer - 20
- end
- end
- #régénération de la vie
- 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
- animationTimer = animationTimer + 1
- if animationTimer == 10
- hello.changePicture("alex3")
- end
- if animationTimer == 20
- hello.changePicture("alex4")
- animationTimer = 0
- end
- #on affiche le personage en fonction de son état
- if recoveryTimer > 0
- hello.blink()
- recoveryTimer -= 1
- elsif recoveryTimer <= 0
- hello.visible()
- end
- hello.display()
- end
- #vidage propre de l'écran
- for bullet in bulletStock
- bullet.remove()
- end
- bulletStock = []
- hello.remove()
- barreVie.remove()
- head_Courgerite.dispose
- Graphics.update
- return boolVictory
- end
- #Exemple de générateur de bullet
- def soleil_rayon(arrayBullet,xInit,yInit,a,vitesse)
- angle = 45 - a
- for i in (arrayBullet.length)...(arrayBullet.length + 10 + a/5)
- arrayBullet[i] = TransBullet.new("bullet_courgerite",320,80)
- arrayBullet[i].definMove(2,(angle * Math::PI)/180)
- angle = angle + 10
- end
- end
- #Génère un arc de bullet qui va vers le perso
- def arcAim(arrayBullet,personage,xInit,yInit,nbBullet,angBtwBullet,vitesse)
- 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)
- 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)
- 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,posInit,sens,vitesse)
- #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