魔方自动求解程序一般有两种方法,一种是按照人还原魔方的步骤,一步步来,另外一种是使用数学方法,魔方自有一套复杂的数学理论,其中较著名的是两阶段算法(压缩文件中的cube430.exe使用的就是数学方法,程序作者便是two-phase算法发明人,文档中有该算法的简介,遗憾的是没有找到该程序的源码)。

本程序使用的便是第一种方法。

程序界面仿wca的cube430.exe(文件夹中的wca-explorer.zip是这个程序的压缩包)
程序还有bug,程序可能自动生成一个ml文件,用以保存bug发生时的魔方状态。但也可能是其他错误。
如果你把自动生成的ml文件(在bug文件夹中)或者错误信息Email给我,我会非常感激。

欢迎批评和建议。

这个程序还不完善,现阶段仅供学习之用:

  1. 尚未加入还原手法输出功能
  2. 尚未实现魔方状态有效性检测

实验方法:

  1. 依次点击界面中的按钮:
    Cross:  在Front面实现Cross,然后把Cross转到底面(x')
    L1Corner: 还原底层角块
    L2Edge: 还原第二层棱块
    TopCross: 建立顶层十字
    MatchCross: 对好十字
    BackTopCorner 顶层四角块归位
    RestoreTopCorener还原四角块
  2. rotate组合框中是几个常用的魔方旋转操作,但是太少,可以使用Excute按钮前面的文本框输入旋转命令。命令名参考文件夹中的command-conventions.bmp中示意的命令名约定。
  3. Reset按钮重置魔方
  4. Empty便于抄写魔方。点击每个面这中间块,则选中该块颜色,点击非中间块,则该块颜色被改为当前选中颜色。由于尚未加入魔方有效性检测,如果改变颜色后使魔方无效,则程序会出错。
  5. save和open按钮用来保存和打开魔方状态文件(*.ml)
  6. random打乱魔方状态
  7. solution按钮相当于连续执行了步骤1 中提到的按钮对应的函数

本程序试图使用两套手法实现魔方还原,但现在只实现了一种(两套手法的任意一种都能使程序正常运行)。两种手法的区别在于第三层的还原。前两层是一样的。
第一种手法的Cross的实现使用的是当前流行手法。其余的步骤用到的手法主要参考了文件夹中的“魔方教程.pdf”,作者是厦门大学的何美生。程序中的函数与教程中的步骤是一一对应的。
本程序使用到的资料在information文件夹中。

下面几个函数
   //2:cfop
   void HashOLL(char*);
   bool IsTopFaceRestored(void);
   void OLL(void);
   void HashPLL(char*);//not finished
   void PLL(void);
   void CFOP(void);
是第二套手法用到的函数,其中的最后一步
   void HashPLL(char*);//not finished
   void PLL(void);
两个函数尚未实现。

经验总结:

  1. 当要处理的状态是很多可能状态之一,而识别出当前的状态是哪种状态又比较困难时,可以考虑构造hash函数,以区别每一种状态。求出所有可能状态的hash值和当前状态hash值,识别当前状态是哪种状态时搜索hash值即可。本程序中第二种手法还原顶面时即用到该方法。使用状态hash的方法,可以屏蔽掉状态的复杂性。但是我想到这个方法时,前面的程序已经成型了,所以第一种方法实现时还是用了很多if-else或者switch,搞得头晕。
  2. 本程序在调试时也遇到了很大麻烦,不可能一开始就设断点调试的。后来采用的方法是每一个函数在出现问题时保存当前状态成文件,然后打开文件,继续执行时才在对应函数中设断点调试

    欢迎此类经验的交流,如果你想到或用到了其他的方法,欢迎跟大家一起分享。

源码下载 http://download.csdn.net/source/2772692

有些朋友下载后运行不了,是我的失误,如果你没装vs2008,可能运行不了,因为vs2008编译后的程序要用到mfc90.dll等几个vs2008中的动态链接库,而我在上传时没考虑到这点。那么暂时请用自己的编译器重新编译吧,把我的代码只在cXDlg的头文件和cpp文件中,很容易重新编译的。

至于解压不了,应该是下载时出现的错误,请重新下载。

程序运行截图:

1.打乱

2.Cross:  在Front面实现Cross,然后把Cross转到底面(x')

3.L1Corner: 还原底层角块

4.L2Edge: 还原第二层棱块

5.TopCross: 建立顶层十字

6.MatchCross: 对好十字

7.BackTopCorner 顶层四角块归位

8.RestoreTopCorener还原四角块

先前用OpenGL写了一个三维魔方,但是不会自动还原,而且没有加入360°视角转换和旋转动态。

以后可能把自动还原写成3d,这样可以更直观,更酷

=====================================================

更新:

魔方自动还原程序3D版本和2D 修正版已经放出来了

http://blog.csdn.net/onezeros/archive/2010/10/25/5964280.aspx

三阶魔方自动还原 vc实现相关推荐

  1. 三阶魔方自动求解及动态可视化matlab代码

    三阶魔方自动求解及动态可视化matlab代码 思路与步骤 总结 思考 参考链接 源代码 第一次写博客,想总结分享下以前做过的一些有趣的东西,目的是为了回望过去与展望未来,同时为了提高自己的写作表达能力 ...

  2. 魔方自动还原程序3D版本和2D 修正版

    首先感谢大家的对上一个版本的鼓励. 这两天完成了魔方自动还原程序的OpenGL 3D版  源码下载:https://github.com/zhijie/MagicCube3D 同时修正了之前的2D版 ...

  3. ThreeJS简易魔方自动还原实现(一)层先法

    © Young 2018-04-29 21:08 在ThreeJS四步制作一个简易魔方中介绍了怎么实现一个可以转动的简易魔方,接来下准备介绍下怎么让这个简易魔方具备自动还原的功能. 例子如下: 可以扫 ...

  4. 三阶魔方CFOP还原方法图解

    >CFOP方法一共分四步:CROSS→F2L→OLL→PLL #CROSS:意思是底部打好十字 #F2L:(First two Layers) 意思是同时对好前两层 #OLL:(Orientat ...

  5. 三阶魔方还原程序心得

    第一次写技术性的博客啊,本人菜鸟,如果哪里说的不够准确完善,欢迎大神前来点拨呀~ 先放几张效果图吧~ 这是我最近做的一个三阶魔方还原的小程序. 用的环境是VC++6.0,其中也大量运用了easyx库进 ...

  6. 三阶魔方还原步骤图_研究人员开发的AI成功在1.2秒内还原三阶魔方

    据外媒报道,在2018年3月,麻省理工学院学生Ben Katz和软件开发人员Jared Di Carlo曾共同创建了机器人装置,以0.38秒解开三阶魔方.尽管魔方解开技术的最新重大进展并没有导致比Ka ...

  7. 异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...

    本篇文章主要介绍三阶魔方总状态数是如何计算出来的,并介绍了两种算法,尽量保证语言通俗易懂,不涉及高深的理论知识(当然我也不懂:P) 一.4.33千亿亿到底有多大? 我们都知道三阶魔方的总变化状态数量为 ...

  8. 异形3×3魔方还原教程_【初级篇】(四)最简单的三阶魔方入门教程——中层还原...

    本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的.全部教程只使用三种公式,还原过程以理解为主,公式为辅. 第四部分 中层棱块还原 4.1 预览中层棱块还原后的 ...

  9. 魔方cfop公式软件_【初级篇】(八)最简单的三阶魔方入门教程——顶棱还原...

    本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的.全部教程只使用三种公式,还原过程以理解为主,公式为辅. 第八部分 顶层四个棱块还原 8.1 预览顶层四棱块还 ...

最新文章

  1. 软考程序员Java答题速成_软考程序员考试试题解答方法与技巧
  2. 用命令行为MySQL设置/修改管理员密码
  3. 初识spring-boot
  4. TurnipBit开发板DIY呼吸的吃豆人教程实例
  5. Android笔记 ANR Application Not Response
  6. asp.net core 2.0 api ajax跨域问题
  7. 《C++Primer》14、15章
  8. remote验证方法请求没有发送
  9. serializable接口_面试官:RandomAccess这个空接口有何用?
  10. cvCalcBackProject() 直方图反向投影匹配
  11. 善用佳软:高效能人士的软件应用之道
  12. 模式识别与机器学习 第一章 绪论
  13. 时间换算(UTC是世界协调时,BJT是北京时间)
  14. 【数据库基础】什么是A、C、 I 、D?
  15. python的csv安装_Python csv模块:处理csv文件
  16. Electron 安装报错 'Electron failed to install correctly'
  17. 性格木讷面试时如何脱颖而出?
  18. MenuetOS小系统安装
  19. Xmind 免费安装使用教程
  20. Vue使用echarts报错提示 vue.runtime.esm.js?2b0e:1897 Error: Initialize failed: invalid dom.

热门文章

  1. html元素排序,HTML中的table里面的元素排序
  2. c 语言如何处理表格文件中的数据库,C#程序从Excel表格中读取数据并进行处理
  3. leetcode算法题--重排链表★
  4. linux存储--linux内存分配图(九)
  5. excel另存为没有dbf_PDF转Excel怎么做的?节省工作时间,你要学会的办公技巧
  6. vue路由切换组件没有加载_vue-router 路由跳转后没有加载组件
  7. linux恢复出厂设置_怎么恢复tp-link路由器出厂设置 恢复tp-link出厂设置方法【详解】...
  8. HDU-1069-Monkey and Banana
  9. 12/12团队会议10
  10. zabbix设置邮件报警