虚拟魔方状态表示法

        已经过了大半年了,当初我想实现的魔方游戏自己复原也已经实现了,便对与魔方的状态表示当时也是一知半解,对之前的魔方状态法是不满意的,前几天有了思路就推导了出来, 不过没有之前踩的坑,也不会有现在的结论。

        这个魔方状态表示法,不以整体为推导法,而是以魔方块为导论,很早之前我就知道了一个结论,一个魔方块有24种状态(三阶魔方),但是不知道为何不知,现在大差不差,就以魔方块而言,有棱块与角块:

棱块:2种状态(0或1),12个可移动位置

角块:3种状态(0或1或2),8个可移动位置

中心块状态没太大意义。

三阶状态读取以实现,Demo源码请看:GitHub - 10555gff/mofanCubeStata

注:此结论可任意选择F面,得到的读取结果同样适用,也可用于2-多阶魔方的状态读取

注要看MofanRestore这文件,主要用到的代码是这一段

​
using System;
using UnityEngine;

public class MofanRestore : MonoBehaviour
{
    public static MofanRestore Instance = null;
    //当前读取的魔方块
    Transform curCubetransform;
    int curMoIndex;

    string str;
    string mofanColor;
    private void Start()
    {
        MofanRestore.Instance = this;
    }
    public string MofanStata(string mofanName)
    {
        int n= int.Parse(mofanName.Substring(1)) - 1;
        curCubetransform = GameManager.Instance.cubePrefabList[n].transform;
        mofanColor = mofanReColor(mofanName);
        //区别棱块与角块
        switch (mofanColor.Length)
        {
            case 2:
                curMoIndex = mofancubeStat();
                return string.Format("{0}{1}{2}{3}", str[0], mofanColor[curMoIndex], str[1], mofanColor[curMoIndex ^ 1]);
            case 3:
                string tmpStr = swapStr();
                return string.Format("{0}{1}{2}{3}{4}{5}", str[0], mofanColor[curMoIndex], str[1], tmpStr[0], str[2], tmpStr[1]);
        }
        return null;
    }

    //点乘判断,用得1或-1,返回0
    int reAbs(Vector3 v1, Vector3 v2)
    {
        return (int)Mathf.Abs(Vector3.Dot(v1, v2)) ^ 1;
    }
    #region 棱块判断块
    //用点乘判断是棱块状态
    int mofancubeStat()
    {
        Vector3 v3 = reInitVector();
        Vector3 v3fu = isCenter() ? this.transform.forward : this.transform.up;
        return reAbs(v3, v3fu);
    }

    //中间棱块与其它棱块分别定义初始轴
    Vector3 reInitVector()
    {
        switch (curCubetransform.name)
        {
            //中间层定义初始轴方向
            case "M20":
            case "M2":
            case "M26":
            case "M8":
                return curCubetransform.forward;
            //其它层定义初始轴方向
            default:
                return curCubetransf
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值