设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3404|回复: 3
打印 上一主题 下一主题

[RMVA发布] 把《金庸无双1.0》中的水道灌溉小游戏移到RMVA上

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-8
帖子
8
跳转到指定楼层
1
发表于 2013-7-15 21:49:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
在金圭子复刻的版本上做了修改,从两个类合并成一个类,取消了反复NEW棋盘的语句,取消了原有的4个全程变量,截图如下:


脚本代码:
RUBY 代码复制
  1. #==============================================================================
  2. # ※ WaterWay
  3. #------------------------------------------------------------------------------
  4. #  小游戏:水道灌溉(仿《太阁立志传5》的农业小游戏。在金圭子复刻版本上修改。
  5. #
  6. # 脚本调用方法:SceneManager.call(Scene_WaterWay)
  7. #               SceneManager.scene.Start_WaterWay_Game(6)
  8. #               SceneManager.return
  9. #==============================================================================
  10.  
  11. class Scene_WaterWay < Scene_Base
  12.  
  13.   # 总的灌溉完成进度放在以如下常量为序号的系统变量中
  14.   CONST_WATERWAY_SCORE_V_NO = 737
  15.  
  16.   #--------------------------------------------------------------------------
  17.   # ● 开始游戏,r指定了棋盘的大小,4~8,6即6X6,7即7X7,8即8X8
  18.   #--------------------------------------------------------------------------
  19.   def Start_WaterWay_Game(r = 6)
  20.     #
  21.     # 初始化棋盘和子块,即计算用的数据结构
  22.     # 棋盘左上角:164,91;左框左上角:25,20;水库左上角:272,2
  23.     [url=home.php?mod=space&uid=186386]@r[/url] = r
  24.     @chess = []
  25.     @new_block = [0,0,0,0]
  26.     @steps = 0
  27.     @r.times{@chess.push([])}
  28.     @r.times{@r.times{|i|@chess[i].push(0)}}
  29.     @game_over = false
  30.  
  31.     # 生成游戏图形
  32.     # 生成显示端口
  33.     @viewport = Viewport.new(0, 0, 640, 480)
  34.  
  35.     # 生成背景平面
  36.     @back_sprite = Sprite.new(@viewport)
  37.     @back_sprite.bitmap = Cache.picture("pano.png")
  38.  
  39.     # 生成水源出口图象
  40.     @water_start = Sprite.new(@viewport)
  41.     @water_start.bitmap = Cache.character("water_start.png")
  42.     @water_start.x = 272
  43.     @water_start.y = 2
  44.     @water_start2 = Sprite.new(@viewport)
  45.     @water_start2.bitmap = Cache.character("spr16.png")
  46.     @water_start2.x = 308
  47.     @water_start2.y = 45
  48.  
  49.     # 生成左框
  50.     @move_box = Sprite.new(@viewport)
  51.     @move_box.bitmap = Cache.character("move_box.png")
  52.     @move_box.x = 25
  53.     @move_box.y = 20
  54.  
  55.     # 生成左框4个子块
  56.     @leftnew_sprites = []
  57.     for i in 0...4
  58.       @leftnew_sprites[i] = Sprite.new(@viewport)
  59.       @leftnew_sprites[i].bitmap = Cache.character("mud.png")
  60.       @leftnew_sprites[i].x = 42
  61.       @leftnew_sprites[i].y = 204 - i * 56
  62.     end
  63.     @leftnew_sprites[0].y = 212
  64.  
  65.     # 生成全部地面
  66.     @character_sprites = []
  67.     @r.times{@character_sprites.push([])}   
  68.     for i in 0...@r
  69.       for j in 0...@r
  70.         ww_sprite = Sprite.new(@viewport)
  71.         ww_sprite.bitmap = Cache.character("mud.png")
  72.         ww_sprite.x = i * 48 + 164
  73.         ww_sprite.y = j * 48 + 91
  74.         @character_sprites[i][j] = ww_sprite
  75.       end
  76.     end
  77.  
  78.     # 生成光标图象
  79.     @move_point = Sprite.new(@viewport)
  80.     @move_point.bitmap = Cache.character("choose_box.png")
  81.     @move_point.x = 3 * 48 + 164
  82.     @move_point.y = 91
  83.     @move_point.z = 100
  84.  
  85.     # 落下开始的4个子块
  86.     4.times{new_down}
  87.     # 刷新画面
  88.     @move_point.update
  89.  
  90.     # 执行过渡
  91.     Graphics.transition
  92.     # 主循环
  93.     loop do
  94.       # 刷新游戏画面
  95.       Graphics.update
  96.       # 刷新输入信息
  97.       Input.update
  98.       # 刷新移动过子块后的画面
  99.       refresh_move
  100.       # 如果按下ESC或通水有了结果,就结束循环
  101.       if @game_over then
  102.         # 显示作业结果,等待240帧后场景消失
  103.         resultMessage = Window_Base.new(0, Graphics.height * 7 /8, Graphics.width, Graphics.height / 8)
  104.         resultMessage.draw_text_ex(0, 0, @str_result)
  105.         Graphics.wait(240)
  106.         resultMessage.dispose
  107.         break
  108.       end
  109.     end
  110.     # 释放游戏图形
  111.     dispose_WaterWay_Game
  112.     # 执行画面过渡
  113.     Graphics.transition
  114.   end
  115.  
  116.   #--------------------------------------------------------------------------
  117.   # ● 释放动态分配的资源
  118.   #--------------------------------------------------------------------------
  119.   def dispose_WaterWay_Game
  120.     @back_sprite.dispose
  121.     @water_start.dispose
  122.     @water_start2.dispose
  123.     @move_box.dispose
  124.     @move_point.dispose
  125.     # 释放左框的子块
  126.     for sprite in @leftnew_sprites
  127.       sprite.dispose
  128.     end
  129.     # 释放通水的子块
  130.     for j in [email]0...@character_sprites.size[/email]
  131.       for sprite in @character_sprites[j]
  132.         sprite.dispose
  133.       end
  134.     end
  135.     # 释放显示端口
  136.     @viewport.dispose
  137.   end
  138.  
  139.   #--------------------------------------------------------------------------
  140.   # ※ 按上下左右键移动画面
  141.   #--------------------------------------------------------------------------
  142.   def refresh_move
  143.     @move_point.update
  144.     if Input.trigger?(Input::DOWN)
  145.       if @move_point.y < @r * 48 + 91 - 48
  146.         @move_point.y += 48
  147.       end
  148.     elsif Input.trigger?(Input::LEFT)
  149.       if @move_point.x > 164
  150.         @move_point.x -= 48
  151.       end
  152.     elsif Input.trigger?(Input::RIGHT)
  153.       if @move_point.x < @r * 48 + 164 - 48
  154.         @move_point.x += 48
  155.       end
  156.     elsif Input.trigger?(Input::UP)
  157.       if @move_point.y > 91
  158.         @move_point.y -= 48
  159.       end
  160.     elsif Input.trigger?(Input::C)
  161.       put_judge((@move_point.x - 164)/48,(@move_point.y - 91)/48)
  162.     elsif Input.trigger?(Input::B)
  163.       # 按下了ESC,本次作业结束,做结局判断
  164.       end_judge
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ※ 按确定键落子
  169.   #--------------------------------------------------------------------------
  170.   def put_judge(px, py)
  171.     if @chess[px][py] == 0
  172.       @character_sprites[px][py].bitmap = @leftnew_sprites[0].bitmap
  173.       @chess[px][py] = @new_block[0]
  174.       #落子后,左侧有新的子块生成
  175.       new_down
  176.       # 如果所有子块都已放上,则作业结束,做结局判断
  177.       end_judge if @new_block[0] == 0
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ※ 新子块处理
  182.   #--------------------------------------------------------------------------
  183.   def new_down
  184.     # 左侧后三个子块往下落
  185.     @new_block[0] = @new_block[1]
  186.     @leftnew_sprites[0].bitmap = @leftnew_sprites[1].bitmap
  187.     @new_block[1] = @new_block[2]
  188.     @leftnew_sprites[1].bitmap = @leftnew_sprites[2].bitmap
  189.     @new_block[2] = @new_block[3]
  190.     @leftnew_sprites[2].bitmap = @leftnew_sprites[3].bitmap
  191.     # 新生成第四个子块
  192.     if @steps < @r * @r
  193.       tmparr = [3,5,6,7,9,10,11,12,13,14,15]
  194.       tmpint = tmparr[rand(11)]
  195.       @new_block[3] = tmpint
  196.       @leftnew_sprites[3].bitmap = Cache.character("spr#{tmpint}.png")
  197.     else
  198.       @new_block[3] = 0
  199.       @leftnew_sprites[3].bitmap = Cache.character("mud.png")
  200.     end
  201.     @steps = @steps + 1
  202.  
  203.     for i in 0...4
  204.       @leftnew_sprites[i].update
  205.     end
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ※ 结局判断
  209.   #--------------------------------------------------------------------------
  210.   def end_judge
  211.     allscore = 0
  212.     arr1 = [] # 土块数组
  213.     arr2 = [] # 中间块数组
  214.     arr3 = [] # 水块数组
  215.     allsum = @r * @r
  216.     allsum.times{|i|arr1.push(i)}
  217.     @water_start2.bitmap = Cache.character("wspr16.png")
  218.     if cross_judge(3,0,1) then
  219.       arr2.push(arr1.delete(t2o(3,0)))
  220.     end
  221.     while !arr2.empty?
  222.       tmp = arr2.pop
  223.       tx,ty = o2t(tmp)
  224.       if cross_judge(tx,ty,1) and ty > 0 then
  225.         arr2.push(arr1.delete(t2o(tx,ty-1))) if cross_judge(tx,ty-1,3) and arr1.include?(t2o(tx,ty-1))
  226.       end
  227.       if cross_judge(tx,ty,2) and tx < @r-1 then
  228.         arr2.push(arr1.delete(t2o(tx+1,ty))) if cross_judge(tx+1,ty,4) and arr1.include?(t2o(tx+1,ty))
  229.       end
  230.       if cross_judge(tx,ty,3) and ty < @r-1 then
  231.         arr2.push(arr1.delete(t2o(tx,ty+1))) if cross_judge(tx,ty+1,1) and arr1.include?(t2o(tx,ty+1))
  232.       end
  233.       if cross_judge(tx,ty,4) and tx > 0 then
  234.         arr2.push(arr1.delete(t2o(tx-1,ty))) if cross_judge(tx-1,ty,2) and arr1.include?(t2o(tx-1,ty))
  235.       end
  236.       tmpint = @chess[tx][ty]
  237.       @character_sprites[tx][ty].bitmap = Cache.character("wspr#{tmpint}.png")
  238.       allscore = allscore + 1
  239.       # 刷新游戏画面,让通了水的子块显示出来
  240.       Graphics.update
  241.     end
  242.     pscore = allscore * 100 / allsum
  243.     pjscore = pscore < 30 ? 1 : (pscore < 50 ? 2 : (pscore < 70 ? 3 : (pscore < 95 ? 4 : 5)))
  244.     case pjscore
  245.       when 1
  246.         pj = "完成度:#{pscore}%  级别:差。 如此……不如不做……"
  247.         $game_variables[CONST_WATERWAY_SCORE_V_NO]+=0
  248.  
  249.       when 2
  250.         pj = "完成度:#{pscore}%  级别:一般。 馬馬虎虎……"
  251.         $game_variables[CONST_WATERWAY_SCORE_V_NO]+=5
  252.  
  253.       when 3
  254.         pj = "完成度:#{pscore}%  级别:良好。 呵呵,還有進步空間……"
  255.         $game_variables[CONST_WATERWAY_SCORE_V_NO]+=10
  256.  
  257.       when 4
  258.         pj = "完成度:#{pscore}%  级别:優秀。 這真是令人激賞的成績!"
  259.         $game_variables[CONST_WATERWAY_SCORE_V_NO]+=15
  260.  
  261.       when 5
  262.         pj = "完成度:#{pscore}%  级别:完美。 奇功一件啊,你簡直大禹再世!"
  263.         $game_variables[CONST_WATERWAY_SCORE_V_NO]+=20
  264.     end
  265.     @str_result = pj
  266.     # 本此作业结束
  267.     @game_over = true
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ※ 连通度判断
  271.   #--------------------------------------------------------------------------
  272.   def cross_judge(posx,posy,dire)
  273.     flag = false
  274.     case dire
  275.       when 1 # 上判断
  276.         flag = true if [3,5,7,9,11,13,15].include?(@chess[posx][posy])
  277.       when 2 # 右判断
  278.         flag = true if [3,6,7,10,11,14,15].include?(@chess[posx][posy])
  279.       when 3 # 下判断
  280.         flag = true if [5,6,7,12,13,14,15].include?(@chess[posx][posy])
  281.       when 4 # 左判断
  282.         flag = true if [9,10,11,12,13,14,15].include?(@chess[posx][posy])
  283.     end
  284.     return flag
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ※ 2维变1维
  288.   #--------------------------------------------------------------------------
  289.   def t2o(posx,posy)
  290.     return posy * @r + posx
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ※ 1维变2维
  294.   #--------------------------------------------------------------------------
  295.   def o2t(pos)
  296.     iy = pos / @r
  297.     ix = pos - iy * @r
  298.     return ix,iy
  299.   end
  300. end


要用到的图形: 水道灌溉小游戏的图形文件包.rar (105.93 KB, 下载次数: 190)

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2013-7-25
帖子
9
2
发表于 2013-8-21 22:53:59 | 只看该作者
本帖最后由 戰國武士 于 2013-8-22 14:00 编辑

問一下...圖形是放到system嗎?
腳本輸入好後總是顯示23行錯誤呢

剛剛照點評說的...23行沒問題了
可是換130行出現錯誤阿

点评

把23行的[url=home.php?mod=space&uid=186386]跟[/url]去掉就好了  发表于 2013-8-22 13:25
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-1-4
帖子
5
3
发表于 2015-1-10 21:36:34 | 只看该作者
超级感谢啊,如果能把太阁里的4和5的小游戏都移植就好了,我也努力试试
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
815
在线时间
636 小时
注册时间
2011-1-21
帖子
176
4
发表于 2015-1-11 13:07:06 | 只看该作者
请问23行和130行出问题了,怎么办呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-8 20:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表