關於部落格
RPG製作大師XP腳本為主要更新

RPG製作大師VX腳本為其次更新

RPG製作大師VX_Ace目前不考慮

RPG製作大師MV腳本完全沒打算

留言完建議重新整理看看是否顯示

目前不處理本舖外腳本的相關問題

其他相關事項請觀看規定注意事項

本舖未來的經營計畫與VA的支援




var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-37462754-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

  • 303700

    累積人氣

  • 67

    今日人氣

    0

    追蹤人氣

【腳本】踩地雷


使用方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:
RPG Maker XP 與 RPG Maker VX 均可使用,但VX的使用者自定設置要做更改!!
module Sword
#=======================================
#★ 魔劍工舖 - 踩地雷
# 轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/article/24817447
# 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置

SWORD_LAND_XPVX = 0    # 此腳本用於XP時設為0,此腳本用在VX時設為1
SWORD_LAND_LAND = '●' # 代表地圖顯示用的文字
SWORD_LAND_COVE = '■' # 代表沒按過的顯示用的文字
SWORD_LAND_LASE = '050-Explosion03' # 踩到地雷時播放的SE,''表示不播放
SWORD_LAND_ACME = '001-Victory01' # 設定當玩家勝利時演奏的ME,''表示不播放
SWORD_LAND_FRAM = [0, 0, 0] # 邊框的顏色
SWORD_LAND_SWIT = 12 # 選擇1個事件的開關編號,則該開關用來記錄是否成功
#=======================================
# 呼叫方法:$scene = Sword_Landmine.new(X座標, Y座標, 縱格數, 橫格數, 地雷數)
# 詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/24817447
#=======================================

end
 
class WSword_Landmine < Window_Base
  include Sword
  attr_reader   :danger
  def initialize(x, y, cx, cy, landmine)
    SWORD_LAND_XPVX == 0 ? xpvx = 23 : xpvx = 18
    super(x, y, cx*xpvx+36, cy*xpvx+40)
    self.contents = Bitmap.new(width - 32, height - 32)
    @Size = [cx, cy] # 傳遞採地雷大小之用
    @Landmine = Table.new(cx, cy) # 用來記錄所有格子的多維數組
    @danger = [] # 用來記錄炸彈的位置
    @index = [0, 0] # 記錄游標目前的位置 [X格, Y格]
    # 產生地雷位置

    for i in 1..landmine
      loop do
        a = rand(cx) and b = rand(cy)
        next if @Landmine[a, b] == 10
        @Landmine[a, b] = 10
        @danger.push([a, b])
        break
      end
    end
    # 記錄每格的數值
    for i in 0..cx-1
      for ii in 0..cy-1
        next if @Landmine[i, ii] == 10
        @Landmine[i, ii] += 1 if @Landmine[i-1, ii-1] == 10
        @Landmine[i, ii] += 1 if @Landmine[i, ii-1] == 10
        @Landmine[i, ii] += 1 if @Landmine[i+1, ii-1] == 10
        @Landmine[i, ii] += 1 if @Landmine[i-1, ii] == 10
        @Landmine[i, ii] += 1 if @Landmine[i+1, ii] == 10
        @Landmine[i, ii] += 1 if @Landmine[i-1, ii+1] == 10
        @Landmine[i, ii] += 1 if @Landmine[i, ii+1] == 10
        @Landmine[i, ii] += 1 if @Landmine[i+1, ii+1] == 10
      end
    end
    refresh
  end
  #● 顯示數值與地雷的方法
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    c = SWORD_LAND_FRAM
    if SWORD_LAND_XPVX == 0
      x = 23 and y = 23 and xpvx = 0 and v = 0
    else
      x = 18 and y = 18 and xpvx = 2 and v = 2
      self.contents.fill_rect(@Size[0]*x+2,4,2,2,Color.new(c[0],c[1],c[2]))
    end
    # 產生內容和格線
    for i in 0...@Size[0]
      self.contents.fill_rect(i*x+v,4+v,2,@Size[1]*x,Color.new(c[0],c[1],c[2]))
      for ii in 0...@Size[1]
        self.contents.fill_rect(0+v,ii*x+4+v-v,@Size[0]*x,2,Color.new(c[0],c[1],c[2]))
        if @Landmine[i, ii] == 10 # 當是地雷的場合
          self.contents.font.size = 20-xpvx
          self.contents.draw_text(x*i+3, y*ii+1-v, 32, 32, SWORD_LAND_LAND)
          self.contents.font.size = 22-xpvx
        elsif @Landmine[i, ii] == 0 # 當四周為0個炸彈時啥都不顯示
          next
        else # 當是數值的場合
          self.contents.draw_text(x*i+8, y*ii-v, 32, 32, "#{@Landmine[i, ii]}")
        end
      end
    end
    # 格線補完
    self.contents.fill_rect(0+v,4,2,@Size[1]*x+v,Color.new(c[0],c[1],c[2]))
    self.contents.fill_rect(@Size[0]*x+v,4+v,2,@Size[1]*x,Color.new(c[0],c[1],c[2]))
    self.contents.fill_rect(0+v,@Size[1]*x+4,@Size[0]*x+2,2,Color.new(c[0],c[1],c[2]))
  end
  # 猜到的地雷顏色變更
  def burst(x, y)
    if SWORD_LAND_XPVX == 0
      self.contents.fill_rect(x*23+2, y*23+5, 22, 22, Color.new(255, 0, 0))
      self.contents.font.size = 20
      self.contents.draw_text(x*23+3, y*23, 32, 32, SWORD_LAND_LAND)
    else
      self.contents.fill_rect(x*18+4, y*18+7, 16, 16, Color.new(255, 0, 0))
      self.contents.font.size = 18
      self.contents.draw_text(x*18+3, y*18-1, 32, 32, SWORD_LAND_LAND)
    end
  end
end
 
#■ 覆蓋地雷數值的類
class WSword_Cover < Window_Base
  include Sword
  def initialize(x, y, cx, cy)
    @Size = [cx, cy]
    super(x, y, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.z = 400
    @Landmine = Table.new(cx, cy)
    # 游標初始化
    @index = [0, 0]
    SWORD_LAND_XPVX == 0 ? xpvx = self.cursor_rect.set(@index[0]*23+2,
    @index[1]*23+5,22,23) : self.cursor_rect.set(@index[0]*18+3, @index[1]*18+5, 18, 18)
    refresh
  end
  #● 顯示遮擋用的格子
  def refresh(pick = false,  inspect = nil, burst = false)
    case pick
    when 1 # 按下確認鍵時
      # 當格子採過時中斷

      if @Landmine[@index[0],@index[1]] == 2 or @Landmine[@index[0], @index[1]] == 1
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.buzzer_se) :
        Sound.play_buzzer
        return [false, 0, 0, 0]
      end
      # 踩下格子
      for i in 0...inspect.size
        # 如果採到地雷時就讓地雷全部顯示
        if [[@index[0], @index[1]]].include?(inspect[i])
          burst = true
          Audio.se_play("Audio/SE/#{SWORD_LAND_LASE}", 100, 100) unless
          SWORD_LAND_LASE == ''
          for i in 0...inspect.size
            eval("@Landmine[#{inspect[i][0]}, #{inspect[i][1]}] = 1")
          end
          break
        end
      end
      SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.decision_se) :
      Sound.play_decision
      @Landmine[@index[0], @index[1]] = 1
    when 2 # 按下標記鍵時
      case @Landmine[@index[0], @index[1]]
      when 0 # 將格子做上標記
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.equip_se) :
        Sound.play_equip
        @Landmine[@index[0], @index[1]] = 2
      when 2 # 將格子解除標記
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.equip_se) :
        Sound.play_equip
        @Landmine[@index[0], @index[1]] = 0
      end
    end
    self.contents.clear
    self.contents.font.color = Color.new(200, 200, 200)
    # 產生遮蔽物
    if SWORD_LAND_XPVX == 0
      x = 23 and y = 23 and v = 0
    else
      self.contents.font.size = 20
      x = 18 and y = 18 and v = 2
    end
    for i in 0...@Size[0]
      for ii in 0...@Size[1]
        if @Landmine[i, ii] == 2
          self.contents.font.color = Color.new(255, 0, 0)
          self.contents.draw_text(x*i+2, y*ii-v, 32, 32, SWORD_LAND_COVE)
        elsif @Landmine[i, ii] == 0
          self.contents.draw_text(x*i+2, y*ii-v, 32, 32, SWORD_LAND_COVE)
        end
        self.contents.font.color = Color.new(200, 200, 200)
      end
    end
    return [burst, @index[0], @index[1], 1]
  end
  #● 更新游標位置
  def update_cursor_rect(direction)
    SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.cursor_se) :
    Sound.play_cursor
    # 設定位置
    case direction
    when 2 # 下
      @Landmine[@index[0], @index[1]+1] == nil ? @index[1] = 0 : @index[1] += 1
    when 4 # 左
      @Landmine[@index[0]-1, @index[1]] == nil ? @index[0] = @Size[0]-1 : @index[0] -= 1
    when 6 # 右
      @Landmine[@index[0]+1, @index[1]] == nil ? @index[0] = 0 : @index[0] += 1
    when 8 # 上
      @Landmine[@index[0], @index[1]-1] == nil ? @index[1] = @Size[1]-1 : @index[1] -= 1
    end
    SWORD_LAND_XPVX == 0 ? xpvx = self.cursor_rect.set(@index[0]*23+2,
    @index[1]*23+5,22,23) : self.cursor_rect.set(@index[0]*18+3, @index[1]*18+5, 18, 18)
  end
end
 
#■ 顯示採地雷畫面
class Sword_Landmine
  include Sword
  def initialize(x, y, cx, cy, landmine)
    @a = [x, y, cx, cy, landmine, cx*cy-landmine]
  end
  def main
    # 產生窗口
    @landmine_wsword = WSword_Landmine.new(@a[0], @a[1], @a[2], @a[3], @a[4])
    @cover_wsword = WSword_Cover.new(@a[0], @a[1], @a[2], @a[3])
    @spriteset = Spriteset_Map.new
    @burst = [false, 0, 0] # [繼續遊戲的必要, 游標左右位置, 游標上下位置]
    # 主流程
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    # 釋放窗口
    @landmine_wsword.dispose
    @cover_wsword.dispose
    @spriteset.dispose
  end
  def update
    # 更新窗口
    @cover_wsword.update
    # 當完成踩地雷時
    if @a[5] == 0 # 只播放1次ME而分開
      Audio.me_play("Audio/ME/#{SWORD_LAND_ACME}", 100, 100) unless
      SWORD_LAND_ACME == ''
      $game_switches[SWORD_LAND_SWIT] = true unless SWORD_LAND_SWIT == 0
      @a[5] = -1
    elsif @a[5] == -1
      if Input.trigger?(Input::C) or Input.trigger?(Input::B)
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.cancel_se) :
        Sound.play_cancel
        $scene = Scene_Map.new
      end
      return
    end
    # 當按鍵被按下時
    if @burst[0] # 遊戲結束
      if Input.trigger?(Input::C) or Input.trigger?(Input::B)
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.cancel_se) :
        Sound.play_cancel
        $scene = Scene_Map.new
      end
    else # 遊戲繼續
      if Input.repeat?(Input::UP)
        @cover_wsword.update_cursor_rect(8)
      elsif Input.repeat?(Input::DOWN)
        @cover_wsword.update_cursor_rect(2)
      elsif Input.repeat?(Input::LEFT)
        @cover_wsword.update_cursor_rect(4)
      elsif Input.repeat?(Input::RIGHT)
        @cover_wsword.update_cursor_rect(6)
      elsif Input.trigger?(Input::C)
        @burst = @cover_wsword.refresh(1, @landmine_wsword.danger)
        @landmine_wsword.burst(@burst[1], @burst[2]) if @burst[0]
        @a[5] -= @burst[3]
      elsif Input.trigger?(Input::A)
        @cover_wsword.refresh(2)
      elsif Input.trigger?(Input::B)
        SWORD_LAND_XPVX == 0 ? $game_system.se_play($data_system.cancel_se) :
        Sound.play_cancel
        $game_switches[SWORD_LAND_SWIT] = false unless SWORD_LAND_SWIT == 0
        $scene = Scene_Map.new
      end
    end
  end
end
RPG Maker VX 建議使用者自定設置
SWORD_LAND_XPVX = 1
SWORD_LAND_LASE = 'Fire8'
SWORD_LAND_ACME = 'Victory1'
 
 
設置方法
可用於事件中的 [腳本] 事件或是腳本編輯器使用
呼叫方法
$scene = Sword_Landmine.new(X座標, Y座標, 縱向格子數, 橫向格子數, 地雷數)
X座標:指定顯示踩地雷窗口的左右位置,數值越大窗口就越右邊
Y座標:指定顯示踩地雷窗口的上下位置,數值越大窗口就越下面
縱向格子數:設定寬度的格子數,數值越大,則左到右產生的格子數會越多
橫向格子數:設定高度的格子數,數值越大,則上到下產生的格子數會越多
地雷數:在用縱向格子數和橫向格字數產生出來的範圍中隨機放入此設置的數目的地雷
 
 
使用者自定設置說明
SWORD_LAND_XPVX = 0
如果你是使用RPG製作大師XP(RPG Maker XP),這個就要設成0
如果你是使用RPG製作大師VX(RPG Maker VX),這個就要設成1或其他數值
因為XP和VX的預設腳本有些不一樣,可能有窗口大小或是位置不對、某些功能會無效
還會有發生錯誤的情況,可由此設置來自動更改適合的腳本進行運行!!
 
SWORD_LAND_LAND = ''
設定用來當做炸彈的文字內容,輸入1個字即可(建議全型符號)
 
SWORD_LAND_COVE = ''
設定用來當做格子的文字內容,輸入1個字即可(建議全型符號,並能完全覆蓋地雷文字)
 
SWORD_LAND_LASE = '050-Explosion03'
當踩到地雷時播放的SE的檔案名稱,如果字串為空(''),則表示不播放SE
VX使用者建議改成【Fire8】,用預設沒改的內容會發生找不到檔案的現象
 
SWORD_LAND_ACME = '001-Victory01'
當所有格子踩過只剩下地雷時播放的ME的檔案名稱,如果字串為空(''),則表示不播放ME
VX使用者建議改成【Victory1】,用預設沒改的內容會發生找不到檔案的現象
 
SWORD_LAND_FRAM = [0, 0, 0]
設定表格格子的顏色,斿左到右分別代表紅、綠、藍,不同的組合可能有不同的顏色
這個可以參考事件 [變更畫面的色調] 或 小畫家的色盤,以下隨便舉例幾個:
[0, 0, 0]:黑色
[255, 255, 255]:白色
[255, 0, 0]:紅色
[0, 255, 0]:綠色
[0, 0, 255]:藍色
[255, 128, 0]:橘色
[255, 0, 255]:紫色
[255, 128, 192]:粉紅色
[255, 255, 0]:黃色
 
SWORD_LAND_SWIT = 12
指定一個開關編號,用來記錄是否有成功完成踩地雷小遊戲
如果踩到地雷或是按取消鍵關閉遊戲時,則你指定的開關編號的開關會改成OFF
如果當所有不是地雷的格子踩完,則你指定的開關編號的開關會改成ON
 
相簿設定
標籤設定
相簿狀態