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

Project1

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

[原创发布] 【脚本教学】《6R魔方》思路(7-25更新)

 关闭 [复制链接]

Lv3.寻梦者

梦石
3
星屑
50
在线时间
177 小时
注册时间
2008-3-21
帖子
939
跳转到指定楼层
1
发表于 2009-7-9 22:25:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 slick 于 2009-7-25 22:44 编辑

游戏名称:RM 旋转魔方

游戏类型:PUZ

制作人:SLICK

版本信息:完整版,未加密 V 1.05

是否脱离RMXP运行:是

游戏容量:1.01 MB (解压前) / 2.00 MB (解压后)

发布时间:2009年7月9日

杀毒工具:该下载经过瑞星21.46.24杀毒软件查杀,确认无毒。

估计游戏通关时间:无限长

操作方法:用鼠标游戏,左键点击箭头是翻转一排,右键则是翻转整个魔方。

游戏:
http://rpg.blue/viewthread.php?tid=128079

一开始是这样的


翻转!


最后要求这样。你能同时将几个面翻成同颜色?


自从我会使用RUBY编程后,就一直想用RM不干正事。。。。。。有时候突然冒出的灵感就能弄出一个小游戏。前天我正在转我那个魔方,转来转去一个面也转不通,一气之下我干脆编一个电脑游戏算了。。。。。。这下可好,魔方的初始状况就全在我的支配之中了,呵呵!{:3_51:}

思路:
这个小游戏并未动用事件,是纯脚本游戏。

如何生成魔方:
将魔方的六个大面一一编号,像下图:


然后,根据六个面的编码,将这些可见面一一编号。例如,大1面上的九个可见小面就通通设置为颜色1,大2面上的九个可见小面就通通设置为颜色2......

一个魔方有27个方格,六个可见面,每个面上颜色不一样,给这六个面赋给1-6六种不同编码。而不可见面就通通赋值为7。

举例,如左上角的那个小方块,其初始编码为:




然后,整个魔方的初始编码就得出来了。



这就是整个魔方的小方块码放顺序。



以向左旋转为例:
#--------------------------------------------------------------------------
  # ● 一排左转
  #--------------------------------------------------------------------------
  def turn_left(line, anime = true)
    turnnum = []
    turnnum.push(@faceunit[2 + 3 * line].face[2])
    turnnum.push(@faceunit[11 + 3 * line].face[2])
    turnnum.push(@faceunit[20 + 3 * line].face[2])
    turnnum.push(@faceunit[20 + 3 * line].face[5])
    turnnum.push(@faceunit[19 + 3 * line].face[5])
    turnnum.push(@faceunit[18 + 3 * line].face[5])
    turnnum.push(@faceunit[18 + 3 * line].face[3])
    turnnum.push(@faceunit[9 + 3 * line].face[3])
    turnnum.push(@faceunit[0 + 3 * line].face[3])
    turnnum.push(@faceunit[0 + 3 * line].face[0])
    turnnum.push(@faceunit[1 + 3 * line].face[0])
    turnnum.push(@faceunit[2 + 3 * line].face[0])
    #==============================================================
    # turnnum是个临时变量,其意义为:记住魔方可转面中围绕中心点一圈的八个可转格。
    #==============================================================
    # 这里显示动画
    if anime
      angle = 0.0
      upline = 416.0
      midline = 416.0
      downline = 224.0
      for iii in 0...29
        angle += 3
        upline = 320 + 96 * Math.cos((angle - 45) * Math::PI / 180) * Math.sqrt(2)
        midline = 320 + 96 * Math.cos((angle + 45) * Math::PI / 180) * Math.sqrt(2)
        downline = 320 + 96 * Math.cos((angle + 135) * Math::PI / 180) * Math.sqrt(2)
        for jjj in 0...3
          kkk = jjj + line * 3
          @cubeface[kkk].x = downline + 1.0 * jjj * (midline - downline) / 3
          @cubeface[kkk].y = 144 + 64 * line
          @cubeface[kkk].zoom_x = 1.0 * (midline - downline) / 192
          @cubeface[kkk].zoom_y = 1
        end
        for kkk in 0...3
          @cubeface[kkk + 9].x = midline + 1.0 * kkk * (upline - midline) / 3
          @cubeface[kkk + 9].y = 144 + 64 * line
          @cubeface[kkk + 9].visible = true
          @cubeface[kkk + 9].src_rect.set(64 * turnnum[kkk], 0, 64, 64)
          @cubeface[kkk + 9].zoom_x = 1.0 * (upline - midline) / 192
          @cubeface[kkk + 9].zoom_y = 1
        end
        Graphics.update
      end
    end
    # 继续
    @faceunit[0 + 3 * line].face[0] = turnnum.shift
    @faceunit[1 + 3 * line].face[0] = turnnum.shift
    @faceunit[2 + 3 * line].face[0] = turnnum.shift
    @faceunit[2 + 3 * line].face[2] = turnnum.shift
    @faceunit[11 + 3 * line].face[2] = turnnum.shift
    @faceunit[20 + 3 * line].face[2] = turnnum.shift
    @faceunit[20 + 3 * line].face[5] = turnnum.shift
    @faceunit[19 + 3 * line].face[5] = turnnum.shift
    @faceunit[18 + 3 * line].face[5] = turnnum.shift
    @faceunit[18 + 3 * line].face[3] = turnnum.shift
    @faceunit[9 + 3 * line].face[3] = turnnum.shift
    @faceunit[0 + 3 * line].face[3] = turnnum.shift

    [email=#@faceunit]#  @faceunit[/email]这个变量就是指魔方的各个小单元格。它是一个class定义类,封装后以face变量为可操作量,其意义为单个面上的编码。

    # 如果转动靠边一排,还要考虑侧面的旋转
    if line == 0
      topface = []
      topface.push(@faceunit[2].face[1])
      topface.push(@faceunit[1].face[1])
      topface.push(@faceunit[0].face[1])
      topface.push(@faceunit[9].face[1])
      topface.push(@faceunit[18].face[1])
      topface.push(@faceunit[19].face[1])
      topface.push(@faceunit[20].face[1])
      topface.push(@faceunit[11].face[1])
      @faceunit[0].face[1] = topface.shift
      @faceunit[9].face[1] = topface.shift
      @faceunit[18].face[1] = topface.shift
      @faceunit[19].face[1] = topface.shift
      @faceunit[20].face[1] = topface.shift
      @faceunit[11].face[1] = topface.shift
      @faceunit[2].face[1] = topface.shift
      @faceunit[1].face[1] = topface.shift
    elsif line == 2
      topface = []
      topface.push(@faceunit[8].face[4])
      topface.push(@faceunit[7].face[4])
      topface.push(@faceunit[6].face[4])
      topface.push(@faceunit[15].face[4])
      topface.push(@faceunit[24].face[4])
      topface.push(@faceunit[25].face[4])
      topface.push(@faceunit[26].face[4])
      topface.push(@faceunit[17].face[4])
      @faceunit[6].face[4] = topface.shift
      @faceunit[15].face[4] = topface.shift
      @faceunit[24].face[4] = topface.shift
      @faceunit[25].face[4] = topface.shift
      @faceunit[26].face[4] = topface.shift
      @faceunit[17].face[4] = topface.shift
      @faceunit[8].face[4] = topface.shift
      @faceunit[7].face[4] = topface.shift
    end
  end

注意看,为什么只有line==0和line==2两种情况才考虑两边冠面的旋转呢?很简单:因为若以向左旋转为例的话,0为转动上排,要考虑顶面的旋转;1为转动中排,两个冠面均不转;2为转动下排,要考虑底面的旋转。

为了实现“旋转”的效果,请留意一下push与shift的操作顺序。

譬如你想转动最上面一排,就将魔方的顶部数组先赋给一组临时变量,再按照旋转以后的顺序重新将临时变量赋给魔方的冕变量即可。

例如,顶面上的颜色顺序为:

蓝红紫
黄绿蓝
紫紫红

开始旋转时,将颜色信息按顺时针赋给数组(正中一格不考虑),即

数组 = [蓝红紫蓝红紫紫黄]

顺时针旋转一步之后就是 = [紫黄蓝红紫蓝红紫]

重新赋回魔方表面,就是

紫黄蓝
紫绿红
红蓝紫

其实,我这个程序中的魔方“旋转”不是真转,而是巧妙地调换了变量的顺序。

在游戏开始时,先生成一个翻好的完整魔方,然后随机旋转30-40次,就得到了打乱的魔方。翻吧!

P.S. 至于cos、sin等数学函数,,,菜鸟们可以无视,因为这只和魔方翻转的动画效果有关。。。


感谢发布,+2VIP希望你能多多支持小游戏区,以前的小游戏类的脚本或事件都可以发不过来的,如果已经发布了,请发个新帖,把老帖的地址发过来,虽然不能加分(因为以前别的区的BZ已经加过了。。。),让大家讨论讨论,如果能在小游戏区的那贴中完善就跟好了
                                                                        BY——枫起

1.jpg (16.69 KB, 下载次数: 22)

1.jpg
我的个人空间:
http://434986751.qzone.qq.com

Lv1.梦旅人

梦石
0
星屑
50
在线时间
228 小时
注册时间
2009-3-14
帖子
433
2
发表于 2009-7-9 23:52:00 | 只看该作者
弄个4*4的魔方吧。{:3_49:}
曾经拥有,纵水流逝

人生到处知何似,应似飞鸿踏雪泥。泥上偶然留指爪,鸿飞那复计东西。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

ACG宅

梦石
0
星屑
72
在线时间
413 小时
注册时间
2008-10-1
帖子
5595

开拓者贵宾

3
发表于 2009-7-10 12:10:04 | 只看该作者
希望你能发布关于你的魔方游戏系统的帖子
例如:创作思路
具体怎么用事件来做等等具体的内容。

如果你的创作很好的话,可以考虑授予荣誉
此号诞生于公元2008年10月1日。
此号消失于公元2012年10月1日。
4年的经历,4年的守望。现在只剩下66RPG的名字和当年的“梦想世界,在你手中。”这一句话。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
42 小时
注册时间
2009-6-7
帖子
336
4
发表于 2009-7-10 13:18:03 | 只看该作者
有创意
回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

5
发表于 2009-7-10 13:51:58 | 只看该作者
再美化一下界面吧。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2009-7-3
帖子
424
6
发表于 2009-7-10 14:33:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
50
在线时间
177 小时
注册时间
2008-3-21
帖子
939
7
 楼主| 发表于 2009-7-11 22:17:43 | 只看该作者
下次去弄个800*800的魔方吧XD
黯乡魂 发表于 2009-7-10 14:33

弄个4*4的魔方吧。{:3_49:}
素食者 发表于 2009-7-9 23:52


4 x 4 不是很麻烦,但800 x 800......

希望你能发布关于你的魔方游戏系统的帖子
例如:创作思路
具体怎么用事件来做等等具体的内容。

如果你的创作很好的话,可以考虑授予荣誉
枫起 发表于 2009-7-10 12:10


枫起大人看看合格不。

再美化一下界面吧。
凌辰 发表于 2009-7-10 13:51


我的个人空间:
http://434986751.qzone.qq.com
回复 支持 反对

使用道具 举报

Lv1.梦旅人

ACG宅

梦石
0
星屑
72
在线时间
413 小时
注册时间
2008-10-1
帖子
5595

开拓者贵宾

8
发表于 2009-7-12 12:22:33 | 只看该作者
谢谢,当然,如果可以把“topface.push(@faceunit[0].face[1])”这些之类的加上注释就更好了,不用多,每种类型一个注释就好了,这样更加方便新手理解,另外我想给你个研究员的荣誉,要不?现在小游戏区百废待兴,所以获得条件比要求的低很多的,我希望你能多多发布些类似的教学,至于加分我去问问其他区的BZ,该加的分不会少了你的。
另外荣誉系统现在只能给图片,你可以放在签名里,是小游戏区官方认证的。以后有机会的话我会帮你争取论坛勋章或用户组的
此号诞生于公元2008年10月1日。
此号消失于公元2012年10月1日。
4年的经历,4年的守望。现在只剩下66RPG的名字和当年的“梦想世界,在你手中。”这一句话。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
9
发表于 2009-7-12 15:22:15 | 只看该作者
很强大
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

10
发表于 2009-7-12 18:24:10 | 只看该作者
记得我刚买下魔方的时候也用RM写了一个全键盘操作的魔方,后来发现比真实的难玩……
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 18:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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