赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 3711 |
最后登录 | 2015-6-21 |
在线时间 | 41 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 41 小时
- 注册时间
- 2014-8-7
- 帖子
- 67
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 RyanBern 于 2015-5-3 21:49 编辑
想请问一下,如何让HP=0时不gameovr 而是像胜利时一样 提示:失败,然后返回当前地图呢?好像是在123行改,但是不知道怎么改o(╯□╰)o
还想请问如果用变量记录获得的分数? 谢谢大
#============================================================================== # ■ 雷霆战机 代码作者:杨峰 #------------------------------------------------------------------------------ # 这个脚本前后花了我一个星期的时间去完成,完全是凭借自己的力量一行一行写的。 # 都大三了,平时还要上学校一堆烂课,伤不起啊!! # 最后作品还算差强人意,就是由于素材原因飞机和子弹稍微大了点,判定也因此不 # 精准,不过不碍事。希望大家可以借此相互学习。多说一句,面向对象的设计思想 # 实在是太TM重要了! #============================================================================== class Scene_Plane def main @window_boss = Window_Boss.new @window_show = Window_Show.new @result = Window_Result.new @fly_pattern = Fly_Pattern.new @attack_pattern = Attack_Pattern.new @bg = Plane.new @bg.bitmap = RPG::Cache.picture("bg") @me = My_Plane.new @enemy_num = 0 @count = 0 @record = 0 @bomb_num = 3 @score = 0 [url=home.php?mod=space&uid=1208434]@destroy[/url] = 0 @score = 0 @destroy = 0 @speed = 0 @process = 0 @bg.zoom_x = 1.2 @bomb_ctrl = true @judge_over = true @victory = false @level_switch = false @power_switch = false @bomb_switch = false @food_switch = false @my_blast_switch = false @my_blast_hit_switch = false @boss_switch = false @bomb_blast_switch = [] @bomb_blast = [] @enemy_switch= [] @bullet_switch = [] @blast_switch = [] @blast_hit_switch = [] @blast = [] @blast_hit = [] @enemy = [] Audio.bgm_play("Audio/BGM/chuaiji") for i in 0..100 @bomb_blast_switch = [] @enemy_switch[i] = false @bullet_switch[i] = false @blast_switch[i] = false @blast_hit_switch[i] = false end Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @bg.dispose @result.dispose @window_boss.dispose @window_show.dispose for i in 0..@enemy_num if @enemy_switch[i] @enemy[i].dispose end end Audio.bgm_stop end def update @bg.oy -= 5 @speed +=1 @process +=1 back_menu shooting pl_move my_bullet_move game_process enemy_pattern eat_items bomb_blast move_items hit_you_me enemy_animation enemy_leave me_animation boss_info my_death end def shooting if Input.trigger?(Input::C) or Input.repeat?(Input::C) @me.shotn_spread end end def back_menu if Input.trigger?(Input::F5) $scene = Scene_Map.new end end def boss_info if @boss_switch @window_boss.refresh(@enemy[70].hp) if @enemy[70].mode_switch @enemy[70].attack_mode end end end def my_death if @me.hp <=0 and @judge_over game_over end end def hit_you_me for i in 0..@enemy_num if @enemy_switch[i] hit_enemy(i) end hit_myself(i) enemy_bullet_move(i) end end def enemy_animation for i in 0..@enemy_num if @blast_switch[i] @blast[i].animation if @blast[i].control == -1 @blast[i].dispose @enemy[i].dispose @blast_switch[i] = false end end end for i in 0..@enemy_num if @blast_hit_switch[i] @blast_hit[i].animation if @blast_hit[i].control == -1 @blast_hit[i].dispose @blast_hit_switch[i] = false end end end end def me_animation if @my_blast_hit_switch @my_blast_hit.animation if @my_blast_hit.control == -1 @my_blast_hit.dispose @my_blast_hit_switch = false end end if @my_blast_switch @my_blast.animation if @my_blast.control == -1 @me.dispose $scene = Scene_Gameover.new end end end def move_items if @bomb_switch @bomb.move if @bomb.pic.y >= 600 @bomb.dispose @bomb_switch = false end end if @level_switch @level.move if @level.pic.y >= 600 @level.dispose @level_switch = false end end if @power_switch @power.move if @power.pic.y >= 600 @power.dispose @power_switch = false end end if @food_switch @food.move if @food.pic.y >= 600 @food.dispose @food_switch = false end end end def bomb_blast if Input.trigger?(Input::A) if @bomb_num > 0 and @bomb_ctrl == true Audio.se_play("Audio/SE/Explosion02") @bomb_ctrl = false @bomb_num -= 1 for i in 0..@enemy_num if @enemy_switch[i] @enemy[i].hp -= 10 end end for i in 0..5 @bomb_blast_switch[i] = true case i when 0..2 @bomb_blast[i] = Blast_Explosion2.new( i * 200,50) when 3..5 @bomb_blast[i] = Blast_Explosion2.new( (i - 3) * 200,220) end end end end for i in 0..5 if @bomb_blast_switch[i] @bomb_blast[i].animation if @bomb_blast[i].control == -1 @bomb_blast[i].dispose @bomb_blast_switch[i] = false @bomb_ctrl = true end end end end def eat_items if @bomb_switch if @me.eat_bomb(@bomb.pic.x,@bomb.pic.y) @bomb_num += 1 @bomb.dispose @bomb_switch = false end end if @level_switch if @me.eat_level(@level.pic.x,@level.pic.y) @level.dispose @level_switch = false if @me.level < 4 @me.level += 2 end end end if @power_switch if @me.eat_power(@power.pic.x,@power.pic.y) @me.power += 1 @power.dispose @power_switch = false end end if @food_switch if @me.eat_food(@food.pic.x,@food.pic.y) @me.hp += 50 if @me.hp >=200 @me.hp = 200 end @food.dispose @food_switch = false end end end def enemy_leave for i in 0..@enemy_num if @enemy_switch[i] if @enemy[i].pic.x < -100 or @enemy[i].pic.x > 700 or @enemy[i].pic.y > 500 or @enemy[i].pic.y < -150 @enemy[i].dispose @enemy_switch[i] = false end end end end def enemy_pattern if @speed == 5 @result.refresh(@me.hp,@score,@destroy,@bomb_num) for i in 0..@enemy_num if @enemy_switch[i] @fly_pattern.pattern(@enemy[i],i) @attack_pattern.pattern(@me,i,@enemy[i]) end end @speed = 0 end end def game_process if @process < 100 @window_show.refresh(0) elsif @process == 100 @window_show.contents.clear Audio.se_play("Audio/SE/start") end if @process <= 250 and @process >= 50 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Li.new(-80,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Li.new(640,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 500 @enemy[@enemy_num] = Enemy_Green.new(500,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 550 @enemy[@enemy_num] = Enemy_Green.new(400,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 600 @enemy[@enemy_num] = Enemy_Green.new(300,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Toon.new(-80,150) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Toon.new(640,150) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 650 @enemy[@enemy_num] = Enemy_Green.new(200,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 700 @enemy[@enemy_num] = Enemy_Green.new(100,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 900 and @process >= 800 and @process % 100 == 0 @enemy[@enemy_num] = Enemy_Li.new(-80,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Li.new(640,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 920 @enemy[@enemy_num] = Enemy_Jit.new(100,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Jit.new(500,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 950 @enemy[@enemy_num] = Enemy_God.new(-80,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_God.new(640,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 1100 @enemy[@enemy_num] = Enemy_X.new(100,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_X.new(500,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 1350 and @process >= 1250 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Green.new(-80,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Green.new(640,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 1450 and @process >= 1400 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Li.new(-80,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Li.new(640,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 1600 @enemy[@enemy_num] = Enemy_Red.new(-80,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Red.new(640,100) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 1750 and @process >= 1650 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Ye.new(-80,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Ye.new(640,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 1900 @enemy[@enemy_num] = Enemy_Jp.new(-80,50) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Jp.new(640,50) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 2000 @enemy[@enemy_num] = Enemy_Red.new(100,500) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Red.new(400,500) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 2100 and @process >= 2000 and @process % 100 == 0 @enemy[@enemy_num] = Enemy_God.new(-80,150) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_God.new(640,250) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 2200 @enemy[@enemy_num] = Enemy_LX.new(250,-80) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 2350 and @process >= 2250 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Green.new(-80,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Green.new(640,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 2600 and @process >= 2500 and @process % 100 == 0 @enemy[@enemy_num] = Enemy_Li.new(-80,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Li.new(640,200) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process == 2700 @enemy[@enemy_num] = Enemy_LX.new(-80,50) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_LX.new(640,50) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process <= 2800 and @process >= 2750 and @process % 50 == 0 @enemy[@enemy_num] = Enemy_Toon.new(-80,250) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 @enemy[@enemy_num] = Enemy_Toon.new(640,250) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @enemy_num += 1 end if @process < 3100 and @process>= 3000 @window_show.refresh(1) elsif @process == 3100 @window_show.contents.clear Audio.bgm_stop Audio.se_play("Audio/SE/warning") end if @process == 3200 @enemy[@enemy_num] = Enemy_Boss.new(150,-120) @enemy_switch[@enemy_num] = true @bullet_switch[@enemy_num] = true @boss_switch = true @enemy_num += 1 Audio.bgm_play("Audio/BGM/action_world2") end if @victory and @record == 0 Audio.me_play("Audio/ME/victory") @record = @process end if @victory if @process != @record + 100 @window_show.refresh(2) else $scene = Scene_Map.new end end end def hit_myself(turn) if @bullet_switch[turn] for i in 0..@enemy[turn].bullet_num if @enemy[turn].attack[i] if(@me.hit(@enemy[turn].bullet[i].pic.x,@enemy[turn].bullet[i].pic.y,@enemy[turn].bullet[i].power)) if @me.hp > 0 and @my_blast_hit_switch == false @my_blast_hit_switch = true @my_blast_hit = Blast_Hit.new(@me.pic.x - 30 ,@me.pic.y - 30) end @enemy[turn].bullet[i].dispose @enemy[turn].attack[i] = false end end end end end def game_over Audio.se_play("Audio/SE/Explosion04") @my_blast = Blast_Explosion.new(@me.pic.x - 25,@me.pic.y - 25) @my_blast_switch = true @judge_over = false end def hit_enemy(turn) for i in [email]0..@me.bullet_num[/email] if @me.attack[i] if(@enemy[turn].hit(@me.bullet[i].pic.x,@me.bullet[i].pic.y,@me.power)) if @enemy[turn].hp > 0 and @blast_hit_switch[turn] == false @blast_hit[turn] = Blast_Hit.new(@enemy[turn].pic.x- 20 ,@enemy[turn].pic.y) @blast_hit_switch[turn] = true end @me.bullet[i].dispose @me.attack[i] = false end end end if @enemy[turn].hp <= 0 @score += 10 * @enemy[turn].level @destroy += 1 Audio.se_play("Audio/SE/Explosion01") @blast[turn] = Blast_Explosion.new(@enemy[turn].pic.x - 30,@enemy[turn].pic.y) @blast_switch[turn] = true @enemy_switch[turn] = false if turn == 4 or turn == 21 or turn == 53 or turn == 64 @bomb = Bomb.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40) @bomb_switch = true end if turn == 12 or turn == 34 or turn == 47 or turn == 65 @level = Level.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40) @level_switch = true end if turn == 33 @power = Power.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40) @power_switch = true end if turn == 30 or turn == 66 @food = Food.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40) @food_switch = true end if turn == 70 @victory = true end end end def enemy_bullet_move(turn) if @bullet_switch[turn] for i in 0..@enemy[turn].bullet_num if @enemy[turn].attack[i] if @enemy[turn].bullet[i].type == 0 @enemy[turn].bullet[i].down_fly end if @enemy[turn].bullet[i].type == 1 @enemy[turn].bullet[i].search_fly(1) end if @enemy[turn].bullet[i].type == 2 @enemy[turn].bullet[i].search_fly(1) end if @enemy[turn].bullet[i].pic.y >=500 @enemy[turn].attack[i]=false @enemy[turn].bullet[i].dispose end end end end end def my_bullet_move for i in @[email]count..@me.bullet_num[/email] if @me.attack[i] @me.bullet[i].search_fly(2) if @me.bullet[i].pic.y <= -60 @me.attack[i]=false @me.bullet[i].dispose @count += 1 end end end end def pl_move if Input.trigger?(Input::UP) or Input.repeat?(Input::UP) if @me.pic.y>=0 @me.pic.y-=20 end end if Input.trigger?(Input::RIGHT) or Input.repeat?(Input::RIGHT) if @me.pic.x<=520 @me.pic.x+=20 end end if Input.trigger?(Input::DOWN) or Input.repeat?(Input::DOWN) if @me.pic.y <=380 @me.pic.y+=20 end end if Input.trigger?(Input::LEFT) or Input.repeat?(Input::LEFT) if @me.pic.x>=0 @me.pic.x-=20 end end end end class My_Plane attr_accessor :pic attr_accessor :hp attr_accessor :power attr_accessor :level attr_accessor :bullet attr_accessor :bullet_num attr_accessor :attack def initialize @hp = 200 @attack = false @level = 0 @power = 1 @pic = Sprite.new @pic.x = 300 @pic.y = 360 @pic.bitmap = RPG::Cache.picture("BluePlane") @attack = [] @bullet = [] @bullet_num = 0 end def eat_bomb(x,y) if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y Audio.se_play("Audio/SE/eatbomb") return true else return false end end def eat_level(x,y) if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y Audio.se_play("Audio/SE/eatlevel") return true else return false end end def eat_power(x,y) if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y Audio.se_play("Audio/SE/eatpower") return true else return false end end def eat_food(x,y) if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y Audio.se_play("Audio/SE/eatlevel") return true else return false end end def shotn_spread for i in 0..@level shot_spread(i) end end def shot_spread(place) Audio.se_play("Audio/SE/destroyer_lazer1") @bullet[@bullet_num] = My_Bullet.new(@power) angle = Math::PI * (place + 1) / (@level + 2) x = Math.cos(angle) y = Math.sin(angle) if x == 0 @bullet[@bullet_num].ratiox = 0 @bullet[@bullet_num].ratio = 1 @bullet[@bullet_num].ratioy = -1 else @bullet[@bullet_num].ratio = y / x if @bullet[@bullet_num].ratio > 0 @bullet[@bullet_num].ratiox = -1 @bullet[@bullet_num].ratioy = -1 else @bullet[@bullet_num].ratiox = 1 @bullet[@bullet_num].ratioy = 1 end end if @power == 1 @bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + 30 @bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) - 30 elsif @power ==2 @bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) @bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) - 60 end @attack[@bullet_num] = true @bullet_num += 1 end def hit(x,y,power) if x >= @pic.x and x <= @pic.x + 70 and y >= @pic.y and y <= @pic.y + 40 @hp -= power Audio.se_play("Audio/SE/lazer_hit") return true end return false end def dispose @pic.dispose end end class Enemy_Plane attr_accessor :pic attr_accessor :boss_suit attr_accessor :width attr_accessor :hp attr_accessor :power attr_accessor :level attr_accessor :speed attr_accessor :attack_type attr_accessor :bullet attr_accessor :bullet_size attr_accessor :bullet_num attr_accessor :attack def initialize(x,y) @pic = Sprite.new @pic.x = x @pic.y = y @level = 1 @power = 1 @boss_suit = 0 @speed = 1 @bullet_size = 0 @attack_type = 0 @bullet_num = 0 @width = 128 @bullet = [] @attack = [] end def shot_forward(place,num) Audio.se_play("Audio/SE/117-Fire01") @bullet[@bullet_num] = Enemy_Bullet.new(@power) @bullet[@bullet_num].type = 0 if @power == 1 @bullet[@bullet_num].pic.x = @pic.x + (place + 1) * @width/ (num + 2) - 30 + @boss_suit else @bullet[@bullet_num].pic.x = @pic.x + (place + 1) * @width/ (num + 2) - 60+ @boss_suit end @bullet[@bullet_num].pic.y = @pic.y + @width / 3+ @boss_suit @attack[@bullet_num] = true @bullet_num += 1 end def shotn(num) for i in 0..num shot_forward(i,num) end end def shotn_me(plane,num) for i in 0..num shot_me(plane,i,num) end end def shot_me(plane,place,num) Audio.se_play("Audio/SE/117-Fire01") @bullet[@bullet_num] = Enemy_Bullet.new(@power) @bullet[@bullet_num].type = 1 x = (plane.pic.x - pic.x) *1.0 y = plane.pic.y - pic.y if x == 0 @bullet[@bullet_num].ratiox = 0 if y >= 0 @bullet[@bullet_num].ratio = 1 else @bullet[@bullet_num].ratio = -1 end else @bullet[@bullet_num].ratio = y / x if @bullet[@bullet_num].ratio == 0 if x >= 0 @bullet[@bullet_num].ratiox = 1 else @bullet[@bullet_num].ratiox = -1 end else if x > 0 @bullet[@bullet_num].ratiox = 1 else @bullet[@bullet_num].ratiox = -1 @bullet[@bullet_num].ratioy = -1 end end end if @power == 1 @bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 30+ @boss_suit elsif @power == 4 @bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 60+ @boss_suit else @bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 100+ @boss_suit end @bullet[@bullet_num].pic.y = @pic.y + 60+ @boss_suit @attack[@bullet_num] = true @bullet_num += 1 end def shotn_spread(num) for i in 0..num shot_spread(i,num) end end def shot_spread(place,num) Audio.se_play("Audio/SE/117-Fire01") @bullet[@bullet_num] = Enemy_Bullet.new(@power) @bullet[@bullet_num].type = 2 angle = Math::PI * (place + 1) / (num + 2) x = Math.cos(angle) y = Math.sin(angle) if x == 0 @bullet[@bullet_num].ratiox = 0 @bullet[@bullet_num].ratio = 1 else @bullet[@bullet_num].ratio = y / x if @bullet[@bullet_num].ratio > 0 @bullet[@bullet_num].ratiox = - 1 else @bullet[@bullet_num].ratiox = 1 @bullet[@bullet_num].ratioy = -1 end end if @power == 1 or @power == 4 @bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + 30+ @boss_suit else @bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + @boss_suit end @bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) + 40+ @boss_suit @attack[@bullet_num] = true @bullet_num += 1 end def hit(x,y,power) if x >= @pic.x- 10 and x <= @pic.x + 80 and y >= @pic.y and y <= @pic.y + 40 @hp -= power Audio.se_play("Audio/SE/lazer_hit") return true end return false end def dispose @pic.dispose end end class Enemy_Li < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = -1 @bullet_size = 0 @speed = 2 @level= 1 @hp = 2 @pic.bitmap = RPG::Cache.picture("LiPlane") end end class Enemy_Green < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 0 @bullet_size = 0 @speed = 2 @power = 1 @level= 2 @hp = 2 @pic.bitmap = RPG::Cache.picture("GreenPlane") end end class Enemy_God < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 1 @bullet_size = 0 @level = 4 @power = 1 @speed = 2 @hp = 5 @pic.bitmap = RPG::Cache.picture("GodPlane") end end class Enemy_X < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 1 @bullet_size = 2 @level = 6 @power = 1 @speed = 1 @hp = 10 @pic.bitmap = RPG::Cache.picture("XPlane") end end class Enemy_Jit < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 0 @bullet_size = 1 @power = 2 @level = 5 @speed = 1 @hp = 15 @pic.bitmap = RPG::Cache.picture("JitPlane") end end class Enemy_Jp < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 2 @bullet_size = 3 @level = 6 @speed = 1 @power = 3 @hp = 15 @pic.bitmap = RPG::Cache.picture("JpPlane") end end class Enemy_LX < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 1 @bullet_size = 4 @level = 10 @power = 4 @speed = 1 @hp = 30 @pic.bitmap = RPG::Cache.picture("LXPlane") end end class Enemy_Red < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 2 @bullet_size = 1 @level = 5 @power = 3 @speed = 1 @hp = 20 @pic.bitmap = RPG::Cache.picture("RedPlane") end end class Enemy_Toon < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 1 @bullet_size = 0 @level = 3 @power = 1 @speed = 2 @hp = 2 @pic.bitmap = RPG::Cache.picture("ToonPlane") end end class Enemy_Ye < Enemy_Plane def initialize(x,y) super(x,y) @attack_type = 0 @bullet_size = 1 @power = 1 @level = 6 @speed = 2.5 @hp = 5 @pic.bitmap = RPG::Cache.picture("YePlane") end end class Enemy_Boss < Enemy_Plane attr_accessor :mode_switch def initialize(x,y) super(x,y) @mode_switch = false @attack_type = 1 @boss_suit = 50 @bullet_size = 5 @power = 3 @level = 100 @width = 240 @speed = 1 @hp = 1000 @pic.bitmap = RPG::Cache.picture("boss") end def attack_mode @attack_type = rand(3) mode_switch = false case @attack_type when 0 @power = 4 @bullet_size = 6 when 1 @power = 3 @bullet_size = 5 when 2 @power = 2 @bullet_size = 10 end end def hit(x,y,power) if x >= @pic.x - 40 and x <= @pic.x + 280 and y >= @pic.y and y <= @pic.y + 140 @hp -= power Audio.se_play("Audio/SE/lazer_hit") return true end return false end end class Blast attr_accessor :pic attr_accessor :control attr_accessor :speed def initialize(x,y) @control = 0 @speed =0 @pic = Sprite.new @pic.x = x @pic.y = y @pic.bitmap = Bitmap.new(192,192) end def dispose @pic.dispose end end class Blast_Explosion < Blast def initialize(x,y) super(x,y) end def animation if @speed == 5 if @control ==2 or @control == 4 or @control == 5 @pic.bitmap.dispose @pic.bitmap = Bitmap.new(192,192) end if @control <= 4 @pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion01"),Rect.new(192*@control,0,192,192)) @control +=1 elsif @control > 4 and @control <= 5 @pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion01"),Rect.new(192*(@control - 4),192,192,192)) @control +=1 else @control = -1 end @speed = 0 end @speed += 1 end end class Blast_Explosion2 < Blast def initialize(x,y) super(x,y) end def animation if @speed == 5 if @control == 2 or @control == 4 or @control == 6 or @control == 9 @pic.bitmap.dispose @pic.bitmap = Bitmap.new(192,192) end if @control <= 4 @pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion02"),Rect.new(192*@control,0,192,192)) @control +=1 elsif @control > 4 and @control <= 9 @pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion02"),Rect.new(192*(@control - 4),192,192,192)) @control +=1 else @control = -1 end @speed = 0 end @speed += 1 end end class Blast_Hit < Blast def initialize(x,y) super(x,y) end def animation if @speed == 2 if @control ==2 or @control == 4 or @control == 6 or @control == 9 @pic.bitmap.dispose @pic.bitmap = Bitmap.new(192,192) end if @control <= 4 @pic.bitmap.blt(0,0,RPG::Cache.picture("011-Weapon06"),Rect.new(192*@control,0,192,192)) @control +=1 elsif @control > 4 and @control <= 9 @pic.bitmap.blt(0,0,RPG::Cache.picture("011-Weapon06"),Rect.new(192*(@control - 4),192,192,192)) @control +=1 else @control = -1 end @speed = 0 end @speed += 1 end end class Fly_Pattern attr_accessor :control attr_accessor :direction def initialize @control = [] @direction = 1 for i in 0..100 @control[i] = 0 end end def pattern(plane,turn) case turn when 21 pattern_0(plane,turn) when 22 pattern_1(plane,turn) when 10,11,12,15,16,25,26,53 pattern_2(plane) when 47,48 pattern_3(plane) when 0,2,4,6,8,13,17,19,23,27,29,31,33,35,37,49,51,54,56,58,60,62,66,68 pattern_4(plane) when 1,3,5,7,9,14,18,20,24,28,30,32,34,36,38,50,52,55,57,59,61,63,67,69 pattern_5(plane) when 39,41,43 pattern_6(plane) when 40,42,44 pattern_7(plane) when 45,64 pattern_8(plane,turn) when 46,65 pattern_9(plane,turn) when 70 pattern_boss(plane,turn) else pattern_0(plane,turn) end end def pattern_0(plane,turn) @control[turn] += 1 if @control[turn]< 40 plane.pic.y += 5*plane.speed end if @control[turn]>= 40 and @control[turn] <= 100 plane.pic.x += 5*plane.speed end if @control[turn] > 100 plane.pic.y -= 5*plane.speed end end def pattern_1(plane,turn) @control[turn] += 1 if @control[turn]< 40 plane.pic.y += 5*plane.speed end if @control[turn]>= 40 and @control[turn] <= 100 plane.pic.x -= 5*plane.speed end if @control[turn] > 100 plane.pic.y -= 5*plane.speed end end def pattern_2(plane) plane.pic.y +=5*plane.speed end def pattern_3(plane) plane.pic.y -=5*plane.speed end def pattern_4(plane) plane.pic.x +=5*plane.speed end def pattern_5(plane) plane.pic.x -= 5*plane.speed end def pattern_6(plane) plane.pic.x += 4*plane.speed plane.pic.y += 4*plane.speed end def pattern_7(plane) plane.pic.x -= 4*plane.speed plane.pic.y += 4*plane.speed end def pattern_8(plane,turn) @control[turn] += 1 if @control[turn] <= 60 plane.pic.x += 4 *plane.speed end if @control[turn] <= 100 and @control[turn] > 60 plane.pic.y += 3*plane.speed end if @control[turn] <=160 and @control[turn] >100 plane.pic.x -= 4*plane.speed end if @control[turn] <=200 and @control[turn] >160 plane.pic.y += 3*plane.speed end if @control[turn] >200 plane.pic.x += 4 * plane.speed end end def pattern_9(plane,turn) @control[turn] += 1 if @control[turn] <= 60 plane.pic.x -= 4 *plane.speed end if @control[turn] <= 100 and @control[turn] > 60 plane.pic.y += 3*plane.speed end if @control[turn] <=160 and @control[turn] >100 plane.pic.x += 4 * plane.speed end if @control[turn] <=200 and @control[turn] >160 plane.pic.y += 3*plane.speed end if @control[turn] >200 plane.pic.x -= 4 * plane.speed end end def pattern_boss(plane,turn) @control[turn] += 1 if @control[turn] <= 30 plane.pic.y += 5 *plane.speed end if @control[turn] > 30 and @control[turn] <= 60 plane.pic.x -= 5 * plane.speed end if @control[turn] > 60 plane.pic.x += 5 *plane.speed * @direction if (@control[turn] - 120) % 60 == 0 @direction = - @direction end end end end class Attack_Pattern attr_accessor :control def initialize @control = [] for i in 0..100 @control[i] = 0 end end def pattern(me,turn,plane) case plane.attack_type when 0 forward(turn,plane) when 1 search(me,turn,plane) when 2 spread(turn,plane) end end def forward(turn,plane) case turn when 10,11,12,15,16 forward_1(turn,plane) when 21,22 forward_2(turn,plane) when 39,40,41,42,43,44 forward_3(turn,plane) when 70 forward_boss(turn,plane) else forward_1(turn,plane) end end def forward_1(turn,plane) @control[turn] += 1 if @control[turn] % 10 == 0 plane.shotn(plane.bullet_size) end end def forward_2(turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn(plane.bullet_size) end if @control[turn] % 15 == 1 plane.shotn(plane.bullet_size) end if @control[turn] % 15 == 2 plane.shotn(plane.bullet_size) end end def forward_3(turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn(plane.bullet_size) end if @control[turn] % 15 == 1 plane.shotn(plane.bullet_size) end end def forward_boss(turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn(plane.bullet_size) end if @control[turn] % 15 == 3 plane.shotn(plane.bullet_size) end if @control[turn] == 60 @control[turn] == 0 plane.mode_switch = true end end def search(me,turn,plane) case turn when 13,14,66,67,68,69 search_1(me,turn,plane) when 23,24,25,26,49,50,51,52 search_2(me,turn,plane) when 53,64,65 search_3(me,turn,plane) when 70 search_boss(me,turn,plane) else search_1(me,turn,plane) end end def search_1(me,turn,plane) @control[turn] += 1 if @control[turn] % 10 == 0 plane.shotn_me(me,plane.bullet_size) end end def search_2(me,turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn_me(me,plane.bullet_size) end if @control[turn] % 15 == 1 plane.shotn_me(me,plane.bullet_size) end if @control[turn] % 15 == 2 plane.shotn_me(me,plane.bullet_size) end end def search_3(me,turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn_me(me,plane.bullet_size) end if @control[turn] % 15 == 3 plane.shotn_me(me,plane.bullet_size - 1) end end def search_boss(me,turn,plane) @control[turn] += 1 if @control[turn] % 10 == 0 plane.shotn_me(me,plane.bullet_size) end if @control[turn] % 10 == 1 plane.shotn_me(me,plane.bullet_size) end if @control[turn] % 10 == 2 plane.shotn_me(me,plane.bullet_size) end if @control[turn] == 30 @control[turn] == 0 plane.mode_switch = true end end def spread(turn,plane) case turn when 45,46 spread_1(turn,plane) when 37,38,47,48 spread_2(turn,plane) when 70 spread_boss(turn,plane) else spread_1(turn,plane) end end def spread_1(turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn_spread(plane.bullet_size) end if @control[turn] % 15 == 1 plane.shotn_spread(plane.bullet_size - 1) end if @control[turn] % 15 == 2 plane.shotn_spread(plane.bullet_size) end if @control[turn] % 15 == 3 plane.shotn_spread(plane.bullet_size - 1) end end def spread_2(turn,plane) @control[turn] += 1 if @control[turn] % 10 == 0 plane.shotn_spread(plane.bullet_size) end end def spread_boss(turn,plane) @control[turn] += 1 if @control[turn] % 15 == 0 plane.shotn_spread(plane.bullet_size) end if @control[turn] % 15 == 2 plane.shotn_spread(plane.bullet_size - 1) end if @control[turn] % 15 == 4 plane.shotn_spread(plane.bullet_size) end if @control[turn] % 15 == 6 plane.shotn_spread(plane.bullet_size - 1) end if control[turn] == 60 @control[turn] == 0 plane.mode_switch = true end end end class Bullet attr_accessor :pic attr_accessor :power attr_accessor :type attr_accessor :ratio attr_accessor :ratiox attr_accessor :ratioy def initialize(x) @ratio = 1 @power = 1 @ratiox = 0 @ratioy = 1 @type = 0 @pic = Sprite.new end def down_fly @pic.y += 10 end def up_fly @pic.y -= 20 end def search_fly(speed) @pic.x += 10 *speed * @ratiox / Math.hypot(@ratio, 1) @pic.y += 10 *speed * @ratio *@ratioy / Math.hypot(@ratio, 1) end def dispose @pic.dispose end end class My_Bullet < Bullet def initialize(x) super(x) if x == 1 @pic.bitmap = RPG::Cache.picture("bullet_1") elsif x == 2 @pic.bitmap = RPG::Cache.picture("bullet_2") end end end class Enemy_Bullet < Bullet def initialize(x) super(x) if x == 1 @power = 1 @pic.bitmap = Bitmap.new(64,64) @pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_03"),Rect.new(0,0,64,64)) elsif x == 2 @power = 2 @pic.bitmap = Bitmap.new(128,128) @pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_01"),Rect.new(256,0,128,128)) elsif x == 3 @power = 3 @pic.bitmap = Bitmap.new(128,128) @pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_02"),Rect.new(256,0,128,128)) elsif x == 4 @power = 4 @pic.bitmap = Bitmap.new(128,128) @pic.bitmap.blt(0,0,RPG::Cache.picture("bullet_3"),Rect.new(0,0,128,128)) end end end class Items attr_accessor :pic def initialize(x,y) @pic = Sprite.new @pic.x = x @pic.y = y end def move @pic.y += 1 end def dispose @pic.dispose end end class Bomb < Items attr_accessor :pic def initialize(x,y) super(x,y) @pic.bitmap = RPG::Cache.picture("bomb") end end class Level < Items attr_accessor :pic def initialize(x,y) super(x,y) @pic.bitmap = RPG::Cache.picture("level") end end class Power < Items attr_accessor :pic def initialize(x,y) super(x,y) @pic.bitmap = RPG::Cache.picture("power") end end class Food < Items attr_accessor :pic def initialize(x,y) super(x,y) @pic.bitmap = RPG::Cache.picture("food") end end class Window_Result < Window_Base def initialize super(20, 400, 500, 100) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = ["方正粗活意简体","方正粗活意简体"] self.opacity = 0 end def refresh(hp,score,destroy,bomb) self.contents.clear self.contents.font.size = 22 self.contents.font.color = Color.new(255,20,20) self.contents.font.bold = false self.contents.draw_text(0,20,64,32,"生命:") self.contents.draw_text(240,20,64,32,"分数:#{score}") self.contents.draw_text(320,20,64,32,"灭敌数:#{destroy}") self.contents.draw_text(400,20,64,32,"炸弹数:#{bomb}") if hp >= 70 self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(84,121,241)) elsif hp >= 40 self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(240,200,64)) else self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(231,81,81)) end end end class Window_Show < Window_Base def initialize super(230, 140, 300, 300) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = ["方正粗活意简体","方正粗活意简体"] self.opacity = 0 end def refresh(turn) self.contents.clear self.contents.font.size = 80 self.contents.font.color = Color.new(255,80,20) self.contents.font.bold = false case turn when 0 self.contents.draw_text(0,0,150,150,"开始") when 1 self.contents.draw_text(0,0,150,150,"警告") when 2 self.contents.draw_text(0,0,150,150,"胜利") end end end class Window_Boss < Window_Base def initialize super(20, 0, 500, 100) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = ["方正粗活意简体","方正粗活意简体"] self.opacity = 0 end def refresh(hp) self.contents.clear self.contents.font.size = 22 self.contents.font.color = Color.new(255,20,20) self.contents.font.bold = false self.contents.draw_text(0,20,64,32,"Boss:") if hp >= 230 self.contents.fill_rect(55, 27, 0.4* hp ,20,Color.new(73,188,46)) elsif hp >= 200 self.contents.fill_rect(55, 27, 0.4* hp,20,Color.new(240,200,64)) else self.contents.fill_rect(55, 27, 0.4* hp ,20,Color.new(231,81,81)) end end end
#==============================================================================
# ■ 雷霆战机 代码作者:杨峰
#------------------------------------------------------------------------------
# 这个脚本前后花了我一个星期的时间去完成,完全是凭借自己的力量一行一行写的。
# 都大三了,平时还要上学校一堆烂课,伤不起啊!!
# 最后作品还算差强人意,就是由于素材原因飞机和子弹稍微大了点,判定也因此不
# 精准,不过不碍事。希望大家可以借此相互学习。多说一句,面向对象的设计思想
# 实在是太TM重要了!
#==============================================================================
class Scene_Plane
def main
@window_boss = Window_Boss.new
@window_show = Window_Show.new
@result = Window_Result.new
@fly_pattern = Fly_Pattern.new
@attack_pattern = Attack_Pattern.new
@bg = Plane.new
@bg.bitmap = RPG::Cache.picture("bg")
@me = My_Plane.new
@enemy_num = 0
@count = 0
@record = 0
@bomb_num = 3
@score = 0
[url=home.php?mod=space&uid=1208434]@destroy[/url] = 0
@score = 0
@destroy = 0
@speed = 0
@process = 0
@bg.zoom_x = 1.2
@bomb_ctrl = true
@judge_over = true
@victory = false
@level_switch = false
@power_switch = false
@bomb_switch = false
@food_switch = false
@my_blast_switch = false
@my_blast_hit_switch = false
@boss_switch = false
@bomb_blast_switch = []
@bomb_blast = []
@enemy_switch= []
@bullet_switch = []
@blast_switch = []
@blast_hit_switch = []
@blast = []
@blast_hit = []
@enemy = []
Audio.bgm_play("Audio/BGM/chuaiji")
for i in 0..100
@bomb_blast_switch = []
@enemy_switch[i] = false
@bullet_switch[i] = false
@blast_switch[i] = false
@blast_hit_switch[i] = false
end
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@bg.dispose
@result.dispose
@window_boss.dispose
@window_show.dispose
for i in 0..@enemy_num
if @enemy_switch[i]
@enemy[i].dispose
end
end
Audio.bgm_stop
end
def update
@bg.oy -= 5
@speed +=1
@process +=1
back_menu
shooting
pl_move
my_bullet_move
game_process
enemy_pattern
eat_items
bomb_blast
move_items
hit_you_me
enemy_animation
enemy_leave
me_animation
boss_info
my_death
end
def shooting
if Input.trigger?(Input::C) or Input.repeat?(Input::C)
@me.shotn_spread
end
end
def back_menu
if Input.trigger?(Input::F5)
$scene = Scene_Map.new
end
end
def boss_info
if @boss_switch
@window_boss.refresh(@enemy[70].hp)
if @enemy[70].mode_switch
@enemy[70].attack_mode
end
end
end
def my_death
if @me.hp <=0 and @judge_over
game_over
end
end
def hit_you_me
for i in 0..@enemy_num
if @enemy_switch[i]
hit_enemy(i)
end
hit_myself(i)
enemy_bullet_move(i)
end
end
def enemy_animation
for i in 0..@enemy_num
if @blast_switch[i]
@blast[i].animation
if @blast[i].control == -1
@blast[i].dispose
@enemy[i].dispose
@blast_switch[i] = false
end
end
end
for i in 0..@enemy_num
if @blast_hit_switch[i]
@blast_hit[i].animation
if @blast_hit[i].control == -1
@blast_hit[i].dispose
@blast_hit_switch[i] = false
end
end
end
end
def me_animation
if @my_blast_hit_switch
@my_blast_hit.animation
if @my_blast_hit.control == -1
@my_blast_hit.dispose
@my_blast_hit_switch = false
end
end
if @my_blast_switch
@my_blast.animation
if @my_blast.control == -1
@me.dispose
$scene = Scene_Gameover.new
end
end
end
def move_items
if @bomb_switch
@bomb.move
if @bomb.pic.y >= 600
@bomb.dispose
@bomb_switch = false
end
end
if @level_switch
@level.move
if @level.pic.y >= 600
@level.dispose
@level_switch = false
end
end
if @power_switch
@power.move
if @power.pic.y >= 600
@power.dispose
@power_switch = false
end
end
if @food_switch
@food.move
if @food.pic.y >= 600
@food.dispose
@food_switch = false
end
end
end
def bomb_blast
if Input.trigger?(Input::A)
if @bomb_num > 0 and @bomb_ctrl == true
Audio.se_play("Audio/SE/Explosion02")
@bomb_ctrl = false
@bomb_num -= 1
for i in 0..@enemy_num
if @enemy_switch[i]
@enemy[i].hp -= 10
end
end
for i in 0..5
@bomb_blast_switch[i] = true
case i
when 0..2
@bomb_blast[i] = Blast_Explosion2.new( i * 200,50)
when 3..5
@bomb_blast[i] = Blast_Explosion2.new( (i - 3) * 200,220)
end
end
end
end
for i in 0..5
if @bomb_blast_switch[i]
@bomb_blast[i].animation
if @bomb_blast[i].control == -1
@bomb_blast[i].dispose
@bomb_blast_switch[i] = false
@bomb_ctrl = true
end
end
end
end
def eat_items
if @bomb_switch
if @me.eat_bomb(@bomb.pic.x,@bomb.pic.y)
@bomb_num += 1
@bomb.dispose
@bomb_switch = false
end
end
if @level_switch
if @me.eat_level(@level.pic.x,@level.pic.y)
@level.dispose
@level_switch = false
if @me.level < 4
@me.level += 2
end
end
end
if @power_switch
if @me.eat_power(@power.pic.x,@power.pic.y)
@me.power += 1
@power.dispose
@power_switch = false
end
end
if @food_switch
if @me.eat_food(@food.pic.x,@food.pic.y)
@me.hp += 50
if @me.hp >=200
@me.hp = 200
end
@food.dispose
@food_switch = false
end
end
end
def enemy_leave
for i in 0..@enemy_num
if @enemy_switch[i]
if @enemy[i].pic.x < -100 or @enemy[i].pic.x > 700 or @enemy[i].pic.y > 500 or @enemy[i].pic.y < -150
@enemy[i].dispose
@enemy_switch[i] = false
end
end
end
end
def enemy_pattern
if @speed == 5
@result.refresh(@me.hp,@score,@destroy,@bomb_num)
for i in 0..@enemy_num
if @enemy_switch[i]
@fly_pattern.pattern(@enemy[i],i)
@attack_pattern.pattern(@me,i,@enemy[i])
end
end
@speed = 0
end
end
def game_process
if @process < 100
@window_show.refresh(0)
elsif @process == 100
@window_show.contents.clear
Audio.se_play("Audio/SE/start")
end
if @process <= 250 and @process >= 50 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Li.new(-80,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Li.new(640,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 500
@enemy[@enemy_num] = Enemy_Green.new(500,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 550
@enemy[@enemy_num] = Enemy_Green.new(400,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 600
@enemy[@enemy_num] = Enemy_Green.new(300,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Toon.new(-80,150)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Toon.new(640,150)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 650
@enemy[@enemy_num] = Enemy_Green.new(200,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 700
@enemy[@enemy_num] = Enemy_Green.new(100,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 900 and @process >= 800 and @process % 100 == 0
@enemy[@enemy_num] = Enemy_Li.new(-80,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Li.new(640,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 920
@enemy[@enemy_num] = Enemy_Jit.new(100,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Jit.new(500,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 950
@enemy[@enemy_num] = Enemy_God.new(-80,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_God.new(640,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 1100
@enemy[@enemy_num] = Enemy_X.new(100,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_X.new(500,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 1350 and @process >= 1250 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Green.new(-80,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Green.new(640,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 1450 and @process >= 1400 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Li.new(-80,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Li.new(640,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 1600
@enemy[@enemy_num] = Enemy_Red.new(-80,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Red.new(640,100)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 1750 and @process >= 1650 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Ye.new(-80,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Ye.new(640,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 1900
@enemy[@enemy_num] = Enemy_Jp.new(-80,50)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Jp.new(640,50)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 2000
@enemy[@enemy_num] = Enemy_Red.new(100,500)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Red.new(400,500)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 2100 and @process >= 2000 and @process % 100 == 0
@enemy[@enemy_num] = Enemy_God.new(-80,150)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_God.new(640,250)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 2200
@enemy[@enemy_num] = Enemy_LX.new(250,-80)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 2350 and @process >= 2250 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Green.new(-80,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Green.new(640,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 2600 and @process >= 2500 and @process % 100 == 0
@enemy[@enemy_num] = Enemy_Li.new(-80,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Li.new(640,200)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process == 2700
@enemy[@enemy_num] = Enemy_LX.new(-80,50)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_LX.new(640,50)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process <= 2800 and @process >= 2750 and @process % 50 == 0
@enemy[@enemy_num] = Enemy_Toon.new(-80,250)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
@enemy[@enemy_num] = Enemy_Toon.new(640,250)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@enemy_num += 1
end
if @process < 3100 and @process>= 3000
@window_show.refresh(1)
elsif @process == 3100
@window_show.contents.clear
Audio.bgm_stop
Audio.se_play("Audio/SE/warning")
end
if @process == 3200
@enemy[@enemy_num] = Enemy_Boss.new(150,-120)
@enemy_switch[@enemy_num] = true
@bullet_switch[@enemy_num] = true
@boss_switch = true
@enemy_num += 1
Audio.bgm_play("Audio/BGM/action_world2")
end
if @victory and @record == 0
Audio.me_play("Audio/ME/victory")
@record = @process
end
if @victory
if @process != @record + 100
@window_show.refresh(2)
else
$scene = Scene_Map.new
end
end
end
def hit_myself(turn)
if @bullet_switch[turn]
for i in 0..@enemy[turn].bullet_num
if @enemy[turn].attack[i]
if(@me.hit(@enemy[turn].bullet[i].pic.x,@enemy[turn].bullet[i].pic.y,@enemy[turn].bullet[i].power))
if @me.hp > 0 and @my_blast_hit_switch == false
@my_blast_hit_switch = true
@my_blast_hit = Blast_Hit.new(@me.pic.x - 30 ,@me.pic.y - 30)
end
@enemy[turn].bullet[i].dispose
@enemy[turn].attack[i] = false
end
end
end
end
end
def game_over
Audio.se_play("Audio/SE/Explosion04")
@my_blast = Blast_Explosion.new(@me.pic.x - 25,@me.pic.y - 25)
@my_blast_switch = true
@judge_over = false
end
def hit_enemy(turn)
for i in [email]0..@me.bullet_num[/email]
if @me.attack[i]
if(@enemy[turn].hit(@me.bullet[i].pic.x,@me.bullet[i].pic.y,@me.power))
if @enemy[turn].hp > 0 and @blast_hit_switch[turn] == false
@blast_hit[turn] = Blast_Hit.new(@enemy[turn].pic.x- 20 ,@enemy[turn].pic.y)
@blast_hit_switch[turn] = true
end
@me.bullet[i].dispose
@me.attack[i] = false
end
end
end
if @enemy[turn].hp <= 0
@score += 10 * @enemy[turn].level
@destroy += 1
Audio.se_play("Audio/SE/Explosion01")
@blast[turn] = Blast_Explosion.new(@enemy[turn].pic.x - 30,@enemy[turn].pic.y)
@blast_switch[turn] = true
@enemy_switch[turn] = false
if turn == 4 or turn == 21 or turn == 53 or turn == 64
@bomb = Bomb.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40)
@bomb_switch = true
end
if turn == 12 or turn == 34 or turn == 47 or turn == 65
@level = Level.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40)
@level_switch = true
end
if turn == 33
@power = Power.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40)
@power_switch = true
end
if turn == 30 or turn == 66
@food = Food.new(@enemy[turn].pic.x + 50,@enemy[turn].pic.y + 40)
@food_switch = true
end
if turn == 70
@victory = true
end
end
end
def enemy_bullet_move(turn)
if @bullet_switch[turn]
for i in 0..@enemy[turn].bullet_num
if @enemy[turn].attack[i]
if @enemy[turn].bullet[i].type == 0
@enemy[turn].bullet[i].down_fly
end
if @enemy[turn].bullet[i].type == 1
@enemy[turn].bullet[i].search_fly(1)
end
if @enemy[turn].bullet[i].type == 2
@enemy[turn].bullet[i].search_fly(1)
end
if @enemy[turn].bullet[i].pic.y >=500
@enemy[turn].attack[i]=false
@enemy[turn].bullet[i].dispose
end
end
end
end
end
def my_bullet_move
for i in @[email]count..@me.bullet_num[/email]
if @me.attack[i]
@me.bullet[i].search_fly(2)
if @me.bullet[i].pic.y <= -60
@me.attack[i]=false
@me.bullet[i].dispose
@count += 1
end
end
end
end
def pl_move
if Input.trigger?(Input::UP) or Input.repeat?(Input::UP)
if @me.pic.y>=0
@me.pic.y-=20
end
end
if Input.trigger?(Input::RIGHT) or Input.repeat?(Input::RIGHT)
if @me.pic.x<=520
@me.pic.x+=20
end
end
if Input.trigger?(Input::DOWN) or Input.repeat?(Input::DOWN)
if @me.pic.y <=380
@me.pic.y+=20
end
end
if Input.trigger?(Input::LEFT) or Input.repeat?(Input::LEFT)
if @me.pic.x>=0
@me.pic.x-=20
end
end
end
end
class My_Plane
attr_accessor :pic
attr_accessor :hp
attr_accessor :power
attr_accessor :level
attr_accessor :bullet
attr_accessor :bullet_num
attr_accessor :attack
def initialize
@hp = 200
@attack = false
@level = 0
@power = 1
@pic = Sprite.new
@pic.x = 300
@pic.y = 360
@pic.bitmap = RPG::Cache.picture("BluePlane")
@attack = []
@bullet = []
@bullet_num = 0
end
def eat_bomb(x,y)
if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y
Audio.se_play("Audio/SE/eatbomb")
return true
else
return false
end
end
def eat_level(x,y)
if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y
Audio.se_play("Audio/SE/eatlevel")
return true
else
return false
end
end
def eat_power(x,y)
if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y
Audio.se_play("Audio/SE/eatpower")
return true
else
return false
end
end
def eat_food(x,y)
if x <= @pic.x + 80 and x >= @pic.x + 20 and y <= @pic.y + 70 and y >= @pic.y
Audio.se_play("Audio/SE/eatlevel")
return true
else
return false
end
end
def shotn_spread
for i in 0..@level
shot_spread(i)
end
end
def shot_spread(place)
Audio.se_play("Audio/SE/destroyer_lazer1")
@bullet[@bullet_num] = My_Bullet.new(@power)
angle = Math::PI * (place + 1) / (@level + 2)
x = Math.cos(angle)
y = Math.sin(angle)
if x == 0
@bullet[@bullet_num].ratiox = 0
@bullet[@bullet_num].ratio = 1
@bullet[@bullet_num].ratioy = -1
else
@bullet[@bullet_num].ratio = y / x
if @bullet[@bullet_num].ratio > 0
@bullet[@bullet_num].ratiox = -1
@bullet[@bullet_num].ratioy = -1
else
@bullet[@bullet_num].ratiox = 1
@bullet[@bullet_num].ratioy = 1
end
end
if @power == 1
@bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + 30
@bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) - 30
elsif @power ==2
@bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle)
@bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) - 60
end
@attack[@bullet_num] = true
@bullet_num += 1
end
def hit(x,y,power)
if x >= @pic.x and x <= @pic.x + 70 and y >= @pic.y and y <= @pic.y + 40
@hp -= power
Audio.se_play("Audio/SE/lazer_hit")
return true
end
return false
end
def dispose
@pic.dispose
end
end
class Enemy_Plane
attr_accessor :pic
attr_accessor :boss_suit
attr_accessor :width
attr_accessor :hp
attr_accessor :power
attr_accessor :level
attr_accessor :speed
attr_accessor :attack_type
attr_accessor :bullet
attr_accessor :bullet_size
attr_accessor :bullet_num
attr_accessor :attack
def initialize(x,y)
@pic = Sprite.new
@pic.x = x
@pic.y = y
@level = 1
@power = 1
@boss_suit = 0
@speed = 1
@bullet_size = 0
@attack_type = 0
@bullet_num = 0
@width = 128
@bullet = []
@attack = []
end
def shot_forward(place,num)
Audio.se_play("Audio/SE/117-Fire01")
@bullet[@bullet_num] = Enemy_Bullet.new(@power)
@bullet[@bullet_num].type = 0
if @power == 1
@bullet[@bullet_num].pic.x = @pic.x + (place + 1) * @width/ (num + 2) - 30 + @boss_suit
else
@bullet[@bullet_num].pic.x = @pic.x + (place + 1) * @width/ (num + 2) - 60+ @boss_suit
end
@bullet[@bullet_num].pic.y = @pic.y + @width / 3+ @boss_suit
@attack[@bullet_num] = true
@bullet_num += 1
end
def shotn(num)
for i in 0..num
shot_forward(i,num)
end
end
def shotn_me(plane,num)
for i in 0..num
shot_me(plane,i,num)
end
end
def shot_me(plane,place,num)
Audio.se_play("Audio/SE/117-Fire01")
@bullet[@bullet_num] = Enemy_Bullet.new(@power)
@bullet[@bullet_num].type = 1
x = (plane.pic.x - pic.x) *1.0
y = plane.pic.y - pic.y
if x == 0
@bullet[@bullet_num].ratiox = 0
if y >= 0
@bullet[@bullet_num].ratio = 1
else
@bullet[@bullet_num].ratio = -1
end
else
@bullet[@bullet_num].ratio = y / x
if @bullet[@bullet_num].ratio == 0
if x >= 0
@bullet[@bullet_num].ratiox = 1
else
@bullet[@bullet_num].ratiox = -1
end
else
if x > 0
@bullet[@bullet_num].ratiox = 1
else
@bullet[@bullet_num].ratiox = -1
@bullet[@bullet_num].ratioy = -1
end
end
end
if @power == 1
@bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 30+ @boss_suit
elsif @power == 4
@bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 60+ @boss_suit
else
@bullet[@bullet_num].pic.x = @pic.x + (place + 1) * width/ (num + 2) - 100+ @boss_suit
end
@bullet[@bullet_num].pic.y = @pic.y + 60+ @boss_suit
@attack[@bullet_num] = true
@bullet_num += 1
end
def shotn_spread(num)
for i in 0..num
shot_spread(i,num)
end
end
def shot_spread(place,num)
Audio.se_play("Audio/SE/117-Fire01")
@bullet[@bullet_num] = Enemy_Bullet.new(@power)
@bullet[@bullet_num].type = 2
angle = Math::PI * (place + 1) / (num + 2)
x = Math.cos(angle)
y = Math.sin(angle)
if x == 0
@bullet[@bullet_num].ratiox = 0
@bullet[@bullet_num].ratio = 1
else
@bullet[@bullet_num].ratio = y / x
if @bullet[@bullet_num].ratio > 0
@bullet[@bullet_num].ratiox = - 1
else
@bullet[@bullet_num].ratiox = 1
@bullet[@bullet_num].ratioy = -1
end
end
if @power == 1 or @power == 4
@bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + 30+ @boss_suit
else
@bullet[@bullet_num].pic.x = @pic.x - 40 * Math.cos(angle) + @boss_suit
end
@bullet[@bullet_num].pic.y = @pic.y + 40 * Math.sin(angle) + 40+ @boss_suit
@attack[@bullet_num] = true
@bullet_num += 1
end
def hit(x,y,power)
if x >= @pic.x- 10 and x <= @pic.x + 80 and y >= @pic.y and y <= @pic.y + 40
@hp -= power
Audio.se_play("Audio/SE/lazer_hit")
return true
end
return false
end
def dispose
@pic.dispose
end
end
class Enemy_Li < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = -1
@bullet_size = 0
@speed = 2
@level= 1
@hp = 2
@pic.bitmap = RPG::Cache.picture("LiPlane")
end
end
class Enemy_Green < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 0
@bullet_size = 0
@speed = 2
@power = 1
@level= 2
@hp = 2
@pic.bitmap = RPG::Cache.picture("GreenPlane")
end
end
class Enemy_God < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 1
@bullet_size = 0
@level = 4
@power = 1
@speed = 2
@hp = 5
@pic.bitmap = RPG::Cache.picture("GodPlane")
end
end
class Enemy_X < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 1
@bullet_size = 2
@level = 6
@power = 1
@speed = 1
@hp = 10
@pic.bitmap = RPG::Cache.picture("XPlane")
end
end
class Enemy_Jit < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 0
@bullet_size = 1
@power = 2
@level = 5
@speed = 1
@hp = 15
@pic.bitmap = RPG::Cache.picture("JitPlane")
end
end
class Enemy_Jp < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 2
@bullet_size = 3
@level = 6
@speed = 1
@power = 3
@hp = 15
@pic.bitmap = RPG::Cache.picture("JpPlane")
end
end
class Enemy_LX < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 1
@bullet_size = 4
@level = 10
@power = 4
@speed = 1
@hp = 30
@pic.bitmap = RPG::Cache.picture("LXPlane")
end
end
class Enemy_Red < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 2
@bullet_size = 1
@level = 5
@power = 3
@speed = 1
@hp = 20
@pic.bitmap = RPG::Cache.picture("RedPlane")
end
end
class Enemy_Toon < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 1
@bullet_size = 0
@level = 3
@power = 1
@speed = 2
@hp = 2
@pic.bitmap = RPG::Cache.picture("ToonPlane")
end
end
class Enemy_Ye < Enemy_Plane
def initialize(x,y)
super(x,y)
@attack_type = 0
@bullet_size = 1
@power = 1
@level = 6
@speed = 2.5
@hp = 5
@pic.bitmap = RPG::Cache.picture("YePlane")
end
end
class Enemy_Boss < Enemy_Plane
attr_accessor :mode_switch
def initialize(x,y)
super(x,y)
@mode_switch = false
@attack_type = 1
@boss_suit = 50
@bullet_size = 5
@power = 3
@level = 100
@width = 240
@speed = 1
@hp = 1000
@pic.bitmap = RPG::Cache.picture("boss")
end
def attack_mode
@attack_type = rand(3)
mode_switch = false
case @attack_type
when 0
@power = 4
@bullet_size = 6
when 1
@power = 3
@bullet_size = 5
when 2
@power = 2
@bullet_size = 10
end
end
def hit(x,y,power)
if x >= @pic.x - 40 and x <= @pic.x + 280 and y >= @pic.y and y <= @pic.y + 140
@hp -= power
Audio.se_play("Audio/SE/lazer_hit")
return true
end
return false
end
end
class Blast
attr_accessor :pic
attr_accessor :control
attr_accessor :speed
def initialize(x,y)
@control = 0
@speed =0
@pic = Sprite.new
@pic.x = x
@pic.y = y
@pic.bitmap = Bitmap.new(192,192)
end
def dispose
@pic.dispose
end
end
class Blast_Explosion < Blast
def initialize(x,y)
super(x,y)
end
def animation
if @speed == 5
if @control ==2 or @control == 4 or @control == 5
@pic.bitmap.dispose
@pic.bitmap = Bitmap.new(192,192)
end
if @control <= 4
@pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion01"),Rect.new(192*@control,0,192,192))
@control +=1
elsif @control > 4 and @control <= 5
@pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion01"),Rect.new(192*(@control - 4),192,192,192))
@control +=1
else
@control = -1
end
@speed = 0
end
@speed += 1
end
end
class Blast_Explosion2 < Blast
def initialize(x,y)
super(x,y)
end
def animation
if @speed == 5
if @control == 2 or @control == 4 or @control == 6 or @control == 9
@pic.bitmap.dispose
@pic.bitmap = Bitmap.new(192,192)
end
if @control <= 4
@pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion02"),Rect.new(192*@control,0,192,192))
@control +=1
elsif @control > 4 and @control <= 9
@pic.bitmap.blt(0,0,RPG::Cache.picture("Explosion02"),Rect.new(192*(@control - 4),192,192,192))
@control +=1
else
@control = -1
end
@speed = 0
end
@speed += 1
end
end
class Blast_Hit < Blast
def initialize(x,y)
super(x,y)
end
def animation
if @speed == 2
if @control ==2 or @control == 4 or @control == 6 or @control == 9
@pic.bitmap.dispose
@pic.bitmap = Bitmap.new(192,192)
end
if @control <= 4
@pic.bitmap.blt(0,0,RPG::Cache.picture("011-Weapon06"),Rect.new(192*@control,0,192,192))
@control +=1
elsif @control > 4 and @control <= 9
@pic.bitmap.blt(0,0,RPG::Cache.picture("011-Weapon06"),Rect.new(192*(@control - 4),192,192,192))
@control +=1
else
@control = -1
end
@speed = 0
end
@speed += 1
end
end
class Fly_Pattern
attr_accessor :control
attr_accessor :direction
def initialize
@control = []
@direction = 1
for i in 0..100
@control[i] = 0
end
end
def pattern(plane,turn)
case turn
when 21
pattern_0(plane,turn)
when 22
pattern_1(plane,turn)
when 10,11,12,15,16,25,26,53
pattern_2(plane)
when 47,48
pattern_3(plane)
when 0,2,4,6,8,13,17,19,23,27,29,31,33,35,37,49,51,54,56,58,60,62,66,68
pattern_4(plane)
when 1,3,5,7,9,14,18,20,24,28,30,32,34,36,38,50,52,55,57,59,61,63,67,69
pattern_5(plane)
when 39,41,43
pattern_6(plane)
when 40,42,44
pattern_7(plane)
when 45,64
pattern_8(plane,turn)
when 46,65
pattern_9(plane,turn)
when 70
pattern_boss(plane,turn)
else
pattern_0(plane,turn)
end
end
def pattern_0(plane,turn)
@control[turn] += 1
if @control[turn]< 40
plane.pic.y += 5*plane.speed
end
if @control[turn]>= 40 and @control[turn] <= 100
plane.pic.x += 5*plane.speed
end
if @control[turn] > 100
plane.pic.y -= 5*plane.speed
end
end
def pattern_1(plane,turn)
@control[turn] += 1
if @control[turn]< 40
plane.pic.y += 5*plane.speed
end
if @control[turn]>= 40 and @control[turn] <= 100
plane.pic.x -= 5*plane.speed
end
if @control[turn] > 100
plane.pic.y -= 5*plane.speed
end
end
def pattern_2(plane)
plane.pic.y +=5*plane.speed
end
def pattern_3(plane)
plane.pic.y -=5*plane.speed
end
def pattern_4(plane)
plane.pic.x +=5*plane.speed
end
def pattern_5(plane)
plane.pic.x -= 5*plane.speed
end
def pattern_6(plane)
plane.pic.x += 4*plane.speed
plane.pic.y += 4*plane.speed
end
def pattern_7(plane)
plane.pic.x -= 4*plane.speed
plane.pic.y += 4*plane.speed
end
def pattern_8(plane,turn)
@control[turn] += 1
if @control[turn] <= 60
plane.pic.x += 4 *plane.speed
end
if @control[turn] <= 100 and @control[turn] > 60
plane.pic.y += 3*plane.speed
end
if @control[turn] <=160 and @control[turn] >100
plane.pic.x -= 4*plane.speed
end
if @control[turn] <=200 and @control[turn] >160
plane.pic.y += 3*plane.speed
end
if @control[turn] >200
plane.pic.x += 4 * plane.speed
end
end
def pattern_9(plane,turn)
@control[turn] += 1
if @control[turn] <= 60
plane.pic.x -= 4 *plane.speed
end
if @control[turn] <= 100 and @control[turn] > 60
plane.pic.y += 3*plane.speed
end
if @control[turn] <=160 and @control[turn] >100
plane.pic.x += 4 * plane.speed
end
if @control[turn] <=200 and @control[turn] >160
plane.pic.y += 3*plane.speed
end
if @control[turn] >200
plane.pic.x -= 4 * plane.speed
end
end
def pattern_boss(plane,turn)
@control[turn] += 1
if @control[turn] <= 30
plane.pic.y += 5 *plane.speed
end
if @control[turn] > 30 and @control[turn] <= 60
plane.pic.x -= 5 * plane.speed
end
if @control[turn] > 60
plane.pic.x += 5 *plane.speed * @direction
if (@control[turn] - 120) % 60 == 0
@direction = - @direction
end
end
end
end
class Attack_Pattern
attr_accessor :control
def initialize
@control = []
for i in 0..100
@control[i] = 0
end
end
def pattern(me,turn,plane)
case plane.attack_type
when 0
forward(turn,plane)
when 1
search(me,turn,plane)
when 2
spread(turn,plane)
end
end
def forward(turn,plane)
case turn
when 10,11,12,15,16
forward_1(turn,plane)
when 21,22
forward_2(turn,plane)
when 39,40,41,42,43,44
forward_3(turn,plane)
when 70
forward_boss(turn,plane)
else
forward_1(turn,plane)
end
end
def forward_1(turn,plane)
@control[turn] += 1
if @control[turn] % 10 == 0
plane.shotn(plane.bullet_size)
end
end
def forward_2(turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn(plane.bullet_size)
end
if @control[turn] % 15 == 1
plane.shotn(plane.bullet_size)
end
if @control[turn] % 15 == 2
plane.shotn(plane.bullet_size)
end
end
def forward_3(turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn(plane.bullet_size)
end
if @control[turn] % 15 == 1
plane.shotn(plane.bullet_size)
end
end
def forward_boss(turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn(plane.bullet_size)
end
if @control[turn] % 15 == 3
plane.shotn(plane.bullet_size)
end
if @control[turn] == 60
@control[turn] == 0
plane.mode_switch = true
end
end
def search(me,turn,plane)
case turn
when 13,14,66,67,68,69
search_1(me,turn,plane)
when 23,24,25,26,49,50,51,52
search_2(me,turn,plane)
when 53,64,65
search_3(me,turn,plane)
when 70
search_boss(me,turn,plane)
else
search_1(me,turn,plane)
end
end
def search_1(me,turn,plane)
@control[turn] += 1
if @control[turn] % 10 == 0
plane.shotn_me(me,plane.bullet_size)
end
end
def search_2(me,turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] % 15 == 1
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] % 15 == 2
plane.shotn_me(me,plane.bullet_size)
end
end
def search_3(me,turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] % 15 == 3
plane.shotn_me(me,plane.bullet_size - 1)
end
end
def search_boss(me,turn,plane)
@control[turn] += 1
if @control[turn] % 10 == 0
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] % 10 == 1
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] % 10 == 2
plane.shotn_me(me,plane.bullet_size)
end
if @control[turn] == 30
@control[turn] == 0
plane.mode_switch = true
end
end
def spread(turn,plane)
case turn
when 45,46
spread_1(turn,plane)
when 37,38,47,48
spread_2(turn,plane)
when 70
spread_boss(turn,plane)
else
spread_1(turn,plane)
end
end
def spread_1(turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn_spread(plane.bullet_size)
end
if @control[turn] % 15 == 1
plane.shotn_spread(plane.bullet_size - 1)
end
if @control[turn] % 15 == 2
plane.shotn_spread(plane.bullet_size)
end
if @control[turn] % 15 == 3
plane.shotn_spread(plane.bullet_size - 1)
end
end
def spread_2(turn,plane)
@control[turn] += 1
if @control[turn] % 10 == 0
plane.shotn_spread(plane.bullet_size)
end
end
def spread_boss(turn,plane)
@control[turn] += 1
if @control[turn] % 15 == 0
plane.shotn_spread(plane.bullet_size)
end
if @control[turn] % 15 == 2
plane.shotn_spread(plane.bullet_size - 1)
end
if @control[turn] % 15 == 4
plane.shotn_spread(plane.bullet_size)
end
if @control[turn] % 15 == 6
plane.shotn_spread(plane.bullet_size - 1)
end
if control[turn] == 60
@control[turn] == 0
plane.mode_switch = true
end
end
end
class Bullet
attr_accessor :pic
attr_accessor :power
attr_accessor :type
attr_accessor :ratio
attr_accessor :ratiox
attr_accessor :ratioy
def initialize(x)
@ratio = 1
@power = 1
@ratiox = 0
@ratioy = 1
@type = 0
@pic = Sprite.new
end
def down_fly
@pic.y += 10
end
def up_fly
@pic.y -= 20
end
def search_fly(speed)
@pic.x += 10 *speed * @ratiox / Math.hypot(@ratio, 1)
@pic.y += 10 *speed * @ratio *@ratioy / Math.hypot(@ratio, 1)
end
def dispose
@pic.dispose
end
end
class My_Bullet < Bullet
def initialize(x)
super(x)
if x == 1
@pic.bitmap = RPG::Cache.picture("bullet_1")
elsif x == 2
@pic.bitmap = RPG::Cache.picture("bullet_2")
end
end
end
class Enemy_Bullet < Bullet
def initialize(x)
super(x)
if x == 1
@power = 1
@pic.bitmap = Bitmap.new(64,64)
@pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_03"),Rect.new(0,0,64,64))
elsif x == 2
@power = 2
@pic.bitmap = Bitmap.new(128,128)
@pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_01"),Rect.new(256,0,128,128))
elsif x == 3
@power = 3
@pic.bitmap = Bitmap.new(128,128)
@pic.bitmap.blt(0,0,RPG::Cache.picture("EnemyFire_02"),Rect.new(256,0,128,128))
elsif x == 4
@power = 4
@pic.bitmap = Bitmap.new(128,128)
@pic.bitmap.blt(0,0,RPG::Cache.picture("bullet_3"),Rect.new(0,0,128,128))
end
end
end
class Items
attr_accessor :pic
def initialize(x,y)
@pic = Sprite.new
@pic.x = x
@pic.y = y
end
def move
@pic.y += 1
end
def dispose
@pic.dispose
end
end
class Bomb < Items
attr_accessor :pic
def initialize(x,y)
super(x,y)
@pic.bitmap = RPG::Cache.picture("bomb")
end
end
class Level < Items
attr_accessor :pic
def initialize(x,y)
super(x,y)
@pic.bitmap = RPG::Cache.picture("level")
end
end
class Power < Items
attr_accessor :pic
def initialize(x,y)
super(x,y)
@pic.bitmap = RPG::Cache.picture("power")
end
end
class Food < Items
attr_accessor :pic
def initialize(x,y)
super(x,y)
@pic.bitmap = RPG::Cache.picture("food")
end
end
class Window_Result < Window_Base
def initialize
super(20, 400, 500, 100)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = ["方正粗活意简体","方正粗活意简体"]
self.opacity = 0
end
def refresh(hp,score,destroy,bomb)
self.contents.clear
self.contents.font.size = 22
self.contents.font.color = Color.new(255,20,20)
self.contents.font.bold = false
self.contents.draw_text(0,20,64,32,"生命:")
self.contents.draw_text(240,20,64,32,"分数:#{score}")
self.contents.draw_text(320,20,64,32,"灭敌数:#{destroy}")
self.contents.draw_text(400,20,64,32,"炸弹数:#{bomb}")
if hp >= 70
self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(84,121,241))
elsif hp >= 40
self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(240,200,64))
else
self.contents.fill_rect(55, 27, hp * 0.8, 20,Color.new(231,81,81))
end
end
end
class Window_Show < Window_Base
def initialize
super(230, 140, 300, 300)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = ["方正粗活意简体","方正粗活意简体"]
self.opacity = 0
end
def refresh(turn)
self.contents.clear
self.contents.font.size = 80
self.contents.font.color = Color.new(255,80,20)
self.contents.font.bold = false
case turn
when 0
self.contents.draw_text(0,0,150,150,"开始")
when 1
self.contents.draw_text(0,0,150,150,"警告")
when 2
self.contents.draw_text(0,0,150,150,"胜利")
end
end
end
class Window_Boss < Window_Base
def initialize
super(20, 0, 500, 100)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = ["方正粗活意简体","方正粗活意简体"]
self.opacity = 0
end
def refresh(hp)
self.contents.clear
self.contents.font.size = 22
self.contents.font.color = Color.new(255,20,20)
self.contents.font.bold = false
self.contents.draw_text(0,20,64,32,"Boss:")
if hp >= 230
self.contents.fill_rect(55, 27, 0.4* hp ,20,Color.new(73,188,46))
elsif hp >= 200
self.contents.fill_rect(55, 27, 0.4* hp,20,Color.new(240,200,64))
else
self.contents.fill_rect(55, 27, 0.4* hp ,20,Color.new(231,81,81))
end
end
end
|
|