仙剑之十里坡

标题: RM计算器!作者:七夕小雨 [打印本页]

作者: BlackFeather    时间: 2010-3-13 17:19
标题: RM计算器!作者:七夕小雨

  1. #==========================================================================
  2. #RM计算机……无用产物之一
  3. #脚本作者by 七夕小雨
  4. #============================================================================
  5. #Window_Command懒得写了……直接用星辰大人的好了……
  6. class Window_Command_Compute < Window_Selectable
  7. #--------------------------------------------------------------------------
  8. # ● 初始化对像
  9. #     width    : 每格的的宽
  10. #     row      : 行数   自己根据命令数算好行列的值,否则^^b
  11. #     column   : 列数
  12. #     commands : 命令字符串序列
  13. #--------------------------------------------------------------------------
  14. def initialize(width, commands, column=1)
  15.    row = commands.size / column
  16.    # 由命令的个数计算出窗口的宽和高
  17.    super(0, 0, width, row * 32 + 32)
  18.    @item_max = commands.size
  19.    @commands = commands
  20.    @row = row
  21.    @width_txt = (width-32)/column
  22.    @column_max = column
  23.    self.contents = Bitmap.new(width-32, @row * 32)
  24.    refresh
  25.    self.index = 0
  26. end
  27. #--------------------------------------------------------------------------
  28. # ● 刷新
  29. #--------------------------------------------------------------------------
  30. def refresh
  31.    self.contents.clear
  32.    self.contents.font.size = 18
  33.    for i in 0...@item_max
  34.      draw_item(i, normal_color)
  35.    end
  36. end
  37. #--------------------------------------------------------------------------
  38. # ● 描绘项目
  39. #     index : 项目编号
  40. #     color : 文字色
  41. #--------------------------------------------------------------------------
  42. def draw_item(index, color)
  43.    self.contents.font.color = color
  44.    # 计算得出当前index所对应的内容所在的行
  45.    row_index = index / @column_max
  46.    # 根据余数得出所在的列
  47.    for y in 0...@column_max
  48.      if index % @column_max == y
  49.        rect = Rect.new(y * @width_txt, 32 * row_index , @width_txt, 32)
  50.        self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  51.        self.contents.draw_text(rect, @commands[index],1)
  52.        break
  53.      end
  54.    end
  55. end
  56. #--------------------------------------------------------------------------
  57. # ● 项目无效化
  58. #     index : 项目编号
  59. #--------------------------------------------------------------------------
  60. def disable_item(index)
  61.    draw_item(index, disabled_color)
  62. end
  63. #--------------------------------------------------------------------------
  64. # ● 项目有效化
  65. #     index : 项目编号
  66. #--------------------------------------------------------------------------
  67. def able_item(index)
  68.    draw_item(index, normal_color)
  69. end
  70.   #--------------------------------------------------------------------------
  71.   # ● 更新光标举行
  72.   #--------------------------------------------------------------------------
  73.   def update_cursor_rect
  74.     # 光标位置不满 0 的情况下
  75.     if @index < 0
  76.       self.cursor_rect.empty
  77.       return
  78.     end
  79.     # 获取当前的行
  80.     row = @index / @column_max
  81.     # 当前行被显示开头行前面的情况下
  82.     if row < self.top_row
  83.       # 从当前行向开头行滚动
  84.       self.top_row = row
  85.     end
  86.     # 当前行被显示末尾行之后的情况下
  87.     if row > self.top_row + (self.page_row_max - 1)
  88.       # 从当前行向末尾滚动
  89.       self.top_row = row - (self.page_row_max - 1)
  90.     end
  91.     # 计算光标的宽
  92.     cursor_width = @width_txt
  93.     # 计算光标坐标
  94.     x = @index % @column_max * cursor_width
  95.     y = @index / @column_max * 32 - self.oy
  96.     # 更新国标矩形
  97.     self.cursor_rect.set(x, y, @width_txt, 32)
  98.   end
  99. end
  100. #-------------------------七夕小雨华丽的分割线-------------------------------
  101. class Window_Compute < Window_Base
  102.   def initialize
  103.     super(250, 64, 182, 64)
  104.     self.contents = Bitmap.new(width - 32, height - 32)
  105.     $compute = "0"
  106.     refresh
  107.   end
  108.   def refresh
  109.    
  110.     self.contents.clear
  111.     self.contents.font.color = normal_color
  112.     self.contents.draw_text(-32, 0, 180, 32, $compute.to_s, 2)
  113.   end
  114. end
  115. #-------------------------七夕小雨华丽的分割线--------------------------------
  116. class Scene_Compute
  117.   #--------------------------------------------------------------------------
  118.   # ● 初始化对像
  119.   #     menu_index : 命令光标的初期位置
  120.   #--------------------------------------------------------------------------
  121.   def initialize(menu_index = 0)
  122.     @menu_index = menu_index
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 主处理
  126.   #--------------------------------------------------------------------------
  127.   def main
  128.     @back = Spriteset_Map.new
  129.     @command_window = Window_Command_Compute.new(180, ["1","2","3","4","5","6","7","8","9","0","+","-","×","÷","=","归零"],4)
  130.     @command_window.x = 250
  131.     @command_window.y = 140
  132.     @command_window.index = @menu_index
  133.     @compute_window = Window_Compute.new
  134.     # 执行过渡
  135.     Graphics.transition
  136.     # 主循环
  137.     loop do
  138.       # 刷新游戏画面
  139.       Graphics.update
  140.       # 刷新输入信息
  141.       Input.update
  142.       # 刷新画面
  143.       update
  144.       # 如果切换画面就中断循环
  145.       if $scene != self
  146.         break
  147.       end
  148.     end
  149.     # 准备过渡
  150.     Graphics.freeze
  151.     @compute_window.dispose
  152.     @command_window.dispose
  153.     @back.dispose
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 刷新画面
  157.   #--------------------------------------------------------------------------
  158.   def update
  159.     @compute_window.update
  160.     @compute_window.refresh
  161.     @command_window.update
  162.     # 命令窗口被激活的情况下: 调用 update_command
  163.     if @command_window.active
  164.       update_command
  165.       return
  166.     end
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 刷新画面 (命令窗口被激活的情况下)
  170.   #--------------------------------------------------------------------------
  171.   def update_command
  172.     # 按下 B 键的情况下
  173.     if Input.trigger?(Input::B)
  174.       $game_system.se_play($data_system.cancel_se)
  175.       $scene = Scene_Map.new
  176.       return
  177.     end
  178.     # 按下 C 键的情况下
  179.     if Input.trigger?(Input::C)
  180.       case @command_window.index
  181.       when 0  # 1
  182.         $game_system.se_play($data_system.decision_se)
  183.         if $compute != "0"
  184.           $compute += "1"
  185.         else
  186.           $compute = "1"
  187.         end
  188.       when 1  # 2
  189.         $game_system.se_play($data_system.decision_se)
  190.         if $compute != "0"
  191.           $compute += "2"
  192.         else
  193.           $compute = "2"
  194.         end
  195.       when 2  # 3
  196.         $game_system.se_play($data_system.decision_se)
  197.         if $compute != "0"
  198.           $compute += "3"
  199.         else
  200.           $compute = "3"
  201.         end
  202.       when 3  # 4
  203.         $game_system.se_play($data_system.decision_se)
  204.         if $compute != "0"
  205.           $compute += "4"
  206.         else
  207.           $compute = "4"
  208.         end
  209.       when 4  # 5
  210.         $game_system.se_play($data_system.decision_se)
  211.         if $compute != "0"
  212.           $compute += "5"
  213.         else
  214.           $compute = "5"
  215.         end
  216.       when 5  # 6
  217.         $game_system.se_play($data_system.decision_se)
  218.         if $compute != "0"
  219.           $compute += "6"
  220.         else
  221.           $compute = "6"
  222.         end
  223.       when 6  # 7
  224.         $game_system.se_play($data_system.decision_se)
  225.         if $compute != "0"
  226.           $compute += "7"
  227.         else
  228.           $compute = "7"
  229.         end
  230.       when 7  # 8
  231.         $game_system.se_play($data_system.decision_se)
  232.         if $compute != "0"
  233.           $compute += "8"
  234.         else
  235.           $compute = "8"
  236.         end
  237.       when 8  # 9
  238.         $game_system.se_play($data_system.decision_se)
  239.         if $compute != "0"
  240.           $compute += "9"
  241.         else
  242.           $compute = "9"
  243.         end
  244.       when 9  # 0
  245.         $game_system.se_play($data_system.decision_se)
  246.         if $compute != "0"
  247.           $compute += "0"
  248.         else
  249.           $compute = "0"
  250.         end
  251.       when 10  # +
  252.         $game_system.se_play($data_system.decision_se)
  253.         @a = $compute.to_i
  254.         @Operation = 1
  255.         $compute = "0"
  256.       when 11  # -
  257.         $game_system.se_play($data_system.decision_se)
  258.         @a = $compute.to_i
  259.         @Operation = 2
  260.         $compute = "0"
  261.       when 12  # x
  262.         $game_system.se_play($data_system.decision_se)
  263.         @a = $compute.to_i
  264.         @Operation = 3
  265.         $compute = "0"
  266.       when 13  # /
  267.         $game_system.se_play($data_system.decision_se)
  268.         @a = $compute.to_i
  269.         @Operation = 4
  270.         $compute = "0"
  271.       when 14  # =
  272.         case @Operation
  273.         when 0
  274.           $game_system.se_play($data_system.cancel_se)
  275.         when 1
  276.           $game_system.se_play($data_system.decision_se)
  277.           @b = $compute.to_i
  278.           $c = @a + @b
  279.           $c = $c.to_s
  280.           $compute = $c
  281.         when 2
  282.           $game_system.se_play($data_system.decision_se)
  283.           @b = $compute.to_i
  284.           $c = @a - @b
  285.           $c = $c.to_s
  286.           $compute = $c
  287.         when 3
  288.           $game_system.se_play($data_system.decision_se)
  289.           @b = $compute.to_i
  290.           $c = @a * @b
  291.           $c = $c.to_s
  292.           $compute = $c
  293.         when 4
  294.           $game_system.se_play($data_system.decision_se)
  295.           @b = $compute.to_i
  296.           $c = @a / @b
  297.           $c = $c.to_s
  298.           $compute = $c
  299.         end
  300.       when 15
  301.         $game_system.se_play($data_system.cancel_se)
  302.         $compute = "0"
  303.         @Operation = 0
  304.       end
  305.       return
  306.     end
  307.   end
  308. end
复制代码

作者: 最爱南宫煌    时间: 2010-3-13 17:36
用这个脚本做的计算器有什么用?还有,怎么把这个计算器在事件中调出来?你都没写啊?
(小声:既然是无用产物之一,干吗还拿出来?)
作者: 残阳泪珀    时间: 2010-3-13 18:25
这是个很囧的东西……
作者: BlackFeather    时间: 2010-3-13 18:41
还打错了一个字
作者: BlackFeather    时间: 2010-3-13 18:43
用这个脚本做的计算器有什么用?还有,怎么把这个计算器在事件中调出来?你都没写啊?
(小声:既然是无用产物之一,干吗还拿出来?)
最爱南宫煌 发表于 2010-3-12 21:36

1.调用class
2.这个无用是小雨写的,但有时可以用来挪作他用
作者: 冷剑随风    时间: 2010-3-13 22:21
这是小雨在博客里写的....
不过这不是计算器吧....是RM计算机
作者: 残阳泪珀    时间: 2010-3-13 22:30
是计算器 不是计算机 = =
作者: BlackFeather    时间: 2010-3-14 08:37
这是小雨在博客里写的....
不过这不是计算器吧....是RM计算机
冷剑随风 发表于 2010-3-13 02:21

这个是在时空传里翻出来的……

外:就是计算器
作者: 七夕小雨    时间: 2010-3-14 10:30
事件——》脚本——》$scene = Scene_Compute.new
就调出来了~~
这个计算器问题还很多,零到除数,比如没有浮点运算等等,程序也可以写的更简单,但是却啰嗦的写了一堆~当然是方便新人看懂了
作者: 最爱南宫煌    时间: 2010-3-14 17:25
哦,我看也是。




欢迎光临 仙剑之十里坡 (http://palslp.com/bbs/) Powered by Discuz! X2.5