關於部落格
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);
})();

  • 305763

    累積人氣

  • 6

    今日人氣

    0

    追蹤人氣

【腳本】九公格拼圖


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

SWORD_SECT_XORY = [170, 90] # 指定拼圖的顯示位置 [X座標, Y座標]
SWORD_SECT_WIXY = [230, 416] # 指定顯示移動字數的文字位置
SWORD_SECT_YEMP = 8 # 設定拼圖移動的速度
# 設置SWORD_SECT_BACK可以為字串,就會查找遊戲中的Panoramas資料夾的圖片
SWORD_SECT_BACK = 255 # 選擇畫面背景,設置0~255為窗口不透明度,負數為地圖
SWORD_SECT_FREQ = 50 # 設定遊戲開始前的弄亂滾動次數(該功能會LAG)
SWORD_SECT_ANIM = 1 # 是否一開始顯示弄亂動畫,0為不顯示,1為顯示
SWORD_SECT_VARI = 25 # 指定變數編號,該變數會存入移動次數,0為不使用變數
SWORD_SECT_SWIT = 25 # 指定開關編號,該開關會存入是否完成,0為不使用開關
SWORD_SECT_INPU = 12 # 指定放棄的按鍵,負數則採用 [全鍵盤按鍵與功能擴充]
# 設定拼圖的圖片檔案名稱和空缺的位置,可自行增加多個SWORD_SECTION[編號]
# 圖片存放位置為你的遊戲資料夾/Graphics/Pictures,請存成png圖檔

SWORD_SECTION[1] = ['Section', 9]
#=======================================
#● 設置方法
#呼叫方法:$scene = Sword_Section.new(編號)
 
#詳細設置說明請參考:
http://blog.yam.com/a870053jjkj/article/24566330
#=======================================

end
 
class WSword_Section < Window_Base
  include Sword
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 10
    @b = -1 + -SWORD_SECT_FREQ # 用來記錄移動次數的變量 
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(4+SWORD_SECT_WIXY[0],
    0+SWORD_SECT_WIXY[1], 120, 32, "移動次數:")
    self.contents.font.color = normal_color
    # 增加移動次數
    @b += 1
    SWORD_SECT_VARI == 0 ? 0 : $game_variables[SWORD_SECT_VARI] = @b
    @b < 0 ? self.contents.draw_text(120+SWORD_SECT_WIXY[0],
    0+SWORD_SECT_WIXY[1], 120, 32, '0') :
    self.contents.draw_text(120+SWORD_SECT_WIXY[0],
    0+SWORD_SECT_WIXY[1], 120, 32, @b.to_s)
  end
end
 
class Sword_Section
  include Sword
  # 獲取拼圖編號
  def initialize(blank)
    @blank = blank
  end
  def main
    @section_wsword = WSword_Section.new
    if SWORD_SECT_BACK >= 0 # 窗口
      @section_wsword.opacity = SWORD_SECT_BACK
    else # 地圖
      @section_wsword.opacity = SWORD_SECT_BACK.abs - 1
      @spriteset = Spriteset_Map.new
    end
    # 拼圖答案:{位置編號=>圖片區塊編號}
    @hash = {SWORD_SECTION[@blank][1]=>SWORD_SECTION[@blank][1]}
    # 隨機產生題目
    for i in 1..9
      i == SWORD_SECTION[@blank][1] ? next : 0
      loop do
        a = rand(9) + 1
        unless @hash.has_value?(a)
          @hash[i] = a
          break
        end
      end
    end
    # 產生圖片
    @logo = Array.new(10){Sprite.new}
    @section = RPG::Cache.picture(SWORD_SECTION[@blank][0])
    @width = @section.width / 3
    @height = @section.height / 3
    # 計算圖片矩型
    @hash = {1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9}
    x = 0 # 記錄圖塊顯示的X座標
    y = 0 # 記錄圖塊顯示的Y座標
    for i in 1..9
      # 獲取位置圖塊
      if SWORD_SECTION[@blank][1] == i
        x += @width
        if x == @section.width
          y += @height
          x = 0
        end
        next
      end
      # 獲取圖塊大小
      cx = @hash[i] - 1
      cy = 0
      for i1 in 0..1
        if cx >= 3
          cx -= 3
          cy += 1
        end
      end
      cx = cx * @width
      cy = cy * @height
      # 顯示圖片
      @logo[i].bitmap = Bitmap.new(640, 480)
      @logo[i].bitmap.blt(x+SWORD_SECT_XORY[0],
      y+SWORD_SECT_XORY[1], @section, Rect.new(cx, cy, @width, @height))
      @logo[i].z = 11
      # 計算下個圖塊的位置
      x += @width
      if x == @section.width
        y += @height
        x = 0
      end
    end
    @state = @hash # 代入目前的狀況
    @hash = {1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9} # 代入答案
    @state[SWORD_SECTION[@blank][1]] = 0
    @hash[SWORD_SECTION[@blank][1]] = 0
    SWORD_SECT_ANIM == 0 ? 0 : Graphics.transition
    i = 0 # 記錄循環次數
    @disorder_show = false
    # 隨機移動拼圖圖塊(弄亂拼圖)
    a = 3
    while i < SWORD_SECT_FREQ
      case a
      when 0 # 上
        case @state.index(0)
        when 1
          update(4, 1, 8)
          i += 1 and rand(2) == 0 ? a = 0 : a = 2
        when 2
          update(5, 2, 8)
          i += 1
          case rand(3)
          when 0
            a = 0
          when 1
            a = 2
          when 2
            a = 3
          end
        when 3
          update(6, 3, 8)
          i += 1 and rand(2) == 0 ? a = 3 : a = 0
        when 4
          update(7, 4, 8)
          i += 1 and a = 2
        when 5
          update(8, 5, 8)
          i += 1 and rand(2) == 0 ? a = 2 : a = 3
        when 6
          update(9, 6, 8)
          i += 1 and a = 3
        end
      when 1 # 下
        case @state.index(0)
        when 4
          update(1, 4, 2)
          i += 1 and a = 2
        when 5
          update(2, 5, 2)
          i += 1 and rand(2) == 0 ? a = 2 : a = 3
        when 6
          update(3, 6, 2)
          i += 1 and a = 3
        when 7
          update(4, 7, 2)
          i += 1 and rand(2) == 0 ? a = 1 : a = 2
        when 8
          update(5, 8, 2)
          i += 1
          case rand(3)
          when 0
            a = 1
          when 1
            a = 2
          when 2
            a = 3
          end
        when 9
          update(6, 9, 2)
          i += 1 and rand(2) == 0 ? a = 1 : a = 3
        end
      when 2 # 左
        case @state.index(0)
        when 1
          update(2, 1, 4)
          i += 1 and rand(2) == 0 ? a = 0 : a = 2
        when 2
          update(3, 2, 4)
          i += 1 and a = 0
        when 4
          update(5, 4, 4)
          i += 1
          case rand(3)
          when 0
            a = 0
          when 1
            a = 1
          when 2
            a = 2
          end
        when 5
          update(6, 5, 4)
          i += 1 and rand(2) == 0 ? a = 1 : a = 0
        when 7
          update(8, 7, 4)
          i += 1 and rand(2) == 0 ? a = 1 : a = 2
        when 8
          update(9, 8, 4)
          i += 1 and a = 1
        end
      when 3 # 右
        case @state.index(0)
        when 2
          update(1, 2, 6)
          i += 1 and a = 0
        when 3
          update(2, 3, 6)
          i += 1 and rand(2) == 0 ? a = 0 : a = 3
        when 5
          update(4, 5, 6)
          i += 1 and rand(2) == 0 ? a = 1 : a = 0
        when 6
          update(5, 6, 6)
          i += 1
          case rand(3)
          when 0
            a = 0
          when 1
            a = 1
          when 2
            a = 3
          end
        when 8
          update(7, 8, 6)
          i += 1 and a = 1
        when 9
          update(8, 9, 6)
          i += 1 and rand(2) == 0 ? a = 1 : a = 3
        end
      end
    end
    Graphics.transition
    # 遊戲開始
    @disorder_show = true
    loop do
      Graphics.update
      Input.update
      # 宣告放棄的按鈕
      if SWORD_SECT_INPU > 0 # 預設按鍵
        if Input.trigger?(SWORD_SECT_INPU)
          $game_switches[SWORD_SECT_SWIT] = false
          $scene = Scene_Map.new
        end
      elsif SWORD_SECT_INPU < 0 # 全鍵盤按鍵與功能擴充
        if Sword_I.trigger?(SWORD_SECT_INPU.abs)
          $game_switches[SWORD_SECT_SWIT] = false
          $scene = Scene_Map.new
        end
      end
      # 按下 上 的場合
      if Input.trigger?(Input::UP)
        i = 0
        case @state.index(0)
        when 1
          update(4, 1, 8)
        when 2
          update(5, 2, 8)
        when 3
          update(6, 3, 8)
        when 4
          update(7, 4, 8)
        when 5
          update(8, 5, 8)
        when 6
          update(9, 6, 8)
        end
      end
      # 按下 下 的場合
      if Input.trigger?(Input::DOWN)
        i = 0
        case @state.index(0)
        when 4
          update(1, 4, 2)
        when 5
          update(2, 5, 2)
        when 6
          update(3, 6, 2)
        when 7
          update(4, 7, 2)
        when 8
          update(5, 8, 2)
        when 9
          update(6, 9, 2)
        end
      end
      # 按下 左 的場合
      if Input.trigger?(Input::LEFT)
        i = 0
        case @state.index(0)
        when 1
          update(2, 1, 4)
        when 2
          update(3, 2, 4)
        when 4
          update(5, 4, 4)
        when 5
          update(6, 5, 4)
        when 7
          update(8, 7, 4)
        when 8
          update(9, 8, 4)
        end
      end
      # 按下 右 的場合
      if Input.trigger?(Input::RIGHT)
        i = 0
        case @state.index(0)
        when 2
          update(1, 2, 6)
        when 3
          update(2, 3, 6)
        when 5
          update(4, 5, 6)
        when 6
          update(5, 6, 6)
        when 8
          update(7, 8, 6)
        when 9
          update(8, 9, 6)
        end
      end
      if @hash == @state
        $game_switches[SWORD_SECT_SWIT] = true
        $scene = Scene_Map.new
      end
      # 畫面切換時中斷循環
      if $scene != self
        break
      end
    end
    Graphics.freeze
    # 釋放窗口
    unless @section_wsword == nil
      @section_wsword.dispose
    end
    # 釋放地圖
    unless @spriteset == nil
      @spriteset.dispose
    end
    # 釋放圖片區塊
    for i in 1..9
      unless @logo == nil
        @logo[i].bitmap.dispose
        @logo[i].dispose
      end
    end
  end
  # 更新拼圖畫面與位置的方法(新的空白位置編號, 舊的空白位置編號, 按鍵)
  def update(new, old, input)
    # 更新窗口
    @section_wsword.refresh
    # 滾動效果
    if @disorder_show == false and SWORD_SECT_ANIM == 1 or @disorder_show
      i = 0 # 用來記錄目前滾動的像素
      case input
      when 2 # 下
        while i < @height - 1
          i + SWORD_SECT_YEMP < @height - 1 ? @logo[new].y += SWORD_SECT_YEMP : 0
          i += SWORD_SECT_YEMP
          Graphics.update
        end
      when 4 # 左
        while i < @width - 1
          i + SWORD_SECT_YEMP < @height - 1 ? @logo[new].x -= SWORD_SECT_YEMP : 0
          i += SWORD_SECT_YEMP
          Graphics.update
        end
      when 6 # 右
        while i < @width - 1
          i + SWORD_SECT_YEMP < @height - 1 ? @logo[new].x += SWORD_SECT_YEMP : 0
          i += SWORD_SECT_YEMP
          Graphics.update
        end
      when 8 # 上
        while i < @height - 1
          i + SWORD_SECT_YEMP < @height - 1 ? @logo[new].y -= SWORD_SECT_YEMP : 0
          i += SWORD_SECT_YEMP
          Graphics.update
        end
      end
    end
    @state[old] = @state[new] # 更新目前狀況
    # 計算顯示位置
    x = old - 1
    y = 0
    for i in 0..1
      if x >= 3
        x -= 3
        y += 1
      end
    end
    x = x * @width
    y = y * @height
    # 計算顯示圖塊
    cx = @state[old] - 1
    cy = 0
    for i in 0..1
      if cx >= 3
        cx -= 3
        cy += 1
      end
    end
    cx = cx * @width
    cy = cy * @height
    # 重新產生圖塊
    @logo[old] = Sprite.new #重新定義精靈類 (防止無法第2次顯示)
    @logo[old].bitmap = Bitmap.new(640, 480)
    # 顯示新圖塊
    @logo[old].bitmap.blt(x+SWORD_SECT_XORY[0],
    y+SWORD_SECT_XORY[1], @section, Rect.new(cx, cy, @width, @height))
    @logo[old].z = 11
    @logo[new].bitmap.dispose
    @logo[new].dispose
    @state[new] = 0
  end
end
 
RPG Maker VX 適用方式
1.腳本第33行發現腳本【super(0, 0, 640, 480)
改成【super(0, 0, Graphics.width, Graphics.height)
2.腳本第84行發現腳本【@section = RPG::Cache.picture(SWORD_SECTION[@blank][0])
改成【@section = Cache.picture(SWORD_SECTION[@blank][0])
3.使用者自定設置建議:
SWORD_SECT_XORY = [114, 26]
SWORD_SECT_WIXY = [184, 352]
 
 
設置方法
可用於在事件中的 [腳本] 事件或是腳本編輯器中
呼叫方法
呼叫指定編號的拼圖,這個在使用者自定設置會在說明
$scene = Sword_Section.new(編號)
 
 
使用者自定設置說明
SWORD_SECT_XORY = [170, 90]
設定要顯示的拼圖位置
左邊為X座標,控制左右位置,右邊為Y座標,控制上下位置
數值每1為1像素的距離
 
SWORD_SECT_WIXY = [230, 416]
設定顯示移動次數的文字位置
左邊為X座標,控制左右位置,右邊為Y座標,控制上下位置
數值每1為1像素的距離
 
SWORD_SECT_YEMP = 8 
設定拼圖移動的滾動速度,如果此設為5,表示移動拼圖的滾動動畫
每幀時間移動5像素的距離,數值越大,滾動速度就越快
 
SWORD_SECT_BACK = 255
設定背景窗口的不透明度,255為完全不透明,0為窗口完全透明
如果輸入-1(數值左邊加上-符號為負數),就表示背景為角色所在地圖,並不透明度為0
負數一樣可以設定窗口的不透明度,例如此設置為-100
就表示顯示當前的地圖為背景並在顯示不透明度為99的窗
(字串指定背景圖片功能尚未開放,請不要浪費時間嘗試...)
 
SWORD_SECT_FREQ = 50
也就是在開始遊戲前,系統將完整的拼圖移亂的移動次數
如果這裡設為100,則開始遊戲之前,就會先看系統隨機移動100次
請勿設置太多,小心玩家等到發瘋...
如果SWORD_SECT_ANIM設置為0,而此設置設太高的話會有延遲現象
 
SWORD_SECT_ANIM = 1
設定是否在開始遊戲前給玩家看系統把完整的拼圖移亂的動畫
0表示不顯示,此外會忽略掉滾動效果的動作,竟量快速的在短時間內順邊將拼圖弄亂
1表示顯示,就讓玩家慢慢的看電腦移亂拼圖吧...
 
SWORD_SECT_VARI = 25
指定1個 [變數操作] 事件中的1個變數編號,則該編號的變數會記錄拼圖移動的次數
變數會壘加,如果不想壘加,請將該變數的數值代入0在呼叫九公格拼圖畫面
如果這個設置設為0,則不會有任何的變數記錄拼圖的移動次數
 
SWORD_SECT_SWIT = 25
指定1個 [開關操作] 事件中的1個開關編號,則該編號的開關會用來記錄是否完成拼圖
如果玩家按下中途放棄的鍵,則你指定的開關會變更為OFF
如果玩家成功拼出拼圖之時,則你指定的開關會變更為ON
如果這個設置設為0,則不會有任何的開關用來記錄是完成還是放棄這個遊戲
 
SWORD_SECT_INPU = 12 
指定1個按鍵,則該按鍵用於放棄此遊戲之用,放棄遊戲後會回到地圖畫面
並將SWORD_SECT_SWIT設置的開關編號改為OFF
數值可以參考事件 [按鍵輸入的處理] ,以下是數值的資料..
2:下鍵
4:左鍵
6:右鍵
8:上鍵
11:Shift、Z鍵
12:Esc、Num 0、X鍵
13:空白、Enter、C鍵
14:A鍵
15:S鍵
16:D鍵
17:Q、Pageup鍵
18:W、Pagedown鍵

如果指定負數(數值左邊加上-符號為負數),則採用全部鍵盤的鍵值
(需裝本部落的全鍵盤按鍵與功能擴充,鍵值記得左邊要加上-符號來辨識是在用全鍵盤腳本)
 
SWORD_SECTION[編號] = ['圖片檔案名稱', 空缺位置]
編號:開通拼圖,每個拼圖編號都必須不一樣,編號用於辨識是哪1個拼圖
   可以使用上方的呼叫方法來指定想要使用的拼圖編號
圖片檔案名稱:選擇要作為拼圖的圖片名稱,圖片必須為PNG圖檔,寬、高度建議能被3整除
       圖檔必須為PNG,並存在:你的遊戲資料夾/Graphics/Pictures
空缺位置:決定9個圖塊中的第幾個圖塊作為拼圖空缺的部份
     例如這裡設置5,則正中央的圖塊就會消失,同時系統也會從中央開始弄亂拼圖
     【每個位置代表的數值】
     1 2 3
     4 5 6
     7 8 9
 
 
範例下載
下載連接:檔案大小:236 KB檔案類型:RAR(內為RMXP遊戲壓縮安裝檔)
下載連接:檔案大小:367 KB檔案類型:RAR(內為RMVX遊戲壓縮安裝檔)
本人掃毒程式不是說很好,雖然目前沒看出什麼中毒跡象,但下載前建議先用掃毒程式查毒
☆yam天空部落空間(附加檔案),檔案名稱有被轉過
☆範例中有個隨便繪製的數字九公格圖片,當做範例圖片
☆遊戲操作方法:方向鍵上下左右控制
 
相簿設定
標籤設定
相簿狀態