#============================================================================== # ■ Game_Character_Box (自定义) #------------------------------------------------------------------------------ # □ 扩展Game_Character #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_accessor :destination # 目的地 attr_accessor :is_arrive # 是否到达 #-------------------------------------------------------------------------- # ● 初始化对像 #-------------------------------------------------------------------------- def initialize_box @destination = false @is_arrive = false $pass_num = 0 end end
#============================================================================== # ■ Interpreter_Box (自定义) #------------------------------------------------------------------------------ # □ 扩展Interpreter #============================================================================== class Interpreter #-------------------------------------------------------------------------- # ● 自定义脚本_设定目的地 #-------------------------------------------------------------------------- def command_set_destination unless get_character(0).destination get_character(0).destination = true $pass_num += 1 end end #-------------------------------------------------------------------------- # ● 自定义脚本_推箱子 #-------------------------------------------------------------------------- def command_pushbox row = 0 col = 0 # 判断人物朝向 case $game_player.direction when 2 row += 1 when 4 col -= 1 when 6 col += 1 when 8 row -= 1 end # 箱子 box = get_character(0) # 地图上的这个位置不能通行的情况下 unless $game_map.passable?(box.x+col, box.y+row, 0) return end # 遍历所有事件 for event in $game_map.events.values # 首先排除自己 if event.id != box.id # 1.判断箱子后方是否存在将要触发的事件 if event.x == box.x+col && event.y == box.y+row # 2.判断是否可以通过 if event.through break else return end end else next end end # 如果方法可以执行到这里,说明触发了移动事件 box.moveto(box.x+col, box.y+row) # 移动之后暂时不清楚是否到达目的,所以将标志位统一设置成false box.is_arrive = false # 更新人物位置 case $game_player.direction when 2 $game_player.move_down when 4 $game_player.move_left when 6 $game_player.move_right when 8 $game_player.move_up end # 遍历所有事件,判断移动后的箱子是否到达目的地 for event in $game_map.events.values # 首先排除自己 if event.id != box.id # 1.判断箱子所在位置是否存在事件 if event.x == box.x && event.y == box.y # 2.判断该事件的目的地信息 if event.destination box.is_arrive = true break else return end end end end # 如果方法可以执行到这里,说明这次移动触发了到达目的地事件 num = 0 # 遍历所有事件,统计到达目的地的箱子数量 for event in $game_map.events.values if event.is_arrive num +=1 end end # 判断到达目的地的箱子数量和通关所需的数量是否一致 if num != 0 && num == $pass_num print "通关(打印信息会暂停动画效果,并非BUG.)" end end end
244.44 KB, 下载次数: 69
推箱子
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |