Project1

标题: 请问,脚本如何判定奖励 [打印本页]

作者: guoyq1988    时间: 2014-3-14 12:58
标题: 请问,脚本如何判定奖励
请问,该脚本的胜负判定后,怎么判定胜利的变量?
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # 五子棋
  6. #------------------------------------------------------------------------------
  7. #使用$scene = Scene_Fir.new(true)呼出
  8. #==============================================================================
  9. class Scene_Fir

  10.   def initialize(first)
  11.   @s_value = 0 ; @value = 0
  12.   @full = 0
  13.   @first = first
  14.   end

  15.   def main
  16.     @fir_window = Window_Fir.new   
  17.     Graphics.transition(40,"Graphics/Transitions/004-Blind04")
  18.     unless @first
  19.        m = (rand(15) + 1)
  20.        n = (rand(15) + 1)
  21.        @fir_window.world[m,n]=2
  22.        @fir_window.pawn_move(144 + 32*(m-1),32*(n-1),"white")
  23.        @full = 1
  24.        @fir_window.refresh
  25.     end  
  26.     loop do
  27.       Graphics.update
  28.       Input.update
  29.       update
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     Graphics.freeze
  35.     @fir_window.cursor.dispose
  36.     @fir_window.dispose
  37.   end
  38.   
  39.   def update
  40.      case @fir_window.states
  41.        when 1
  42.        position
  43.        when 2
  44.        position_c  
  45.        when 3
  46.         if Input.trigger?(Input::B)
  47.            $game_system.se_play($data_system.cancel_se)
  48.            $scene = Scene_Map.new
  49.            return
  50.         end      
  51.      end
  52.   end
  53.   
  54.   def position
  55.     if Input.repeat?(Input::LEFT) or Input.repeat?(Input::RIGHT) or Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) or Input.trigger?(Input::C)
  56.       if Input.trigger?(Input::C)
  57.         x = @fir_window.st_x ; y = @fir_window.st_y
  58.         if @fir_window.world[x,y] != 0
  59.           $game_system.se_play($data_system.buzzer_se)
  60.           return
  61.         end  
  62.         $game_system.se_play($data_system.cursor_se)
  63.         @fir_window.pawn_move(144 + 32*(x-1),32*(y-1),"black")
  64.         @fir_window.world[x,y]=1
  65.         @full += 1
  66.         if win(x,y,"black")
  67.           @fir_window.win_states="black"
  68.           @fir_window.states = 3
  69.           @fir_window.refresh
  70.           return
  71.         end
  72.         if @full >= 255
  73.           @fir_window.states = 3
  74.           @fir_window.win_states="full"
  75.           @fir_window.refresh
  76.           return
  77.         end  
  78.         @fir_window.refresh
  79.         @fir_window.states = 2               
  80.         return
  81.       end
  82.       $game_system.se_play($data_system.cursor_se)
  83.       if Input.repeat?(Input::LEFT)        
  84.         @fir_window.st_x == 1 ? @fir_window.st_x = 15 : @fir_window.st_x-=1
  85.       end
  86.       if Input.repeat?(Input::RIGHT)
  87.         @fir_window.st_x == 15 ? @fir_window.st_x = 1 : @fir_window.st_x+=1
  88.       end  
  89.       if Input.repeat?(Input::UP)
  90.         @fir_window.st_y == 1 ? @fir_window.st_y = 15 : @fir_window.st_y-=1
  91.       end
  92.       if Input.repeat?(Input::DOWN)
  93.         @fir_window.st_y == 15 ? @fir_window.st_y = 1 : @fir_window.st_y+=1
  94.       end
  95.       @fir_window.refresh
  96.       return
  97.     end   
  98.   end

  99.   def position_c
  100.        Graphics.update
  101.        #白方价值
  102.        @fir_window.white_p = [nil]            
  103.        for i in 1..255
  104.          @fir_window.white_p.push(0)
  105.        end
  106.        for j in 1..15
  107.          for i in 1..15
  108.            if @fir_window.world[i,j] == 0
  109.               integral_calculus(i,j,1)
  110.               @fir_window.white_p[i+(j-1)*15] = @s_value
  111.            end            
  112.          end
  113.        end  
  114.        max = @fir_window.white_p.max
  115.        index = @fir_window.white_p.index(max)      
  116.        x1 = index%15 ; y1 = index/15+1
  117.        if x1==0
  118.           x1 = 15
  119.           y1 = y1-1
  120.        end  
  121.        @fir_window.world[x1,y1]=2
  122.        Graphics.update      
  123.        #黑方价值
  124.        @fir_window.black_p = [nil]            
  125.        for i in 1..255
  126.          @fir_window.black_p.push(0)
  127.        end
  128.        for j in 1..15
  129.          for i in 1..15
  130.            if @fir_window.world[i,j] == 0
  131.               integral_calculus(i,j,2)
  132.               @fir_window.black_p[i+(j-1)*15] = @s_value
  133.            end            
  134.          end
  135.        end
  136.        may = @fir_window.black_p.max
  137.        if may>=max and max<100001
  138.          indey = @fir_window.black_p.index(may)
  139.          x2 = indey%15 ; y2 = indey/15+1
  140.          if x2 == 0
  141.             x2 = 15
  142.             y2 = y2-1
  143.          end   
  144.          @fir_window.world[x1,y1]=0
  145.          @fir_window.world[x2,y2]=2
  146.          @fir_window.pawn_move(144 + 32*(x2-1),32*(y2-1),"white")
  147.          @full += 1
  148.          if win(x2,y2,"white")
  149.            @fir_window.win_states="white"
  150.            @fir_window.states = 3
  151.            @fir_window.refresh
  152.            return
  153.          end
  154.       else
  155.          @fir_window.pawn_move(144 + 32*(x1-1),32*(y1-1),"white")
  156.          @full += 1
  157.          if win(x1,y1,"white")
  158.            @fir_window.win_states="white"
  159.            @fir_window.states = 3
  160.            @fir_window.refresh
  161.            return
  162.          end         
  163.        end
  164.        if @full >= 255
  165.           @fir_window.states = 3
  166.           @fir_window.win_states="full"
  167.           @fir_window.refresh
  168.           return
  169.        end        
  170.        @fir_window.refresh
  171.        @fir_window.states = 1      
  172.        return
  173.   end  

  174.   def win(x,y,str)                 #胜负判定
  175.       word = @fir_window.world
  176.       a=x ; sum = 1
  177.       str=="black" ? win=1 : win=2
  178.       loop do       #水平左
  179.         a-=1
  180.         if (word[a,y] != win) or (a<1)
  181.           break
  182.         else
  183.           sum+=1
  184.           return true if sum>=5
  185.         end
  186.       end
  187.       a=x
  188.       loop do       #水平右
  189.         a+=1
  190.         if (word[a,y] != win) or (a>15)
  191.           break
  192.         else
  193.           sum+=1
  194.           return true if sum>=5
  195.         end
  196.       end
  197.       a=y ; sum = 1
  198.       loop do       #垂直上
  199.         a-=1
  200.         if (word[x,a] != win) or (a<1)
  201.           break
  202.         else
  203.           sum+=1
  204.           return true if sum>=5
  205.         end
  206.       end
  207.       a=y
  208.       loop do       #垂直下
  209.         a+=1
  210.         if (word[x,a] != win) or (a>15)
  211.           break
  212.         else
  213.           sum+=1
  214.           return true if sum>=5
  215.         end
  216.       end
  217.       a = x ; b = y ; sum = 1
  218.       loop do       #左上
  219.         a-=1 ; b-=1
  220.         if (word[a,b] != win) or (a<1) or (b<0)
  221.           break
  222.         else
  223.           sum+=1
  224.           return true if sum>=5
  225.         end
  226.       end      
  227.       a = x ; b = y ;
  228.       loop do       #右下
  229.         a+=1 ; b+=1
  230.         if (word[a,b] != win) or (a>15) or (b>15)
  231.           break
  232.         else
  233.           sum+=1
  234.           return true if sum>=5
  235.         end
  236.       end
  237.       a = x ; b = y ; sum = 1
  238.       loop do       #右上
  239.         a+=1 ; b-=1
  240.         if (word[a,b] != win) or (a>15) or (b<1)
  241.           break
  242.         else
  243.           sum+=1
  244.           return true if sum>=5
  245.         end
  246.       end      
  247.       a = x ; b = y ;
  248.       loop do       #左下
  249.         a-=1 ; b+=1
  250.         if (word[a,b] != win) or (a<1) or (b>15)
  251.           break
  252.         else
  253.           sum+=1
  254.           return true if sum>=5
  255.         end
  256.       end
  257.       return false
  258.    end
  259.    
  260. =begin
  261. 胜:100000
  262. 活四:10000
  263. 活三:2000
  264. 活二:500
  265. 冲四:5000
  266. 冲三:1000
  267. 冲二:100
  268. =end

  269.   def chess_model(sum,die)  #棋型
  270.     @value = 0
  271.     if sum >= 5
  272.       @value = 100000
  273.       return
  274.     end  
  275.     if die == 0
  276.       case sum
  277.         when 4
  278.           @value = 10000
  279.           return
  280.         when 3
  281.           @value = 2000
  282.           return
  283.         when 2
  284.           @value = 500
  285.           return
  286.       end   
  287.     elsif die == 1
  288.       case sum  
  289.         when 4
  290.           @value = 5000
  291.           return
  292.         when 3
  293.           @value = 1000
  294.           return
  295.         when 2
  296.           @value = 100
  297.           return
  298.         else
  299.           @value = 1
  300.           return
  301.       end
  302.     else
  303.       @value = 0
  304.       return
  305.     end     
  306.   end

  307. def integral_calculus(x,y,w_b)
  308.       word = @fir_window.world
  309.       @s_value = 0
  310.       die = 0
  311.       a=x ; sum = 1  
  312.       for i in 1..5       #水平左
  313.         a=x-i        
  314.         if (word[a,y] == 0)
  315.           break
  316.         elsif (word[a,y] == w_b) or (a<1)
  317.           die += 1
  318.           break
  319.         else
  320.           sum += 1
  321.         end
  322.       end
  323.       for i in 1..5       #水平右
  324.         a=x+i
  325.         if (word[a,y] == 0)  
  326.           break
  327.         elsif (word[a,y] == w_b) or (a>15)
  328.           die += 1
  329.           break
  330.         else
  331.           sum += 1
  332.         end
  333.       end
  334.       chess_model(sum,die)   #水平核分
  335.       @s_value += @value
  336.       sum = 1 ; die = 0
  337.       for i in 1..5       #垂直上
  338.         b=y-i
  339.         if (word[x,b] == 0)
  340.           break
  341.         elsif (word[x,b] == w_b) or (b<1)
  342.           die += 1
  343.           break
  344.         else
  345.           sum += 1
  346.         end
  347.       end
  348.       for i in 1..5       #垂直下
  349.         b=y+i
  350.         if (word[x,b] == 0)
  351.           break
  352.         elsif (word[x,b] == w_b) or (b>15)
  353.           die += 1
  354.           break
  355.         else
  356.           sum += 1
  357.         end
  358.       end
  359.       chess_model(sum,die)   #垂直核分
  360.       @s_value += @value
  361.       sum = 1 ; die = 0
  362.       for i in 1..5       #左上
  363.         a=x-i ; b=y-i
  364.         if (word[a,b] == 0)
  365.           break
  366.         elsif (word[a,b] == w_b) or (a<1) or (b<1)
  367.           die += 1
  368.           break
  369.         else
  370.           sum += 1
  371.         end
  372.       end
  373.       for i in 1..5       #右下
  374.         a=x+i ; b=y+i
  375.         if (word[a,b] == 0)
  376.           break
  377.         elsif (word[a,b] == w_b) or (a>15) or (b>15)
  378.           die += 1
  379.           break
  380.         else
  381.           sum += 1
  382.         end
  383.       end
  384.       chess_model(sum,die)   #左斜核分
  385.       @s_value += @value
  386.       sum = 1 ; die = 0
  387.       for i in 1..5       #右上
  388.         a=x+i ; b=y-i
  389.         if (word[a,b] == 0)
  390.           break
  391.         elsif (word[a,b] == w_b) or (a>15) or (b<1)
  392.           die += 1
  393.           break
  394.         else
  395.           sum += 1
  396.         end
  397.       end
  398.       for i in 1..5       #左下
  399.         a=x-i ; b=y+i
  400.         if (word[a,b] == 0)
  401.           break
  402.         elsif (word[a,b] == w_b) or (a<1) or (b>15)
  403.           die += 1
  404.           break
  405.         else
  406.           sum += 1
  407.         end
  408.       end
  409.       chess_model(sum,die)   #右斜核分
  410.       @s_value += @value      
  411.       return
  412.   end  

  413. end
  414. class Window_Fir < Window_Base
  415.   attr_accessor :states                   # 状态
  416.   attr_accessor :st_x                     # X
  417.   attr_accessor :st_y                     # Y
  418.   attr_accessor :world                    # 棋盘
  419.   attr_accessor :white_p                  # 白棋盘
  420.   attr_accessor :black_p                  # 黑棋盘
  421.   attr_accessor :win_states               # 胜利状态
  422.   attr_accessor :cursor                   # 光标
  423.   def initialize
  424.     super(-16, -16, 672, 512)
  425.     self.contents = Bitmap.new(width - 32, height - 32)
  426. #    $game_system.bgm_play($data_system.equip_se)
  427.     @fir_home=Bitmap.new('Graphics/Pictures/五子棋/world')
  428.     self.contents.blt(0,0,@fir_home,@fir_home.rect)      
  429.     @cursor=Bitmap.new('Graphics/Pictures/五子棋/world')  
  430.     @cursor = Sprite.new
  431.     @cursor.bitmap = RPG::Cache.picture('五子棋/cursor')
  432.     @cursor.z = self.z+10
  433.     @black=Bitmap.new('Graphics/Pictures/五子棋/black')
  434.     @white=Bitmap.new('Graphics/Pictures/五子棋/white')
  435.     @win_states=""
  436.   ######################变量###########################
  437.     @states = 1                               #执行状态
  438.     @st_x = 8 ; @st_y = 8                     #位置
  439.     [url=home.php?mod=space&uid=37789]@world[/url] = Table.new(16, 16)                #棋盘
  440.     for i in 1..15
  441.       for j in 1..15
  442.         @world[i,j]=0
  443.       end
  444.     end  
  445.     @white_p = [nil]                          #白棋表
  446.     for i in 1..255
  447.        @white_p.push(0)
  448.     end
  449.     @black_p = [nil]                          #黑棋表
  450.     for i in 1..255
  451.        @black_p.push(0)
  452.     end   
  453.   ######################变量###########################
  454.     position(@st_x,@st_y)
  455.   end
  456.   
  457.   def refresh
  458.      case @states
  459.        when 1
  460.        position(@st_x,@st_y)
  461.        when 2   
  462.        position(@st_x,@st_y)
  463.        when 3   
  464.        win_states(@win_states)
  465.      end
  466.   end
  467.   
  468.   def position(x,y)
  469.     @cursor.x = 144 + 32*(x-1)
  470.     @cursor.y = 32*(y-1)
  471.   end
  472.   
  473.   def pawn_move(x,y,str)
  474.     if str == "black"
  475.        self.contents.blt(x,y,@black,@black.rect)
  476.     elsif str == "white"
  477.        self.contents.blt(x,y,@white,@white.rect)
  478.     end   
  479.   end   
  480.   
  481.   def win_states(states)
  482.       self.contents.font.size = 50
  483.       self.contents.font.name = Font.default_name
  484.      case states
  485.        when "black"
  486.          self.contents.draw_text(50, 30, 320, 240, "你赢了")
  487.          $game_system.se_play($data_system.equip_se)         
  488.          $game_system.se_play($data_system.equip_se)
  489.          $game_switches[101] = true
  490.          for i in 1..5
  491.            Graphics.update
  492.          end  
  493.        when "white"
  494.          self.contents.draw_text(50, 30, 320, 240, "你输了")
  495.          $game_system.se_play($data_system.equip_se)      
  496.          for i in 1..5
  497.            Graphics.update
  498.          end  
  499.        when "full"
  500.          self.contents.draw_text(50, 30, 320, 240, "和局")
  501.          $game_system.se_play($data_system.equip_se)
  502.          $game_switches[102] = true
  503.          for i in 1..5
  504.            Graphics.update
  505.          end
  506.      end
  507.   end

  508. end

  509. #==============================================================================
  510. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  511. #==============================================================================
复制代码

作者: guoyq1988    时间: 2014-3-15 12:50
@天地有正气 @恋′挂机 @芯☆淡茹水 @紫英晓狼1130  
作者: 天地有正气    时间: 2014-3-15 13:43
有一个很经典的游戏叫梦大陆物语,里面用到了,可以参考一下?
作者: 弗雷德    时间: 2014-3-15 14:04
497行有一句写到$game_switches[101] = true
表示当胜利的时候会打开101号开关,LZ可以做个公共事件自动运行,当101号开关打开时,就运行事件,给个奖励。

另外这个电脑五子棋的算法太简单,很容易就会被玩家找到规律 100%稳胜刷奖励。
作者: guoyq1988    时间: 2014-3-15 19:11
弗雷德 发表于 2014-3-15 14:04
497行有一句写到$game_switches[101] = true
表示当胜利的时候会打开101号开关,LZ可以做个公共事件自动运 ...

谢谢熊淑的指点,脚本盲很无奈。。。。
{:7_292:}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1