从小学5年级开始,我就比较喜欢玩魔方。今天闲得没事,用了一个下午加一个晚上的时间,写了个电子版的3阶魔方,自己打乱,然后再亲自还原,测试后代码没问题。不同于现实生活中的魔方,我这个电子版的3阶魔方要用键盘来玩。不同的按键代表不同的转法,按一次就转一次。代码思路类似我曾经写的推箱子小游戏,本文就不再做一些详细的代码注释。请参见往期文章:C语言数组+内存编址+推箱子小游戏中的推箱子小游戏,里面有详细的代码注释。


思路描述:一个三阶的魔方总共有6个面,每个面有9个小块。三阶魔方总共有三层。总共有54个小块。由于不能填充颜色,我分别用1,2,3,4,5,6六个数字来填充每个面。每个小块中的数字我保存到一个一维数组中的,当然代码可以更改,因为保存到一个一维数组会使程序设计起来非常的繁琐,所以也可以用多个数组来保存数字。以下是运行的效果图:

第一行介绍了按键表,一开始玩家可能会因为不熟练感到很麻烦,不过熟悉了这些按键后,拼起来会很迅速。

  • T顶层左转
  • Y顶层右转
  • R左层上转
  • F左层下转
  • U右层上转
  • J右层下转
  • B底层左转
  • N底层右转
  • G后层逆时针
  • H后层顺时针
  • E竖中间层上转
  • D竖中间层下转
  • I横中间层左转
  • K横中间层右转
  • W前层逆时针
  • O前层顺时针
  • V前后中间层逆时针
  • M前后中间层顺时针

左视图:即从左边看的图,作为辅助面
底透视图:从魔方的上面往下看,透视上面的三层直接看底面的数字,作为辅助面
后透视图:从魔方的前面往后看,透视前三层直接看后面,作为拼魔方时的辅助面
竖中间层:最左层和最右层中间的一层
横中间层:最上面一层和最下面一层中间的一层
前后中间层:最前面的一层和最后面的一层中间的一层


代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int a[55]={0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6};
void PRINT();
void Play();
int main()
{system("color 70");Play();return 0;
}
void Play()
{char input;int t;while(1){system("cls");PRINT();input = _getch();switch(input){case'T':case't':t=a[1];a[1]=a[7];a[7]=a[9];a[9]=a[3];a[3]=t;t=a[2];a[2]=a[4];a[4]=a[8];a[8]=a[6];a[6]=t;t=a[37];a[37]=a[10];a[10]=a[19];a[19]=a[30];a[30]=t;t=a[38];a[38]=a[11];a[11]=a[20];a[20]=a[29];a[29]=t;t=a[39];a[39]=a[12];a[12]=a[21];a[21]=a[28];a[28]=t;break;case'Y':case'y':t=a[3];a[3]=a[9];a[9]=a[7];a[7]=a[1];a[1]=t;t=a[6];a[6]=a[8];a[8]=a[4];a[4]=a[2];a[2]=t;t=a[30];a[30]=a[19];a[19]=a[10];a[10]=a[37];a[37]=t;t=a[29];a[29]=a[20];a[20]=a[11];a[11]=a[38];a[38]=t;t=a[28];a[28]=a[21];a[21]=a[12];a[12]=a[39];a[39]=t;break; case'R':case'r':t=a[39];a[39]=a[45];a[45]=a[43];a[43]=a[37];a[37]=t;t=a[42];a[42]=a[44];a[44]=a[40];a[40]=a[38];a[38]=t;t=a[10];a[10]=a[52];a[52]=a[34];a[34]=a[1];a[1]=t;t=a[4];a[4]=a[13];a[13]=a[49];a[49]=a[31];a[31]=t;t=a[7];a[7]=a[16];a[16]=a[46];a[46]=a[28];a[28]=t;break;case'F':case'f':t=a[37];a[37]=a[43];a[43]=a[45];a[45]=a[39];a[39]=t;t=a[38];a[38]=a[40];a[40]=a[44];a[44]=a[42];a[42]=t;t=a[1];a[1]=a[34];a[34]=a[52];a[52]=a[10];a[10]=t;t=a[31];a[31]=a[49];a[49]=a[13];a[13]=a[4];a[4]=t;t=a[28];a[28]=a[46];a[46]=a[16];a[16]=a[7];a[7]=t;break;case'U':case'u':t=a[3];a[3]=a[12];a[12]=a[54];a[54]=a[36];a[36]=t;t=a[9];a[9]=a[18];a[18]=a[48];a[48]=a[30];a[30]=t;t=a[6];a[6]=a[15];a[15]=a[51];a[51]=a[33];a[33]=t;t=a[19];a[19]=a[25];a[25]=a[27];a[27]=a[21];a[21]=t;t=a[22];a[22]=a[26];a[26]=a[24];a[24]=a[20];a[20]=t;break;case'J':case'j':t=a[36];a[36]=a[54];a[54]=a[12];a[12]=a[3];a[3]=t;t=a[30];a[30]=a[48];a[48]=a[18];a[18]=a[9];a[9]=t;t=a[33];a[33]=a[51];a[51]=a[15];a[15]=a[6];a[6]=t;t=a[21];a[21]=a[27];a[27]=a[25];a[25]=a[19];a[19]=t;t=a[20];a[20]=a[24];a[24]=a[26];a[26]=a[22];a[22]=t;break;case'B':case'b':t=a[46];a[46]=a[52];a[52]=a[54];a[54]=a[48];a[48]=t;t=a[49];a[49]=a[53];a[53]=a[51];a[51]=a[47];a[47]=t;t=a[43];a[43]=a[16];a[16]=a[25];a[25]=a[36];a[36]=t;t=a[44];a[44]=a[17];a[17]=a[26];a[26]=a[35];a[35]=t;t=a[45];a[45]=a[18];a[18]=a[27];a[27]=a[34];a[34]=t;break;case'N':case'n':t=a[48];a[48]=a[54];a[54]=a[52];a[52]=a[46];a[46]=t;t=a[47];a[47]=a[51];a[51]=a[53];a[53]=a[49];a[49]=t;t=a[36];a[36]=a[25];a[25]=a[16];a[16]=a[43];a[43]=t;t=a[35];a[35]=a[26];a[26]=a[17];a[17]=a[44];a[44]=t;t=a[34];a[34]=a[27];a[27]=a[18];a[18]=a[45];a[45]=t;break;case'G':case'g':t=a[28];a[28]=a[30];a[30]=a[36];a[36]=a[34];a[34]=t;t=a[29];a[29]=a[33];a[33]=a[35];a[35]=a[31];a[31]=t;t=a[1];a[1]=a[21];a[21]=a[48];a[48]=a[43];a[43]=t;t=a[2];a[2]=a[24];a[24]=a[47];a[47]=a[40];a[40]=t;t=a[3];a[3]=a[27];a[27]=a[46];a[46]=a[37];a[37]=t;break;case'H':case'h':t=a[34];a[34]=a[36];a[36]=a[30];a[30]=a[28];a[28]=t;t=a[31];a[31]=a[35];a[35]=a[33];a[33]=a[29];a[29]=t;t=a[43];a[43]=a[48];a[48]=a[21];a[21]=a[1];a[1]=t;t=a[40];a[40]=a[47];a[47]=a[24];a[24]=a[2];a[2]=t;t=a[37];a[37]=a[46];a[46]=a[27];a[27]=a[3];a[3]=t;break;case'E':case'e':t=a[2];a[2]=a[11];a[11]=a[53];a[53]=a[35];a[35]=t;t=a[5];a[5]=a[14];a[14]=a[50];a[50]=a[32];a[32]=t;t=a[8];a[8]=a[17];a[17]=a[47];a[47]=a[29];a[29]=t;break;case'D':case'd':t=a[35];a[35]=a[53];a[53]=a[11];a[11]=a[2];a[2]=t;t=a[32];a[32]=a[50];a[50]=a[14];a[14]=a[5];a[5]=t;t=a[29];a[29]=a[47];a[47]=a[17];a[17]=a[8];a[8]=t;break;case'I':case'i':t=a[40];a[40]=a[13];a[13]=a[22];a[22]=a[33];a[33]=t;t=a[41];a[41]=a[14];a[14]=a[23];a[23]=a[32];a[32]=t;t=a[42];a[42]=a[15];a[15]=a[24];a[24]=a[31];a[31]=t;break;case'K':case'k':t=a[33];a[33]=a[22];a[22]=a[13];a[13]=a[40];a[40]=t;t=a[32];a[32]=a[23];a[23]=a[14];a[14]=a[41];a[41]=t;t=a[31];a[31]=a[24];a[24]=a[15];a[15]=a[42];a[42]=t;break;case'W':case'w':t=a[10];a[10]=a[12];a[12]=a[18];a[18]=a[16];a[16]=t;t=a[11];a[11]=a[15];a[15]=a[17];a[17]=a[13];a[13]=t;t=a[7];a[7]=a[19];a[19]=a[54];a[54]=a[45];a[45]=t;t=a[8];a[8]=a[22];a[22]=a[53];a[53]=a[42];a[42]=t;t=a[9];a[9]=a[25];a[25]=a[52];a[52]=a[39];a[39]=t;break;case'O':case'o':t=a[16];a[16]=a[18];a[18]=a[12];a[12]=a[10];a[10]=t;t=a[13];a[13]=a[17];a[17]=a[15];a[15]=a[11];a[11]=t;t=a[45];a[45]=a[54];a[54]=a[19];a[19]=a[7];a[7]=t;t=a[42];a[42]=a[53];a[53]=a[22];a[22]=a[8];a[8]=t;t=a[39];a[39]=a[52];a[52]=a[25];a[25]=a[9];a[9]=t;break;case'V':case'v':t=a[4];a[4]=a[20];a[20]=a[51];a[51]=a[44];a[44]=t;t=a[5];a[5]=a[23];a[23]=a[50];a[50]=a[41];a[41]=t;t=a[6];a[6]=a[26];a[26]=a[49];a[49]=a[38];a[38]=t;break;case'M':case'm':t=a[44];a[44]=a[51];a[51]=a[20];a[20]=a[4];a[4]=t;t=a[41];a[41]=a[50];a[50]=a[23];a[23]=a[5];a[5]=t;t=a[38];a[38]=a[49];a[49]=a[26];a[26]=a[6];a[6]=t;break;}}
}
void PRINT()
{printf("按键表:T顶层左转 Y顶层右转 R左层上转 F左层下转 U右层上转 J右层下转 B底层左转 N底层右转 G后层逆时针 H后层顺时针\n");printf("        E竖中间层上转 D竖中间层下转 I横中间层左转 K横中间层右转 W前层逆时针 O前层顺时针 V前后中间层逆时针 M前后中间层顺时针\n"); printf("\t\t\t\t\t\t\t\t____________________________________\n");printf("\t\t\t\t\t\t\t       /           /           /           /|\n");printf("\t\t\t\t\t\t\t      /     %d     /     %d     /     %d     / |\n",a[1],a[2],a[3]);  printf("\t\t\t\t\t\t\t     /___________/___________/___________/  |      后透视图:_______________________\n"); printf("\t\t\t\t\t\t\t    /           /           /           /|  |               |       |       |       |\n");printf("\t\t\t\t\t前后中间层---------/     %d     /     %d     /     %d     / |%d |               |   %d   |   %d   |   %d   |\n",a[4],a[5],a[6],a[21],a[28],a[29],a[30]);printf("\t\t\t\t\t\t\t  /___________/___________/___________/  |  |               |_______|_______|_______|\n"); printf("\t\t\t\t\t\t\t /           /           /           /|  | /|               |       |       |       |\n");printf("\t\t\t\t\t\t\t/     %d     /     %d     /     %d     / |%d |/ |               |   %d   |   %d   |   %d   |\n",a[7],a[8],a[9],a[20],a[31],a[32],a[33]);printf("\t\t\t\t\t\t       /___________/___________/___________/  |  |  |               |_______|_______|_______|\n");printf("\t\t\t\t\t\t       |           |           |           |  | /|%d |               |       |       |       |\n",a[24]);printf("\t\t\t\t\t\t       |           |           |           |%d |/ |  |               |   %d   |   %d   |   %d   |\n",a[19],a[34],a[35],a[36]);printf("\t左视图:_______________________\t\t       |     %d     |     %d     |     %d     |  |  | /|               |_______|_______|_______|\n",a[10],a[11],a[12]);printf("\t       |       |       |       |\t       |           |           |           | /|%d |/ |\n",a[23]);printf("\t       |   %d   |   %d   |   %d   |\t       |___________|___________|___________|/ |  |  |\n",a[37],a[38],a[39]);printf("\t       |_______|_______|_______|\t       |           |           |           |  | /|%d |\n",a[27]);printf("\t       |       |       |       |\t       |           |           |           |%d |/ |  |\n",a[22]);printf("\t       |   %d   |   %d   |   %d   |横中间层-------|     %d     |     %d     |     %d     |  |  | /\n",a[40],a[41],a[42],a[13],a[14],a[15]);printf("\t       |_______|_______|_______|\t       |           |           |           | /|%d |/\n",a[26]);printf("\t       |       |       |       |\t       |___________|___________|___________|/ |  |\n");printf("\t       |   %d   |   %d   |   %d   |\t       |           |           |           |  | /\n",a[43],a[44],a[45]);printf("\t       |_______|_______|_______|\t       |           |           |           |%d |/\n",a[25]);printf("\t\t\t\t\t\t       |     %d     |     %d     |     %d     |  |\n",a[16],a[17],a[18]);printf("\t\t\t\t\t\t       |           |           |           | /\n");printf("\t\t\t\t\t\t       |___________|___________|___________|/\n");printf("\t\t\t\t\t\t\t\t     竖中间层\n\n\n\n");printf("\t\t\t\t\t\t      底透视图:_______________________\t\n");printf("\t\t\t\t\t\t               |       |       |       |\n");printf("\t\t\t\t\t\t               |   %d   |   %d   |   %d   |\n",a[46],a[47],a[48]);printf("\t\t\t\t\t\t               |_______|_______|_______|\n");printf("\t\t\t\t\t\t               |       |       |       |\n");printf("\t\t\t\t\t\t               |   %d   |   %d   |   %d   |\n",a[49],a[50],a[51]);printf("\t\t\t\t\t\t               |_______|_______|_______|\n");printf("\t\t\t\t\t\t               |       |       |       |\n");printf("\t\t\t\t\t\t               |   %d   |   %d   |   %d   |\n",a[52],a[53],a[54]);printf("\t\t\t\t\t\t               |_______|_______|_______|\n");
}

但愿我写的魔方会有人玩 /哭笑/

用C语言写一个数字版的3阶魔方相关推荐

  1. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  2. c语言数字储存于变量,用C语言写中文数字字符串转数值变量

    用C语言写中文数字字符串转数值变量 C语言写中文数字字符转数值变量 最近突发奇想:程序中要是输入一串中文数字,如"十万"就能自动识别转换成数值100000储存到变量里该多好. 也许 ...

  3. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  4. 用C语言写一个计算器

    用C语言写一个计算器,除了四则混合运算之外,还支持三角函数和绝对值等函数. PS E:\Code\PL\calc> .\a.exe abs(3*5-4^2) abs(3*5-4^2)=1.000 ...

  5. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  6. 用C语言写一个可以选择关卡添加关卡的小游戏,推箱子

    目录 关于用C语言写一个可以选择关卡的小游戏 代码部分 所有代码 Tui_Xiang_Zi.h Tui_Xiang_Zi.cpp 关卡数据 关卡数据规则 思路和建议 建议 警告 关于用C语言写一个可以 ...

  7. c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...

    用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...

  8. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  9. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!

    零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...

  10. 写一个简版 asp.net core

    动手写一个简版 asp.net core Intro 之前看到过蒋金楠老师的一篇 200 行代码带你了解 asp.net core 框架,最近参考蒋老师和 Edison 的文章和代码,结合自己对 as ...

最新文章

  1. 从最新财报中,我看到京东“四面楚歌”
  2. java nio教程_Java NIO教程
  3. ExecutorService--线程池
  4. java中file类乱,【JAVA SE基础篇】47.file类的方法
  5. 2021北京网络安全大会议程及直播观看指南
  6. LVM逻辑卷使用手册
  7. LCP 13. 寻宝
  8. 别说我不告诉你,如此养车包你把自己也养穷了……
  9. 应用层(DNS域名系统、FTP文件传送协议、远程终端协议TELNET、超文本协议HTTP)
  10. Slave_SQL_Running: No mysql同步故障解决方法
  11. 电路设计实例:232 DB9接口 引脚定义
  12. 程序员写代码时你戴耳机是为了撩妹儿吗?感觉有点酷!
  13. 海量的超赞 Linux 软件 (转载)
  14. android adb pull 文件夹,android – 我如何adb拉SD文件夹中的所有文件
  15. rasa算法_使用 Rasa 构建天气查询机器人
  16. iOS开发UI篇—ios应用数据存储方式(偏好设置)
  17. 都叫兽!你在说什么?@。@!看字幕(适配器模式)
  18. 360软件管家下载|360软件管家电脑版下载
  19. Spring注解讲解
  20. 【完结】第26课 Altium Designer20(AD20)+VESC6.4实战教程:调整丝印输出Geber文件并投板(北冥有鱼)

热门文章

  1. 三角函数回忆:三角恒等式、三角曲线、三角形的边角关系
  2. python控制led灯渐变_LED彩灯渐变控制器使用说明书
  3. CEF3 C++接口实现自定义浏览器[simple version]
  4. 《Java解惑》系列——01表达式之谜——谜题09:半斤
  5. 全面了解WDM波分复用
  6. java输出pdf(pdfptable和pdftcell)
  7. VMware虚拟机win10系统桥接模式连不上网
  8. 高德离线数据api_高德地图Android API发布V1.0.4版本,增加离线地图功能
  9. 链家网页爬虫_爬虫小技巧——以最简单的方式爬取链家房源信息
  10. 当你在进行SDK安装更新时,遇到了一些不能安装的项目时,你可以酱紫····