久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2644|回復: 0
打印 上一主題 下一主題
收起左側

對以前C版的魔方操作進行封裝和擴展

[復制鏈接]
跳轉到指定樓層
樓主
ID:102014 發表于 2016-1-6 02:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. class mofang
  2. {
  3.     //魔方類對魔方操作進行封裝
  4.         //數據
  5.         Sequence CD;//解魔方操作序列
  6.         void clockwise(Surface *sur,int i);//將sur面順時針旋轉i次
  7.         void F(Cube *m,int i);//將魔方的正面順時針轉i次
  8.         void B(Cube *m,int i);//將魔方的背面順時針轉i次
  9.         void R(Cube *m,int i);//將魔方的右面順時針轉i次
  10.         void L(Cube *m,int i);//將魔方的左面順時針轉i次
  11.         void U(Cube *m,int i);//將魔方的上面順時針轉i次
  12.         void D(Cube *m,int i);//將魔方的底面順時針轉i次
  13.         void MR(Cube *m,int i);//將魔方的左面和右面之間的面以右面為基準順時針旋轉1次
  14.         void MF(Cube *m,int i);//將魔方的前面和后面之間的面以前面為基準順時針旋轉i次
  15.         void MU(Cube *m,int i);//將魔方的上面和底面之間的面以上面為基準順時針旋轉i次
  16.         void cz_gs();//格式化操作CD列表到cz數組  操作列表對應格式如:F=1 B=2 R=3 L=4 U=5 D=6 11表示F執行1次 13表示F執行3次
  17.         //////////////////////////////
  18.         public :
  19.         Cube mf;//魔方實體
  20.         int cz[200];//格式化后的操作列表
  21.         void cz_zx(int cz);//執行一個格式化的操作
  22.         void cz_zx_f(int cz);//執行一個格式化的操作反操作
  23.     mofang();//構造函數
  24.         void SaveChBuf(char *sur,int i);//將cb序列存入chbuf中
  25.         void MoveCube(Cube *m,char *sur,int i);//根據序列cb轉換魔方m并將操作保存進操作序列中
  26.         void DownCross(Cube *magiccube);//將底面拼出一個十字
  27.         void DownCornerRestore(Cube *magiccube);//底角還原
  28.         void CentreEdgeRestore(Cube *magiccube);//中棱歸位
  29.         void UpCross(Cube *magiccube);//頂面十字
  30.         void UpSurfaceCornerRestore(Cube *magiccube);//頂角面位
  31.         void UpCornerRestore(Cube *magiccube);//頂角還原
  32.         void UpEdgeRestore(Cube *magiccube);//頂棱還原
  33.         void InitializationMagiccube(Cube *m);//初始化魔方
  34.         void Input(Cube magiccube);//從外部獲取并實例化新魔方
  35.         void out(Cube &magiccube);//向外部輸出當前魔方狀態
  36.         void out_print(char *HC);//向外部輸出格式化后的操作列表
  37.         void jieMF();//解魔方操作步驟保存在操作列表中
  38.         void Exit();//釋放內存
  39.         void D_F(int i){F(&mf,i);}//魔方F方向操作
  40.         void D_B(int i){B(&mf,i);}//魔方B方向操作
  41.         void D_R(int i){R(&mf,i);}//魔方R方向操作
  42.         void D_L(int i){L(&mf,i);}//魔方L方向操作
  43.         void D_U(int i){U(&mf,i);}//魔方U方向操作
  44.         void D_D(int i){D(&mf,i);}//魔方D方向操作
  45. };

  46. mofang::mofang()
  47. {
  48. //構造函數
  49. CD.num=0;
  50. CD.head=NULL;
  51. //InitializationMagiccube(&mf);//初始化魔方
  52. }

  53. void mofang::clockwise(Surface *sur,int i)
  54. {
  55.         //將sur面順時針旋轉i次
  56.     Surface t;
  57.     for(;i>0;i--)
  58.         {
  59.     t=*sur;
  60.     sur->s[1][1]=t.s[3][1];
  61.     sur->s[1][2]=t.s[2][1];
  62.     sur->s[1][3]=t.s[1][1];
  63.     sur->s[2][1]=t.s[3][2];
  64.     sur->s[2][2]=t.s[2][2];
  65.     sur->s[2][3]=t.s[1][2];
  66.     sur->s[3][1]=t.s[3][3];
  67.     sur->s[3][2]=t.s[2][3];
  68.     sur->s[3][3]=t.s[1][3];
  69.         }
  70. }

  71. void mofang::F(Cube *m,int i)
  72. {
  73. //將魔方的正面順時針轉i次
  74. Cube n;
  75. for(;i>0;i--)
  76. {
  77. n=*m;
  78. clockwise(&m->front,1);
  79. m->right.s[1][1]=n.up.s[3][1];
  80. m->right.s[2][1]=n.up.s[3][2];
  81. m->right.s[3][1]=n.up.s[3][3];
  82. m->down.s[1][1]=n.right.s[3][1];
  83. m->down.s[1][2]=n.right.s[2][1];
  84. m->down.s[1][3]=n.right.s[1][1];
  85. m->left.s[1][3]=n.down.s[1][1];
  86. m->left.s[2][3]=n.down.s[1][2];
  87. m->left.s[3][3]=n.down.s[1][3];
  88. m->up.s[3][1]=n.left.s[3][3];
  89. m->up.s[3][2]=n.left.s[2][3];
  90. m->up.s[3][3]=n.left.s[1][3];
  91. }
  92. }

  93. void mofang::B(Cube *m,int i)
  94. {
  95. //將魔方的背面順時針轉i次
  96. Cube n;
  97. for(;i>0;i--)
  98. {
  99. n=*m;
  100. clockwise(&m->back,1);
  101. m->right.s[1][3]=n.down.s[3][3];
  102. m->right.s[2][3]=n.down.s[3][2];
  103. m->right.s[3][3]=n.down.s[3][1];
  104. m->down.s[3][1]=n.left.s[1][1];
  105. m->down.s[3][2]=n.left.s[2][1];
  106. m->down.s[3][3]=n.left.s[3][1];
  107. m->left.s[1][1]=n.up.s[1][3];
  108. m->left.s[2][1]=n.up.s[1][2];
  109. m->left.s[3][1]=n.up.s[1][1];
  110. m->up.s[1][1]=n.right.s[1][3];
  111. m->up.s[1][2]=n.right.s[2][3];
  112. m->up.s[1][3]=n.right.s[3][3];
  113. }
  114. }

  115. void mofang::R(Cube *m,int i)
  116. {
  117. //將魔方的右面順時針轉i次
  118. Cube n;
  119. for(;i>0;i--)
  120. {
  121. n=*m;
  122. clockwise(&m->right,1);
  123. m->up.s[1][3]=n.front.s[1][3];
  124. m->up.s[2][3]=n.front.s[2][3];
  125. m->up.s[3][3]=n.front.s[3][3];
  126. m->front.s[1][3]=n.down.s[1][3];
  127. m->front.s[2][3]=n.down.s[2][3];
  128. m->front.s[3][3]=n.down.s[3][3];
  129. m->down.s[1][3]=n.back.s[3][1];
  130. m->down.s[2][3]=n.back.s[2][1];
  131. m->down.s[3][3]=n.back.s[1][1];
  132. m->back.s[3][1]=n.up.s[1][3];
  133. m->back.s[2][1]=n.up.s[2][3];
  134. m->back.s[1][1]=n.up.s[3][3];
  135. }
  136. }

  137. void mofang::L(Cube *m,int i)
  138. {
  139. //將魔方的左面順時針轉i次
  140. Cube n;
  141. for(;i>0;i--)
  142. {
  143. n=*m;
  144. clockwise(&m->left,1);
  145. m->up.s[1][1]=n.back.s[3][3];
  146. m->up.s[2][1]=n.back.s[2][3];
  147. m->up.s[3][1]=n.back.s[1][3];
  148. m->back.s[1][3]=n.down.s[3][1];
  149. m->back.s[2][3]=n.down.s[2][1];
  150. m->back.s[3][3]=n.down.s[1][1];
  151. m->down.s[1][1]=n.front.s[1][1];
  152. m->down.s[2][1]=n.front.s[2][1];
  153. m->down.s[3][1]=n.front.s[3][1];
  154. m->front.s[1][1]=n.up.s[1][1];
  155. m->front.s[2][1]=n.up.s[2][1];
  156. m->front.s[3][1]=n.up.s[3][1];
  157. }
  158. }

  159. void mofang::U(Cube *m,int i)
  160. {
  161. //將魔方的上面順時針轉i次
  162. Cube n;
  163. for(;i>0;i--)
  164. {
  165. n=*m;
  166. clockwise(&m->up,1);
  167. m->front.s[1][1]=n.right.s[1][1];
  168. m->front.s[1][2]=n.right.s[1][2];
  169. m->front.s[1][3]=n.right.s[1][3];
  170. m->right.s[1][1]=n.back.s[1][1];
  171. m->right.s[1][2]=n.back.s[1][2];
  172. m->right.s[1][3]=n.back.s[1][3];
  173. m->back.s[1][1]=n.left.s[1][1];
  174. m->back.s[1][2]=n.left.s[1][2];
  175. m->back.s[1][3]=n.left.s[1][3];
  176. m->left.s[1][1]=n.front.s[1][1];
  177. m->left.s[1][2]=n.front.s[1][2];
  178. m->left.s[1][3]=n.front.s[1][3];
  179. }
  180. }

  181. void mofang::D(Cube *m,int i)
  182. {
  183. //將魔方的底面順時針轉i次
  184. Cube n;
  185. for(;i>0;i--)
  186. {
  187. n=*m;
  188. clockwise(&m->down,1);
  189. m->front.s[3][1]=n.left.s[3][1];
  190. m->front.s[3][2]=n.left.s[3][2];
  191. m->front.s[3][3]=n.left.s[3][3];
  192. m->left.s[3][1]=n.back.s[3][1];
  193. m->left.s[3][2]=n.back.s[3][2];
  194. m->left.s[3][3]=n.back.s[3][3];
  195. m->back.s[3][1]=n.right.s[3][1];
  196. m->back.s[3][2]=n.right.s[3][2];
  197. m->back.s[3][3]=n.right.s[3][3];
  198. m->right.s[3][1]=n.front.s[3][1];
  199. m->right.s[3][2]=n.front.s[3][2];
  200. m->right.s[3][3]=n.front.s[3][3];
  201. }
  202. }

  203. void mofang::MR(Cube *m,int i)
  204. {
  205. //將魔方的左面和右面之間的面以右面為基準順時針旋轉1次
  206. Cube n;
  207. for(;i>0;i--)
  208. {
  209. n=*m;
  210. m->up.s[1][2]=n.front.s[1][2];
  211. m->up.s[2][2]=n.front.s[2][2];
  212. m->up.s[3][2]=n.front.s[3][2];
  213. m->front.s[1][2]=n.down.s[1][2];
  214. m->front.s[2][2]=n.down.s[2][2];
  215. m->front.s[3][2]=n.down.s[3][2];
  216. m->down.s[1][2]=n.back.s[3][2];
  217. m->down.s[2][2]=n.back.s[2][2];
  218. m->down.s[3][2]=n.back.s[1][2];
  219. m->back.s[3][2]=n.up.s[1][2];
  220. m->back.s[2][2]=n.up.s[2][2];
  221. m->back.s[1][2]=n.up.s[3][2];
  222. }
  223. }

  224. void mofang::MF(Cube *m,int i)
  225. {
  226. //將魔方的前面和后面之間的面以前面為基準順時針旋轉i次
  227. Cube n;
  228. for(;i>0;i--)
  229. {
  230. n=*m;
  231. m->right.s[1][2]=n.up.s[2][1];
  232. m->right.s[2][2]=n.up.s[2][2];
  233. m->right.s[3][2]=n.up.s[2][3];
  234. m->up.s[2][1]=n.left.s[3][2];
  235. m->up.s[2][2]=n.left.s[2][2];
  236. m->up.s[2][3]=n.left.s[1][2];
  237. m->left.s[1][2]=n.down.s[2][1];
  238. m->left.s[2][2]=n.down.s[2][2];
  239. m->left.s[3][2]=n.down.s[2][3];
  240. m->down.s[2][1]=n.right.s[3][2];
  241. m->down.s[2][2]=n.right.s[2][2];
  242. m->down.s[2][3]=n.right.s[1][2];
  243. }
  244. }

  245. void mofang::MU(Cube *m,int i)
  246. {
  247. //將魔方的上面和底面之間的面以上面為基準順時針旋轉i次
  248. Cube n;
  249. for(;i>0;i--)
  250. {
  251. n=*m;
  252. m->front.s[2][1]=n.right.s[2][1];
  253. m->front.s[2][2]=n.right.s[2][2];
  254. m->front.s[2][3]=n.right.s[2][3];
  255. m->right.s[2][1]=n.back.s[2][1];
  256. m->right.s[2][2]=n.back.s[2][2];
  257. m->right.s[2][3]=n.back.s[2][3];
  258. m->back.s[2][1]=n.left.s[2][1];
  259. m->back.s[2][2]=n.left.s[2][2];
  260. m->back.s[2][3]=n.left.s[2][3];
  261. m->left.s[2][1]=n.front.s[2][1];
  262. m->left.s[2][2]=n.front.s[2][2];
  263. m->left.s[2][3]=n.front.s[2][3];
  264. }
  265. }

  266. void mofang::SaveChBuf(char *sur,int i)
  267. {
  268. //將cb序列存入chbuf中
  269. char *str;
  270. int len=strlen(sur);
  271. SNode *p,*q;
  272. if(i%4)
  273. {
  274. str=(char *)malloc(sizeof(char)*(len+2));
  275. if(!str)
  276. {
  277. printf("內存不足!\n");
  278. exit(0);
  279. }
  280. strcpy(str,sur);
  281. q=(SNode *)malloc(sizeof(SNode));
  282. if(!q)
  283. {
  284. printf("內存不足!\n");
  285. exit(0);
  286. }
  287. q->chbuf=str;
  288. q->times=i;
  289. q->next=NULL;
  290. if(CD.head==NULL)
  291. {
  292. CD.head=q;
  293. CD.num++;
  294. }
  295. else
  296. {
  297. for(p=CD.head;p->next;p=p->next);
  298. if(!strcmp(p->chbuf,q->chbuf))
  299. {
  300. p->times=(p->times+q->times)%4;
  301. free(q->chbuf);free(q);
  302. if(!(p->times))
  303. {
  304. if(p==CD.head)
  305. {
  306. CD.head=NULL;
  307. free(p->chbuf);free(p);
  308. CD.num--;
  309. }
  310. else
  311. {
  312. for(q=CD.head;q->next!=p;q=q->next);
  313. q->next=NULL;
  314. free(p->chbuf);free(p);
  315. CD.num--;
  316. }
  317. }
  318. }
  319. else
  320. {
  321. p->next=q;
  322. CD.num++;
  323. }
  324. }
  325. }
  326. }

  327. void mofang::MoveCube(Cube *m,char *sur,int i)
  328. {
  329. //根據序列cb轉換魔方m并將操作保存進操作序列中
  330. SaveChBuf(sur,i);//將魔方轉換序列存入chbuf中
  331. if(!strcmp(sur,"f"))
  332. F(m,i);//將魔方的正面順時針旋轉i次
  333. if(!strcmp(sur,"b"))
  334. B(m,i);//將魔方的背面順時針旋轉i次
  335. if(!strcmp(sur,"r"))
  336. R(m,i);//將魔方的右面順時針旋轉i次
  337. if(!strcmp(sur,"l"))
  338. L(m,i);//將魔方的左面順時針旋轉i次
  339. if(!strcmp(sur,"u"))
  340. U(m,i);//將魔方的上面順時針旋轉i次
  341. if(!strcmp(sur,"d"))
  342. D(m,i);//將魔方的底面順時針旋轉i次
  343. if(!strcmp(sur,"mr"))
  344. MR(m,i);//將魔方的左面和右面之間的面以右面為基準順時針旋轉i次
  345. if(!strcmp(sur,"mf"))
  346. MF(m,i);//將魔方的前面和后面之間的面以前面為基準順時針旋轉i次
  347. if(!strcmp(sur,"mu"))
  348. MU(m,i);//將魔方的上面和底面之間的面以上面為基準順時針旋轉i
  349. }

  350. void mofang::DownCross(Cube *magiccube)
  351. {
  352. //將底面拼出一個十字
  353. while(!((magiccube->down.s[1][2]==magiccube->down.s[2][2]&&magiccube->front.s[3][2]==magiccube->front.s[2][2])
  354. &&(magiccube->down.s[2][1]==magiccube->down.s[2][2]&&magiccube->left.s[3][2]==magiccube->left.s[2][2])
  355. &&(magiccube->down.s[2][3]==magiccube->down.s[2][2]&&magiccube->right.s[3][2]==magiccube->right.s[2][2])
  356. &&(magiccube->down.s[3][2]==magiccube->down.s[2][2]&&magiccube->back.s[3][2]==magiccube->back.s[2][2])))
  357. {
  358. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  359. char *s[4]={"f","l","b","r"};
  360. int subscript_of_down[4][2]={{1,2},{2,1},{3,2},{2,3}};
  361. int subscript_of_up[4][2]={{3,2},{2,1},{1,2},{2,3}};
  362. char ch[3];
  363. int n;
  364. for(int i=0;i<4;i++)
  365. {
  366. if(magiccube->down.s[subscript_of_down[i][0]][subscript_of_down[i][1]]==magiccube->down.s[2][2]
  367. &&sur[i]->s[3][2]!=sur[i]->s[2][2])
  368. {
  369. strcpy(ch,s[i]);
  370. MoveCube(magiccube,ch,2);
  371. }//底面棱塊為底面色位置不對
  372. if(magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]==magiccube->down.s[2][2])
  373. {
  374. n=0;
  375. while(sur[(i+n)%4]->s[2][2]!=sur[(i+n)%4]->s[1][2])
  376. {
  377. MoveCube(magiccube,"u",1);
  378. n++;
  379. }
  380. strcpy(ch,s[(i+n)%4]);
  381. MoveCube(magiccube,ch,2);
  382. }//以上是底面棱塊在頂面的情況
  383. if(sur[i]->s[1][2]==magiccube->down.s[2][2])//側面上棱是底面色的情況
  384. {
  385. n=0;
  386. while(sur[(i+n+1)%4]->s[2][2]!=magiccube->up.s[subscript_of_up[(i+n)%4][0]][subscript_of_up[(i+n)%4][1]])
  387. {
  388. MoveCube(magiccube,"u",1);
  389. n++;
  390. }
  391. strcpy(ch,s[(i+n)%4]);
  392. MoveCube(magiccube,ch,3);
  393. strcpy(ch,s[(n+1+i)%4]);
  394. MoveCube(magiccube,ch,1);
  395. strcpy(ch,s[(i+n)%4]);
  396. MoveCube(magiccube,ch,1);
  397. }
  398. if(sur[i]->s[2][1]==magiccube->down.s[2][2])//側面左棱是底面色的情況
  399. {
  400. strcpy(ch,s[(i+1)%4]);
  401. MoveCube(magiccube,ch,3);
  402. MoveCube(magiccube,"u",1);
  403. MoveCube(magiccube,ch,1);
  404. }
  405. if(sur[i]->s[2][3]==magiccube->down.s[2][2])//側面右棱是底面色的情況
  406. {
  407. strcpy(ch,s[(i+3)%4]);
  408. MoveCube(magiccube,ch,1);
  409. MoveCube(magiccube,"u",1);
  410. MoveCube(magiccube,ch,3);
  411. }
  412. if(sur[i]->s[3][2]==magiccube->down.s[2][2])//側面底棱是底面色的情況
  413. {
  414. strcpy(ch,s[i]);
  415. MoveCube(magiccube,ch,1);
  416. strcpy(ch,s[(i+1)%4]);
  417. MoveCube(magiccube,ch,3);
  418. MoveCube(magiccube,"u",1);
  419. MoveCube(magiccube,ch,1);
  420. strcpy(ch,s[i]);
  421. MoveCube(magiccube,ch,3);
  422. }//以上是側面棱塊色是底面色的情況
  423. }
  424. }
  425. }

  426. void mofang::DownCornerRestore(Cube *magiccube)
  427. {
  428. //底角還原
  429. while(!((magiccube->down.s[1][1]==magiccube->down.s[2][2]&&magiccube->front.s[3][1]==magiccube->front.s[2][2]&&magiccube->left.s[3][3]==magiccube->left.s[2][2])
  430. &&(magiccube->down.s[1][3]==magiccube->down.s[2][2]&&magiccube->front.s[3][3]==magiccube->front.s[2][2]&&magiccube->right.s[3][1]==magiccube->right.s[2][2])
  431. &&(magiccube->down.s[3][1]==magiccube->down.s[2][2]&&magiccube->right.s[3][1]==magiccube->right.s[2][2]&&magiccube->back.s[3][3]==magiccube->back.s[2][2])
  432. &&(magiccube->down.s[3][3]==magiccube->down.s[2][2]&&magiccube->back.s[3][1]==magiccube->back.s[2][2]&&magiccube->right.s[3][3]==magiccube->right.s[2][2])))//直到底角全部歸位
  433. {
  434. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  435. char *s[4]={"f","l","b","r"};
  436. int subscript_of_down[4][2]={{1,1},{3,1},{3,3},{1,3}};
  437. int subscript_of_up[4][2]={{3,1},{1,1},{1,3},{3,3}};
  438. char ch[3];
  439. int n;
  440. for(int i=0;i<4;i++)
  441. {
  442. if(magiccube->down.s[subscript_of_down[i][0]][subscript_of_down[i][1]]==magiccube->down.s[2][2]&&
  443. (sur[i]->s[3][1]!=sur[i]->s[2][2]||sur[(i+1)%4]->s[3][3]!=sur[(i+1)%4]->s[2][2]))
  444. {
  445. strcpy(ch,s[i]);
  446. MoveCube(magiccube,ch,1);
  447. MoveCube(magiccube,"u",1);
  448. MoveCube(magiccube,ch,3);
  449. }//底面角塊顏色歸位但是位置不對
  450. if(magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]==magiccube->down.s[2][2])
  451. {
  452. n=0;
  453. while(sur[(i+n)%4]->s[1][1]!=sur[(i+n+1)%4]->s[2][2])
  454. {
  455. MoveCube(magiccube,"u",1);
  456. n++;
  457. }
  458. strcpy(ch,s[(i+n)%4]);
  459. MoveCube(magiccube,ch,1);
  460. MoveCube(magiccube,"u",3);
  461. MoveCube(magiccube,ch,3);
  462. MoveCube(magiccube,"u",2);
  463. }//頂面有底角色塊的情況
  464. if(sur[i]->s[1][1]==magiccube->down.s[2][2])//側面左上角是底面色的情況
  465. {
  466. n=0;
  467. while(sur[(i+n+1)%4]->s[2][2]!=sur[(i+n+1)%4]->s[1][3])
  468. {
  469. MoveCube(magiccube,"u",1);
  470. n++;
  471. }
  472. strcpy(ch,s[(n+i)%4]);
  473. MoveCube(magiccube,ch,1);
  474. MoveCube(magiccube,"u",1);
  475. MoveCube(magiccube,ch,3);
  476. }
  477. if(sur[i]->s[1][3]==magiccube->down.s[2][2])//側面右上角是底面色的情況
  478. {
  479. n=0;
  480. while(sur[(i+n+3)%4]->s[2][2]!=sur[(i+n+3)%4]->s[1][1])
  481. {
  482. MoveCube(magiccube,"u",1);
  483. n++;
  484. }
  485. strcpy(ch,s[(n+i)%4]);
  486. MoveCube(magiccube,ch,3);
  487. MoveCube(magiccube,"u",3);
  488. MoveCube(magiccube,ch,1);
  489. }
  490. if(sur[i]->s[3][1]==magiccube->down.s[2][2])//側面左下角是底面色的情況
  491. {
  492. strcpy(ch,s[i]);
  493. MoveCube(magiccube,ch,1);
  494. MoveCube(magiccube,"u",1);
  495. MoveCube(magiccube,ch,3);
  496. }
  497. if(sur[i]->s[3][3]==magiccube->down.s[2][2])//側面右下角是底面色的情況
  498. {
  499. strcpy(ch,s[i]);
  500. MoveCube(magiccube,ch,3);
  501. MoveCube(magiccube,"u",3);
  502. MoveCube(magiccube,ch,1);
  503. }//側面有底面色塊
  504. }
  505. }
  506. }

  507. void mofang::CentreEdgeRestore(Cube *magiccube)
  508. {
  509. //中棱歸位
  510. while(!((magiccube->front.s[2][1]==magiccube->front.s[2][2]&&magiccube->front.s[2][3]==magiccube->front.s[2][2])
  511. &&(magiccube->left.s[2][1]==magiccube->left.s[2][2]&&magiccube->left.s[2][3]==magiccube->left.s[2][2])
  512. &&(magiccube->back.s[2][1]==magiccube->back.s[2][2]&&magiccube->back.s[2][3]==magiccube->back.s[2][2])
  513. &&(magiccube->right.s[2][1]==magiccube->right.s[2][2]&&magiccube->right.s[2][3]==magiccube->right.s[2][2])))
  514. {
  515. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  516. char *s[4]={"f","l","b","r"};
  517. int subscript_of_up[4][2]={{3,2},{2,1},{1,2},{2,3}};
  518. char ch[3];
  519. int n;
  520. for(int i=0;i<4;i++)
  521. {
  522. if(!(sur[i]->s[2][1]==sur[i]->s[2][2]&&sur[(i+1)%4]->s[2][3]==sur[(i+1)%4]->s[2][2])
  523. &&(sur[i]->s[2][1]!=magiccube->up.s[2][2]&&sur[(i+1)%4]->s[2][3]!=magiccube->up.s[2][2]))
  524. {
  525. strcpy(ch,s[i]);
  526. MoveCube(magiccube,ch,3);
  527. MoveCube(magiccube,"u",3);
  528. MoveCube(magiccube,ch,3);
  529. MoveCube(magiccube,"u",3);
  530. MoveCube(magiccube,ch,3);
  531. MoveCube(magiccube,"u",1);
  532. MoveCube(magiccube,ch,1);
  533. MoveCube(magiccube,"u",1);
  534. MoveCube(magiccube,ch,1);
  535. MoveCube(magiccube,"u",2);
  536. }
  537. if(sur[i]->s[1][2]!=magiccube->up.s[2][2]
  538. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2])
  539. {
  540. n=0;
  541. while(sur[(i+n)%4]->s[1][2]!=sur[(i+n)%4]->s[2][2])
  542. {
  543. n++;
  544. MoveCube(magiccube,"u",1);
  545. }
  546. if(magiccube->up.s[subscript_of_up[(i+n)%4][0]][subscript_of_up[(i+n)%4][1]]==sur[(i+n+3)%4]->s[2][2])
  547. {
  548. strcpy(ch,s[(i+n)%4]);
  549. MoveCube(magiccube,ch,1);
  550. MoveCube(magiccube,"u",1);
  551. MoveCube(magiccube,ch,1);
  552. MoveCube(magiccube,"u",1);
  553. MoveCube(magiccube,ch,1);
  554. MoveCube(magiccube,"u",3);
  555. MoveCube(magiccube,ch,3);
  556. MoveCube(magiccube,"u",3);
  557. MoveCube(magiccube,ch,3);
  558. }
  559. if(magiccube->up.s[subscript_of_up[(i+n)%4][0]][subscript_of_up[(i+n)%4][1]]==sur[(i+n+1)%4]->s[2][2])
  560. {
  561. strcpy(ch,s[(i+n)%4]);
  562. MoveCube(magiccube,ch,3);
  563. MoveCube(magiccube,"u",3);
  564. MoveCube(magiccube,ch,3);
  565. MoveCube(magiccube,"u",3);
  566. MoveCube(magiccube,ch,3);
  567. MoveCube(magiccube,"u",1);
  568. MoveCube(magiccube,ch,1);
  569. MoveCube(magiccube,"u",1);
  570. MoveCube(magiccube,ch,1);
  571. }
  572. }
  573. }
  574. }
  575. }

  576. void mofang::UpCross(Cube *magiccube)
  577. {
  578. //頂面十字
  579. while(!(magiccube->up.s[1][2]==magiccube->up.s[2][2]&&magiccube->up.s[2][1]==magiccube->up.s[2][2]
  580. &&magiccube->up.s[2][3]==magiccube->up.s[2][2]&&magiccube->up.s[3][2]==magiccube->up.s[2][2]))
  581. {
  582. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  583. char *s[4]={"f","l","b","r"};
  584. int subscript_of_up[4][2]={{3,2},{2,1},{1,2},{2,3}};
  585. char ch[3];
  586. if(magiccube->up.s[1][2]!=magiccube->up.s[2][2]&&magiccube->up.s[2][1]!=magiccube->up.s[2][2]
  587. &&magiccube->up.s[2][3]!=magiccube->up.s[2][2]&&magiccube->up.s[3][2]!=magiccube->up.s[2][2])
  588. {
  589. MoveCube(magiccube,"f",1);
  590. MoveCube(magiccube,"r",1);
  591. MoveCube(magiccube,"u",1);
  592. MoveCube(magiccube,"r",3);
  593. MoveCube(magiccube,"u",3);
  594. MoveCube(magiccube,"f",3);
  595. }
  596. for(int i=0;i<4;i++)
  597. {
  598. if(magiccube->up.s[subscript_of_up[(i+1)%4][0]][subscript_of_up[(i+1)%4][1]]==magiccube->up.s[2][2]
  599. &&magiccube->up.s[subscript_of_up[(i+2)%4][0]][subscript_of_up[(i+2)%4][1]]==magiccube->up.s[2][2]
  600. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2]
  601. &&magiccube->up.s[subscript_of_up[(i+3)%4][0]][subscript_of_up[(i+3)%4][1]]!=magiccube->up.s[2][2])
  602. {//形成一個倒"L"
  603. strcpy(ch,s[i]);
  604. MoveCube(magiccube,ch,1);
  605. strcpy(ch,s[(i+3)%4]);
  606. MoveCube(magiccube,ch,1);
  607. MoveCube(magiccube,"u",1);
  608. MoveCube(magiccube,ch,3);
  609. MoveCube(magiccube,"u",3);
  610. strcpy(ch,s[i]);
  611. MoveCube(magiccube,ch,3);
  612. }
  613. if(magiccube->up.s[subscript_of_up[(i+1)%4][0]][subscript_of_up[(i+1)%4][1]]==magiccube->up.s[2][2]
  614. &&magiccube->up.s[subscript_of_up[(i+3)%4][0]][subscript_of_up[(i+3)%4][1]]==magiccube->up.s[2][2]
  615. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2]
  616. &&magiccube->up.s[subscript_of_up[(i+2)%4][0]][subscript_of_up[(i+2)%4][1]]!=magiccube->up.s[2][2])
  617. {//形成一個橫"一"
  618. strcpy(ch,s[i]);
  619. MoveCube(magiccube,ch,1);
  620. strcpy(ch,s[(i+3)%4]);
  621. MoveCube(magiccube,ch,1);
  622. MoveCube(magiccube,"u",1);
  623. MoveCube(magiccube,ch,3);
  624. MoveCube(magiccube,"u",3);
  625. strcpy(ch,s[i]);
  626. MoveCube(magiccube,ch,3);
  627. }
  628. }
  629. }
  630. }

  631. void mofang::UpSurfaceCornerRestore(Cube *magiccube)
  632. {
  633. //頂角面位
  634. while(!(magiccube->up.s[1][1]==magiccube->up.s[2][2]&&magiccube->up.s[1][3]==magiccube->up.s[2][2]
  635. &&magiccube->up.s[3][1]==magiccube->up.s[2][2]&&magiccube->up.s[3][3]==magiccube->up.s[2][2]))
  636. {
  637. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  638. char *s[4]={"f","l","b","r"};
  639. int subscript_of_up[4][2]={{3,1},{1,1},{1,3},{3,3}};
  640. char ch[3];
  641. int n;
  642. for(int i=0;i<4;i++)
  643. {
  644. if((magiccube->up.s[1][1]!=magiccube->up.s[2][2]&&magiccube->up.s[1][3]!=magiccube->up.s[2][2]
  645. &&magiccube->up.s[3][1]!=magiccube->up.s[2][2]&&magiccube->up.s[3][3]!=magiccube->up.s[2][2])
  646. &&(sur[i]->s[1][1]==magiccube->up.s[2][2]&&sur[i]->s[1][3]==magiccube->up.s[2][2]))
  647. {//十字型(前左右與上同色)
  648. n=0;
  649. while(sur[(i+n)%4]->s[1][2]!=sur[(i+n)%4]->s[2][2])
  650. {
  651. MoveCube(magiccube,"u",1);
  652. n++;
  653. }
  654. strcpy(ch,s[(i+n+3)%4]);
  655. MoveCube(magiccube,ch,3);
  656. MoveCube(magiccube,"u",2);
  657. MoveCube(magiccube,ch,1);
  658. MoveCube(magiccube,"u",1);
  659. MoveCube(magiccube,ch,3);
  660. MoveCube(magiccube,"u",1);
  661. MoveCube(magiccube,ch,1);
  662. }
  663. if(magiccube->up.s[subscript_of_up[(i+3)%4][0]][subscript_of_up[(i+3)%4][1]]==magiccube->up.s[2][2]
  664. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2]
  665. &&magiccube->up.s[subscript_of_up[(i+1)%4][0]][subscript_of_up[(i+1)%4][1]]!=magiccube->up.s[2][2]
  666. &&magiccube->up.s[subscript_of_up[(i+2)%4][0]][subscript_of_up[(i+2)%4][1]]!=magiccube->up.s[2][2])
  667. {//魚頭朝右下的魚
  668. if(sur[i]->s[1][1]!=magiccube->up.s[2][2])//前左與上異色
  669. {
  670. strcpy(ch,s[(i+3)%4]);
  671. MoveCube(magiccube,ch,3);
  672. MoveCube(magiccube,"u",2);
  673. MoveCube(magiccube,ch,1);
  674. MoveCube(magiccube,"u",1);
  675. MoveCube(magiccube,ch,3);
  676. MoveCube(magiccube,"u",1);
  677. MoveCube(magiccube,ch,1);
  678. }
  679. else//前左與上同色
  680. {
  681. MoveCube(magiccube,"u",3);
  682. strcpy(ch,s[(i+3)%4]);
  683. MoveCube(magiccube,ch,1);
  684. MoveCube(magiccube,"u",2);
  685. MoveCube(magiccube,ch,3);
  686. MoveCube(magiccube,"u",3);
  687. MoveCube(magiccube,ch,1);
  688. MoveCube(magiccube,"u",3);
  689. MoveCube(magiccube,ch,3);
  690. }
  691. }
  692. if(magiccube->up.s[subscript_of_up[(i+1)%4][0]][subscript_of_up[(i+1)%4][1]]==magiccube->up.s[2][2]
  693. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2]
  694. &&magiccube->up.s[subscript_of_up[(i+3)%4][0]][subscript_of_up[(i+3)%4][1]]!=magiccube->up.s[2][2]
  695. &&magiccube->up.s[subscript_of_up[(i+2)%4][0]][subscript_of_up[(i+2)%4][1]]==magiccube->up.s[2][2])
  696. {//大炮型
  697. if(sur[i]->s[1][1]==magiccube->up.s[2][2]&&sur[i]->s[1][3]==magiccube->up.s[2][2])
  698. {//前左右與上同色
  699. strcpy(ch,s[(i+1)%4]);
  700. MoveCube(magiccube,ch,3);
  701. MoveCube(magiccube,"u",2);
  702. MoveCube(magiccube,ch,1);
  703. MoveCube(magiccube,"u",1);
  704. MoveCube(magiccube,ch,3);
  705. MoveCube(magiccube,"u",1);
  706. MoveCube(magiccube,ch,1);
  707. }
  708. else
  709. {//前左右與上異色
  710. strcpy(ch,s[(i+2)%4]);
  711. MoveCube(magiccube,ch,3);
  712. MoveCube(magiccube,"u",2);
  713. MoveCube(magiccube,ch,1);
  714. MoveCube(magiccube,"u",1);
  715. MoveCube(magiccube,ch,3);
  716. MoveCube(magiccube,"u",1);
  717. MoveCube(magiccube,ch,1);
  718. }
  719. }
  720. if(magiccube->up.s[subscript_of_up[(i+3)%4][0]][subscript_of_up[(i+3)%4][1]]==magiccube->up.s[2][2]
  721. &&magiccube->up.s[subscript_of_up[i][0]][subscript_of_up[i][1]]!=magiccube->up.s[2][2]
  722. &&magiccube->up.s[subscript_of_up[(i+1)%4][0]][subscript_of_up[(i+1)%4][1]]==magiccube->up.s[2][2]
  723. &&magiccube->up.s[subscript_of_up[(i+2)%4][0]][subscript_of_up[(i+2)%4][1]]!=magiccube->up.s[2][2])
  724. {//雙凌型
  725. MoveCube(magiccube,"u",3);
  726. strcpy(ch,s[(i+3)%4]);
  727. MoveCube(magiccube,ch,3);
  728. MoveCube(magiccube,"u",2);
  729. MoveCube(magiccube,ch,1);
  730. MoveCube(magiccube,"u",1);
  731. MoveCube(magiccube,ch,3);
  732. MoveCube(magiccube,"u",1);
  733. MoveCube(magiccube,ch,1);
  734. }
  735. }
  736. }
  737. }

  738. void mofang::UpCornerRestore(Cube *magiccube)
  739. {
  740. //頂角還原
  741. while(magiccube->front.s[1][1]!=magiccube->front.s[2][2])
  742. MoveCube(magiccube,"u",1);
  743. while(!((magiccube->front.s[1][1]==magiccube->front.s[2][2]&&magiccube->front.s[1][3]==magiccube->front.s[2][2])
  744. &&(magiccube->left.s[1][1]==magiccube->left.s[2][2]&&magiccube->left.s[1][3]==magiccube->left.s[2][2])
  745. &&(magiccube->back.s[1][1]==magiccube->back.s[2][2]&&magiccube->back.s[1][3]==magiccube->back.s[2][2])
  746. &&(magiccube->right.s[1][1]==magiccube->right.s[2][2]&&magiccube->right.s[1][3]==magiccube->right.s[2][2])))
  747. {
  748. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  749. char *s[4]={"f","l","b","r"};
  750. int n;
  751. char ch[3];
  752. int i;
  753. for(i=0;i<4;i++)
  754. {
  755. n=0;
  756. if(sur[i]->s[1][1]==sur[i]->s[1][3])
  757. {
  758. while(sur[(i+n)%4]->s[1][1]!=sur[(i+n)%4]->s[2][2])
  759. {
  760. MoveCube(magiccube,"u",1);
  761. n++;
  762. }
  763. break;
  764. }
  765. }
  766. strcpy(ch,s[(i+n+3)%4]);
  767. MoveCube(magiccube,ch,1);
  768. strcpy(ch,s[(i+n+2)%4]);
  769. MoveCube(magiccube,ch,3);
  770. strcpy(ch,s[(i+n+3)%4]);
  771. MoveCube(magiccube,ch,1);
  772. strcpy(ch,s[(i+n)%4]);
  773. MoveCube(magiccube,ch,2);
  774. strcpy(ch,s[(i+n+3)%4]);
  775. MoveCube(magiccube,ch,3);
  776. strcpy(ch,s[(i+n+2)%4]);
  777. MoveCube(magiccube,ch,1);
  778. strcpy(ch,s[(i+n+3)%4]);
  779. MoveCube(magiccube,ch,1);
  780. strcpy(ch,s[(i+n)%4]);
  781. MoveCube(magiccube,ch,2);
  782. strcpy(ch,s[(i+n+3)%4]);
  783. MoveCube(magiccube,ch,2);
  784. while(magiccube->front.s[1][1]!=magiccube->front.s[2][2])
  785. MoveCube(magiccube,"u",1);
  786. }
  787. }

  788. void mofang::UpEdgeRestore(Cube *magiccube)
  789. {
  790. //頂棱還原
  791. while(magiccube->front.s[1][1]!=magiccube->front.s[2][2])
  792. MoveCube(magiccube,"u",1);
  793. while(!(magiccube->front.s[1][2]==magiccube->front.s[2][2]&&magiccube->left.s[1][2]==magiccube->left.s[2][2]
  794. &&magiccube->back.s[1][2]==magiccube->back.s[2][2]&&magiccube->right.s[1][2]==magiccube->right.s[2][2]))
  795. {
  796. Surface *sur[4]={&magiccube->front,&magiccube->left,&magiccube->back,&magiccube->right};
  797. char *s[4]={"f","l","b","r"};
  798. int n;
  799. char ch[3];
  800. int i;
  801. for(i=0;i<4;i++)
  802. {
  803. n=0;
  804. if(sur[i]->s[1][1]==sur[i]->s[1][2]&&sur[i]->s[1][2]==sur[i]->s[1][3])
  805. {
  806. while(sur[(i+n)%4]->s[1][1]!=sur[(i+n)%4]->s[2][2])
  807. {
  808. MoveCube(magiccube,"u",1);
  809. n++;
  810. }
  811. break;
  812. }
  813. }
  814. strcpy(ch,s[(i+n+1)%4]);
  815. MoveCube(magiccube,ch,1);
  816. MoveCube(magiccube,"u",3);
  817. MoveCube(magiccube,ch,1);
  818. MoveCube(magiccube,"u",1);
  819. MoveCube(magiccube,ch,1);
  820. MoveCube(magiccube,"u",1);
  821. MoveCube(magiccube,ch,1);
  822. MoveCube(magiccube,"u",3);
  823. MoveCube(magiccube,ch,3);
  824. MoveCube(magiccube,"u",3);
  825. MoveCube(magiccube,ch,2);
  826. while(magiccube->front.s[1][1]!=magiccube->front.s[2][2])
  827. MoveCube(magiccube,"u",1);
  828. }
  829. }

  830. void mofang::InitializationMagiccube(Cube *m)
  831. {
  832. //初始化魔方
  833. m->up.s[1][1]=(Colors)2;m->up.s[1][2]=(Colors)4;m->up.s[1][3]=(Colors)4;
  834. m->up.s[2][1]=(Colors)3;m->up.s[2][2]=(Colors)5;m->up.s[2][3]=(Colors)6;
  835. m->up.s[3][1]=(Colors)2;m->up.s[3][2]=(Colors)1;m->up.s[3][3]=(Colors)5;

  836. m->down.s[1][1]=(Colors)3;m->down.s[1][2]=(Colors)3;m->down.s[1][3]=(Colors)6;
  837. m->down.s[2][1]=(Colors)5;m->down.s[2][2]=(Colors)3;m->down.s[2][3]=(Colors)1;
  838. m->down.s[3][1]=(Colors)4;m->down.s[3][2]=(Colors)6;m->down.s[3][3]=(Colors)6;

  839. m->front.s[1][1]=(Colors)5;m->front.s[1][2]=(Colors)5;m->front.s[1][3]=(Colors)1;
  840. m->front.s[2][1]=(Colors)2;m->front.s[2][2]=(Colors)4;m->front.s[2][3]=(Colors)6;
  841. m->front.s[3][1]=(Colors)2;m->front.s[3][2]=(Colors)2;m->front.s[3][3]=(Colors)3;

  842. m->back.s[1][1]=(Colors)5;m->back.s[1][2]=(Colors)2;m->back.s[1][3]=(Colors)3;
  843. m->back.s[2][1]=(Colors)6;m->back.s[2][2]=(Colors)1;m->back.s[2][3]=(Colors)4;
  844. m->back.s[3][1]=(Colors)3;m->back.s[3][2]=(Colors)3;m->back.s[3][3]=(Colors)6;

  845. m->left.s[1][1]=(Colors)1;m->left.s[1][2]=(Colors)4;m->left.s[1][3]=(Colors)1;
  846. m->left.s[2][1]=(Colors)5;m->left.s[2][2]=(Colors)6;m->left.s[2][3]=(Colors)1;
  847. m->left.s[3][1]=(Colors)5;m->left.s[3][2]=(Colors)2;m->left.s[3][3]=(Colors)4;

  848. m->right.s[1][1]=(Colors)6;m->right.s[1][2]=(Colors)5;m->right.s[1][3]=(Colors)2;
  849. m->right.s[2][1]=(Colors)1;m->right.s[2][2]=(Colors)2;m->right.s[2][3]=(Colors)4;
  850. m->right.s[3][1]=(Colors)1;m->right.s[3][2]=(Colors)3;m->right.s[3][3]=(Colors)4;
  851. }

  852. void mofang::Exit()
  853. {
  854. //釋放所有內存空間
  855. SNode *p,*q;
  856. for(p=CD.head;p;p=q)
  857. {
  858. q=p->next;
  859. free(p->chbuf);free(p);//釋放所有內存空間
  860. }
  861. CD.num=0;
  862. CD.head=NULL;
  863. }

  864. void mofang::Input(Cube magiccube)
  865. {
  866. //從外部獲取并實例化新魔方
  867.         mf=magiccube;
  868. }

  869. void mofang::out(Cube &magiccube)
  870. {
  871. //向外部輸出當前魔方狀態
  872.         magiccube=mf;
  873. }

  874. void mofang::jieMF()
  875. {
  876. //解當前狀態魔方并輸出步驟
  877. DownCross(&mf);//底部十字
  878. DownCornerRestore(&mf);//底角還原
  879. CentreEdgeRestore(&mf);//中棱還原
  880. UpCross(&mf);//頂面十字
  881. UpSurfaceCornerRestore(&mf);//頂角面位
  882. UpCornerRestore(&mf);//頂角還原
  883. UpEdgeRestore(&mf);//頂棱還原
  884. }

  885. void mofang::out_print(char *HC)
  886. {
  887. //向外部輸出格式化后的操作列表
  888. SNode *p;
  889. int i;
  890. int d=0;

  891. for(p=CD.head,i=1;p;p=p->next,i++)
  892. {
  893. sprintf(HC+d,"%s%d\t",p->chbuf,p->times);
  894. d+=3;
  895. if(i==5)
  896. {
  897. sprintf(HC+d,"\r\n");
  898. d+=2;
  899. sprintf(HC+d,"------------------------------------\r\n");
  900. d+=38;
  901. i=0;
  902. }
  903. }
  904. sprintf(HC+d,"\r\n\n本次魔方還原一共需要%d步!\n",CD.num);
  905. cz_gs();//格式化操作CD到cz數組里
  906. Exit();//清空CD鏈表
  907. InitializationMagiccube(&mf);//初始化魔方
  908. }

  909. void mofang::cz_gs()
  910. {
  911.   //格式化操作CD到cz數組操作列表對應格式如:F=1 B=2 R=3 L=4 U=5 D=6 11表示F執行1次 13表示F執行3次
  912.   SNode *p;
  913.   int i;
  914.   for(p=CD.head,i=0;p;p=p->next,i++)
  915.   {
  916.     if(!strcmp(p->chbuf,"f"))
  917.         {
  918.       cz[i]=10+p->times;
  919.         }
  920.         if(!strcmp(p->chbuf,"b"))
  921.         {
  922.       cz[i]=20+p->times;
  923.         }
  924.         if(!strcmp(p->chbuf,"r"))
  925.         {
  926.       cz[i]=30+p->times;
  927.         }
  928.         if(!strcmp(p->chbuf,"l"))
  929.         {
  930.       cz[i]=40+p->times;
  931.         }
  932.         if(!strcmp(p->chbuf,"u"))
  933.         {
  934.       cz[i]=50+p->times;
  935.         }
  936.         if(!strcmp(p->chbuf,"d"))
  937.         {
  938.       cz[i]=60+p->times;
  939.         }
  940.   }

  941. }

  942. void mofang::cz_zx(int cz)
  943. {
  944.         //翻譯執行一個操作步驟
  945.      if(cz>=10&&cz<=14)
  946.    {
  947.       D_F(cz%10);//魔方F方向操作
  948.    }
  949.      if(cz>=20&&cz<=24)
  950.    {
  951.       D_B(cz%20);//魔方B方向操作
  952.    }
  953.           if(cz>=30&&cz<=34)
  954.    {
  955.       D_R(cz%30);//魔方R方向操作
  956.    }
  957.      if(cz>=40&&cz<=44)
  958.    {
  959.       D_L(cz%40);//魔方L方向操作
  960.    }
  961.          if(cz>=50&&cz<=54)
  962.    {
  963.       D_U(cz%50);//魔方U方向操作
  964.    }
  965.      if(cz>=60&&cz<=64)
  966.    {
  967.       D_D(cz%60);//魔方D方向操作
  968.    }
  969. }

  970. void mofang::cz_zx_f(int cz)
  971. {
  972.         //翻譯執行一個操作步驟的反操作
  973.      if(cz>=10&&cz<=14)
  974.    {
  975.       D_F(4-(cz%10));//魔方F方向操作
  976.    }
  977.      if(cz>=20&&cz<=24)
  978.    {
  979.       D_B(4-(cz%20));//魔方B方向操作
  980.    }
  981.           if(cz>=30&&cz<=34)
  982.    {
  983.       D_R(4-(cz%30));//魔方R方向操作
  984.    }
  985.      if(cz>=40&&cz<=44)
  986.    {
  987.       D_L(4-(cz%40));//魔方L方向操作
  988.    }
  989.          if(cz>=50&&cz<=54)
  990.    {
  991.       D_U(4-(cz%50));//魔方U方向操作
  992.    }
  993.      if(cz>=60&&cz<=64)
  994.    {
  995.       D_D(4-(cz%60));//魔方D方向操作
  996.    }
  997. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级黄视频 | 久久一本 | 午夜电影网址 | 亚洲精品日日夜夜 | 人人干人人玩 | 天天在线操 | 国产亚洲欧美日韩精品一区二区三区 | 欧美日一区 | 97国产在线观看 | 久久久视频在线 | 九九亚洲精品 | 亚洲日韩中文字幕一区 | 精品国产乱码久久久久久蜜柚 | 欧美日韩国产一区二区三区 | 四虎永久| 亚洲国产精品99久久久久久久久 | 国产欧美一区二区三区另类精品 | 亚洲视频免费 | 亚洲国产二区 | 免费影视在线观看 | 男人影音| 久久精品国产久精国产 | 在线观看av网站 | 美女视频网站久久 | 免费一级做a爰片久久毛片潮喷 | 成人av播放 | 日本a在线| 91久久夜色 | 亚洲三区视频 | 奇米超碰 | 亚洲一区二区av | 国产一级久久久久 | 免费一区二区三区 | 国产精品久久久乱弄 | 午夜99 | 永久免费视频 | 精品毛片| 欧美精品一区二区三区蜜桃视频 | 久久久久久网站 | 狠狠操狠狠干 | 超碰精品在线 |