OSDN Git Service

dfe6c8d7df9ae0f4278fe0d101f49b137e6eb70e
[rdgc/rdgc.git] / rogue01 / scene / pink_maze_game_master.rb
1 # coding: UTF-8
2 module ROgue01
3   module Scene
4     class PinkMazeGameMaster < RDGC::Scene::GameMaster
5
6       def produce_dungeon
7         case self.params[:game_mode]
8         when :normal
9           produce_normal_dungeon
10         when :endless
11           produce_endless_dungeon
12         else
13           produce_endless_dungeon
14         end
15       end
16
17       def produce_normal_dungeon
18         factroy = ROgue01::Dungeon::PinkMazeMonsterFactory.new(self.floor)
19         factroy.game_mode = self.params[:game_mode]
20
21         case floor
22         when ROGUE_MAX_FLOOR
23           maze = ROgue01::Dungeon::PinkMaze.create(self.player, self.floor,
24           :monster_factory => factroy, :downstep => false, :monster_max_ratio => 5.0,
25           :monster_pop_time=> RDGC::Util::Config.act_max_count*3, :visible_level => :normal)
26           set_boss(maze)
27         when 1
28           maze = ROgue01::Dungeon::PinkMaze.create(self.player, self.floor,
29           :monster_factory => factroy, :visible_level => :normal)
30         else
31           maze = ROgue01::Dungeon::PinkMaze.create(
32           self.player, self.floor, :monster_factory => factroy)
33         end
34
35         maze
36       end
37
38       def produce_endless_dungeon
39         m = ROgue01::Dungeon::PinkMaze.create(self.player, self.floor)
40         return m unless m.board.blind_mode == :normal
41         return m if bool_rand
42
43         dark_max = (m.board.rooms.size.to_f / 3.0).ceil
44         dark_count = range_rand(0, dark_max)
45         dark_count.times do
46           m.board.rooms.choice.set_blind(:dark)
47         end
48
49         m.board.fill_blind
50         m.board.open_blind(m.player.x, m.player.y, m.player.view_range)
51
52         m
53       end
54
55       # override
56       def judge(act_rsl)
57         if @boss && @boss.disable?
58           RDGC::Messages << %Q(#{@boss.name}から"熟しきったリンゴ"を手に入れた!)
59           RDGC::Messages << "Press SPACE..."
60           @ending = true
61           return
62         end
63
64         if self.params[:game_mode] == :normal
65           # 動かした回数
66           add_turn_count if act_rsl.to_s.match(/^player/)
67         end
68
69         super
70       end
71
72       def ending?
73         @ending
74       end
75
76       def set_boss(d)
77         # BOSS座標取得
78         x, y = d.random_point(false)
79
80         # BOSS生成
81         @boss = Monster::PinkBig.create(floor*3, x, y)
82         @boss.boss_flag = true
83
84         d.add_monster(@boss)
85       end
86
87       def add_turn_count
88         @turn_count ||= 0
89         @turn_count += 1
90       end
91
92       def turn_count
93         @turn_count ||= 0
94         @turn_count
95       end
96
97     end
98   end
99 end