前几天发了个九宫格的垃圾算法版主说不给力,今天发个自己写的魔方类
znnwe12012/09/18软件综合 IP:湖北
主体程序是MFC写的就不发了,只发魔方类。完成了魔方各个方向的运动方法和GDI显示(用windowsAPI写的)
提供一个结构体携带数据通过旋转魔方进行加密,加密的方法还没有写如果有人感兴趣的话在此基础可以写一个
就只贴类的定义了实现太长
attachment icon 魔方程序框架GDI模块.rar 3.58KB RAR 29次下载 了放附件里。
QQ截图未命名.png
丢代码:

#include <windows.h>
using namespace std;
struct MoFang_kuai
{
    //魔方单块携结构
    int color;     //单块颜色
    int shuju;     //单块携带的需加密数据
};
class MoFang_3      //3阶魔方类
{    
    //私有方法部分
    protected:
    
    //公共方法部分    
    public:
        static void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);//定时器回调函数
        MoFang_3(void);    
       ~MoFang_3(void);    
        ////////////////////////////////////////////////
        //上滚或下滚后应使用下滚或上滚相对应的还原
        bool MoFang_ZT_S_S(void); //魔方整体上滚原始函数(不带GDI更新部分)
        bool MoFang_ZT_S(void); //魔方整体上滚
        bool MoFang_ZT_X(void); //魔方整体下滚
        //使用上滚或下滚后没还原严禁使用左右滚否则将打乱魔方无法还原
        bool MoFang_ZT_Z_S(void); //魔方整体左滚原始函数(不带GDI更新部分)
        bool MoFang_ZT_Z(void); //魔方整体左滚
        bool MoFang_ZT_Y(void); //魔方整体右滚
        ////////////////////////////////////////////////
        bool MoFang_F_S(void);  //前片顺时针翻转原始函数(不带GDI更新部分)
        bool MoFang_F(void);    //魔方前片顺时针转90度
        bool MoFang_F_(void);    //魔方前片逆时针转90度
        bool MoFang_B(void);    //魔方后片顺时针转90度
        bool MoFang_B_(void);   //魔方后片逆时针转90度
        bool MoFang_L(void);    //魔方左片顺时针转90度
        bool MoFang_L_(void);    //魔方左片逆时针转90度
        bool MoFang_R(void);    //魔方右片顺时针转90度
        bool MoFang_R_(void);    //魔方右片逆时针转90度
        bool MoFang_U(void);    //魔方上片顺时针转90度
        bool MoFang_U_(void);    //魔方上片逆时针转90度
        bool MoFang_D(void);    //魔方下片顺时针转90度
        bool MoFang_D_(void);   //魔方下片逆时针转90度
        bool MoFang_GDI(void);  //在界面上显示魔方的实时状态
    //私有数据部分
    protected:
        struct MoFang_kuai MoFang[6][3][3];    //魔方状态及属性


};

attachment icon 魔方程序框架GDI模块.rar 3.58KB RAR 29次下载
+25  科创币    坚定的潜水党    2012/09/18 能看出来是你很用心的写的东东
来自:计算机科学 / 软件综合
8
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
znnwe1 作者
12年4个月前 IP:未同步
452785
下面是类实现的构造函数,其他在附件里[s:219]
#include "StdAfx.h"
#include "魔方程序框架GDI模块.h"
MoFang_3::MoFang_3(void)
{
    int x,y;
    //构造函数:初始化3阶魔方的数据
   SetTimer(NULL,8,1000,TimerProc);    //设置屏幕更新定时器
   //初始化魔方实体状态
   //设定魔方骨架初始为:
   //第一面为黄色,对应颜色值为1,对应运动方向为F和F_
   for(x=0;x<3;x++)
   {
       for(y=0;y<3;y++)
       {
       MoFang[0][x][y].color=1;
       }
   }
   //第二面为绿色,对应颜色值为2,对应运动方向为L和L_
   for(x=0;x<3;x++)
   {   for(y=0;y<3;y++)
       {
       MoFang[1][x][y].color=2;
       }
   }
   //第三面为白色,对应颜色值为3,不设置运动方向
    for(x=0;x<3;x++)
   {   for(y=0;y<3;y++)
       {
       MoFang[2][x][y].color=3;
       }
   }
   //第四面为蓝色,对应颜色值为4,对应运动方向为R和R_
    for(x=0;x<3;x++)
   {   for(y=0;y<3;y++)
       {  
       MoFang[3][x][y].color=4;
       }
   }  
   //第五面为红色,对应颜色值为5,对应运动方向为U和U_
    for(x=0;x<3;x++)
   {   for(y=0;y<3;y++)
       {
      MoFang[4][x][y].color=5;
       }
   }
   //第六面为橙色,对应颜色值为6,不设置运动方向
   for(x=0;x<3;x++)
   {   for(y=0;y<3;y++)
       {
       MoFang[5][x][y].color=6;
       }
   }
}
MoFang_3::~MoFang_3(void)
{  
    //析构函数:销毁内存数据
    KillTimer(NULL,8); //销毁屏幕更新定时器

}
void CALLBACK MoFang_3::TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
     //屏幕更新定时器回调函数,定时器监控的代码放这里
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
znnwe1作者
12年4个月前 IP:未同步
452787
QQ截图未命名.png
旋转魔方后的效果图
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
znnwe1作者
12年4个月前 IP:未同步
452790
虽然写的不好但也算是用心了,求支持[s:214]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
znnwe1作者
12年4个月前 IP:未同步
452833
怎么好像没人看实现文件呢[s:309]是懒得下载吗那就在贴一点给大家看看
bool MoFang_3::MoFang_ZT_S_S(void)
{
    //魔方整体上滚原始函数
    //数据交换缓存数组
    struct MoFang_kuai mian[3][3];
    struct MoFang_kuai kuai[2];
    int i,j;
    //魔方数组第一面数据写入缓存数组
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            mian[i][j]=MoFang[0][i][j];
        }
    }
    //第六面数据写入第一面
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[0][i][j]=MoFang[5][i][j];
        }
    }
    //第三面数据写入第六面
    ///////////////////////////////
    //因为魔方结构的布局问题这一面的数组赋值规律被打乱须逐块赋值
    MoFang[5][0][0]=MoFang[2][2][2];
    MoFang[5][0][1]=MoFang[2][2][1];
    MoFang[5][0][2]=MoFang[2][2][0];
    MoFang[5][1][0]=MoFang[2][1][2];
    MoFang[5][1][1]=MoFang[2][1][1];
    MoFang[5][1][2]=MoFang[2][1][0];
    MoFang[5][2][0]=MoFang[2][0][2];
    MoFang[5][2][1]=MoFang[2][0][1];
    MoFang[5][2][2]=MoFang[2][0][0];
    ///////////////////////////////
    //第五面数据写入第三面
    ///////////////////////////////
    //因为魔方结构的布局问题这一面的数组赋值规律被打乱须逐块赋值
    MoFang[2][0][0]=MoFang[4][2][2];
    MoFang[2][0][1]=MoFang[4][2][1];
    MoFang[2][0][2]=MoFang[4][2][0];
    MoFang[2][1][0]=MoFang[4][1][2];
    MoFang[2][1][1]=MoFang[4][1][1];
    MoFang[2][1][2]=MoFang[4][1][0];
    MoFang[2][2][0]=MoFang[4][0][2];
    MoFang[2][2][1]=MoFang[4][0][1];
    MoFang[2][2][2]=MoFang[4][0][0];
    ///////////////////////////////
    //第一面数据写入第五面:第一面数据缓存在缓存数组
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[4][i][j]=mian[i][j];
        }
    }
    //第二面上旋(正面看为逆时针旋转)
    /////////////////////////////
    kuai[0]=MoFang[1][0][0];
    kuai[1]=MoFang[1][0][1];
    /////////////////////////////
    MoFang[1][0][0]=MoFang[1][0][2];
    MoFang[1][0][1]=MoFang[1][1][2];
    /////////////////////////////
    MoFang[1][0][2]=MoFang[1][2][2];
    MoFang[1][1][2]=MoFang[1][2][1];
    /////////////////////////////
    MoFang[1][2][2]=MoFang[1][2][0];
    MoFang[1][2][1]=MoFang[1][1][0];
    /////////////////////////////
    MoFang[1][2][0]=kuai[0];
    MoFang[1][1][0]=kuai[1];
    /////////////////////////////
    //第四面左旋(正面看为顺时针旋转)
    /////////////////////////////
    kuai[0]=MoFang[3][0][0];
    kuai[1]=MoFang[3][0][1];
    /////////////////////////////
    MoFang[3][0][0]=MoFang[3][2][0];
    MoFang[3][0][1]=MoFang[3][1][0];
    /////////////////////////////
    MoFang[3][2][0]=MoFang[3][2][2];
    MoFang[3][1][0]=MoFang[3][2][1];
    /////////////////////////////
    MoFang[3][2][2]=MoFang[3][0][2];
    MoFang[3][2][1]=MoFang[3][1][2];
    /////////////////////////////
    MoFang[3][0][2]=kuai[0];
    MoFang[3][1][2]=kuai[1];
    /////////////////////////////
    return 0;
}
bool MoFang_3::MoFang_ZT_S(void)
{
   //魔方整体上滚
   ////////////////////////
   MoFang_ZT_S_S();
   ///////////////////////////
   MoFang_GDI();     //更新屏幕
   return 0;
}
bool MoFang_3::MoFang_ZT_X(void)
{
    //魔方整体下滚
    //魔方上滚三次就相当于一次下滚
    ////////////////////////
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    ///////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}  
bool MoFang_3::MoFang_ZT_Z_S(void)
{
    //魔方整体左滚原始函数
    //数据交换缓存数组
    struct MoFang_kuai mian[3][3];
    struct MoFang_kuai kuai[2];
    int i,j;
    //魔方数组第一面数据写入缓存数组
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            mian[i][j]=MoFang[0][i][j];
        }
    }
    //第四面数据写入第一面
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[0][i][j]=MoFang[3][i][j];
        }
    }
    //第三面数据写入第四面
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[3][i][j]=MoFang[2][i][j];
        }
    }
    //第二面数据写入第三面
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[2][i][j]=MoFang[1][i][j];
        }
    }
    //第一面数据写入第二面:第一面数据缓存在缓存数组里
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            MoFang[1][i][j]=mian[i][j];
        }
    }
    //第五面左旋(正面看为顺时针旋转)
    /////////////////////////////
    kuai[0]=MoFang[4][0][0];
    kuai[1]=MoFang[4][0][1];
    /////////////////////////////
    MoFang[4][0][0]=MoFang[4][2][0];
    MoFang[4][0][1]=MoFang[4][1][0];
    /////////////////////////////
    MoFang[4][2][0]=MoFang[4][2][2];
    MoFang[4][1][0]=MoFang[4][2][1];
    /////////////////////////////
    MoFang[4][2][2]=MoFang[4][0][2];
    MoFang[4][2][1]=MoFang[4][1][2];
    /////////////////////////////
    MoFang[4][0][2]=kuai[0];
    MoFang[4][1][2]=kuai[1];
    /////////////////////////////
    //第六面左旋(正面看为逆时针旋转)
    /////////////////////////////
    kuai[0]=MoFang[5][0][0];
    kuai[1]=MoFang[5][0][1];
    /////////////////////////////
    MoFang[5][0][0]=MoFang[5][0][2];
    MoFang[5][0][1]=MoFang[5][1][2];
    /////////////////////////////
    MoFang[5][0][2]=MoFang[5][2][2];
    MoFang[5][1][2]=MoFang[5][2][1];
    /////////////////////////////
    MoFang[5][2][2]=MoFang[5][2][0];
    MoFang[5][2][1]=MoFang[5][1][0];
    /////////////////////////////
    MoFang[5][2][0]=kuai[0];
    MoFang[5][1][0]=kuai[1];
    /////////////////////////////
    return 0;
}
bool MoFang_3::MoFang_ZT_Z(void)
{
    //魔方整体左滚
    MoFang_ZT_Z_S();
    ///////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_ZT_Y(void)
{
    //魔方整体右滚
    //魔方整体左滚三次就相当于右滚一次
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ///////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_F_S(void)
{
     //顺时针翻转原始函数
    //数据缓存
    struct MoFang_kuai kuai[3];
    //正面旋转开始
    /////////////////////////////
    kuai[0]=MoFang[0][0][0];
    kuai[1]=MoFang[0][0][1];
    /////////////////////////////
    MoFang[0][0][0]=MoFang[0][2][0];
    MoFang[0][0][1]=MoFang[0][1][0];
    /////////////////////////////
    MoFang[0][2][0]=MoFang[0][2][2];
    MoFang[0][1][0]=MoFang[0][2][1];
    /////////////////////////////
    MoFang[0][2][2]=MoFang[0][0][2];
    MoFang[0][2][1]=MoFang[0][1][2];
    /////////////////////////////
    MoFang[0][0][2]=kuai[0];
    MoFang[0][1][2]=kuai[1];
    /////////////////////////////
    //侧面旋转开始
    kuai[0]=MoFang[4][2][0];
    kuai[1]=MoFang[4][2][1];
    kuai[2]=MoFang[4][2][2];
    /////////////////////////////
    MoFang[4][2][0]=MoFang[1][2][2];
    MoFang[4][2][1]=MoFang[1][1][2];
    MoFang[4][2][2]=MoFang[1][0][2];
    //////////////////////////////
    MoFang[1][2][2]=MoFang[5][0][2];
    MoFang[1][1][2]=MoFang[5][0][1];
    MoFang[1][0][2]=MoFang[5][0][0];
    ////////////////////////////////
    MoFang[5][0][2]=MoFang[3][0][0];
    MoFang[5][0][1]=MoFang[3][1][0];
    MoFang[5][0][0]=MoFang[3][2][0];
    ////////////////////////////////
    MoFang[3][0][0]=kuai[0];
    MoFang[3][1][0]=kuai[1];
    MoFang[3][2][0]=kuai[2];
    return 0;
}
bool MoFang_3::MoFang_F(void)
{
    //魔方前片顺时针转90度
      MoFang_F_S();
     ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}    
bool MoFang_3::MoFang_F_(void)
{
    //魔方前片逆时针转90度
    //顺时针旋转3次就等于逆时针旋转1次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
     ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_B(void)
{
    //魔方后片顺时针转90度
    ////////////////////////////////
    //魔方整体左滚2次
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体左滚2次完成方向B操作
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_B_(void)
{
    //魔方后片逆时针转90度
    ////////////////////////////////
    //魔方整体左滚2次
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    //前片逆时针翻转一次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体左滚2次完成方向B操作
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_L(void)
{
    //魔方左片顺时针转90度
    ////////////////////////////////
    //右滚一次
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    ////////////////////////////////
    //左滚一次还原完成L方向操作
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_L_(void)
{
    //魔方左片顺时针转90度
    ////////////////////////////////
    //右滚一次
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    //前片逆时针翻转一次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
    ////////////////////////////////
    //左滚一次还原完成L_方向操作
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_R(void)
{
    //魔方右片顺时针转90度
     ////////////////////////////////
    //魔方整体左滚一次
    MoFang_ZT_Z_S();
    /////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体右滚一次完成R方向操作
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_R_(void)
{
    //魔方右片逆时针转90度
     ////////////////////////////////
    //魔方整体左滚一次
    MoFang_ZT_Z_S();
    /////////////////////////////////
    //前片逆时针翻转一次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体右滚一次完成R_方向操作
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    MoFang_ZT_Z_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_U(void)
{
    //魔方上片顺时针转90度
     ////////////////////////////////
    //魔方整体下滚一次
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    /////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    /////////////////////////////////
    //魔方整体上滚一次完成U方向操作
    MoFang_ZT_S_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_U_(void)
{
    //魔方上片逆时针转90度
    ////////////////////////////////
    //魔方整体下滚一次
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    /////////////////////////////////
    //前片逆时针翻转一次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
    /////////////////////////////////
    //魔方整体上滚一次完成U_方向操作
    MoFang_ZT_S_S();
    ////////////////////////////////
    MoFang_GDI();     //更新屏幕
     return 0;
}
bool MoFang_3::MoFang_D(void)
{
    //魔方下片顺时针转90度
    ////////////////////////////////
    //魔方整体上滚一次
    MoFang_ZT_S_S();
    ////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体下滚一次完成D方向操作
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    ///////////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
bool MoFang_3::MoFang_D_(void)
{
    //魔方下片逆时针转90度
    ////////////////////////////////
    //魔方整体上滚一次
    MoFang_ZT_S_S();
    ////////////////////////////////
    //前片顺时针翻转一次
    MoFang_F_S();
    MoFang_F_S();
    MoFang_F_S();
    ////////////////////////////////
    //魔方整体下滚一次完成D方向操作
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    MoFang_ZT_S_S();
    ///////////////////////////////
    MoFang_GDI();     //更新屏幕
    return 0;
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
znnwe1
笔友
文章
8
回复
34
学术分
0
2012/09/16注册,6年11个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}