Hello,大家好!我是派蒙,最近我在学习三阶魔方,我用DEV C++自制了一个关于三阶魔方的程序,其中包括了我的另一个程序:三阶魔方随机打乱公式生成器(详见我的文章:《三阶魔方随机打乱公式生成器V1.0(C++)》)。那么下面就将源代码分享给大家。
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int a[1001];
int main(){
string gn;
int b=30;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x02);
while(b--){
cout<<"=";
Sleep(80);
}
cout<<"三";
Sleep(100);
cout<<"阶";
Sleep(100);
cout<<"魔";
Sleep(100);
cout<<"方";
Sleep(100);
b=30;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x02);
while(b--){
cout<<"=";
Sleep(80);
}
// ==============================三阶魔方==============================
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);
cout<<endl<<endl;
Sleep(500);
cout<<" by 原神派蒙\n"<<endl;
Sleep(500);
cout<<" 欢迎使用本程序!"<<endl;
Sleep(1000);
system("cls");
while(1){//=========================================================================================
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"请选择您要使用的功能:"<<endl;
cout<<"(输入对应中文即可)"<<endl;
cout<<"公式\n随机打乱\n"<<endl;
cin>>gn;
system("cls");
if(gn=="公式"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"请选择章节:"<<endl;
cout<<"(输入中文即可)"<<endl;
cout<<"1.黄白小花\n2.底部十字\n3.还原底面\n4.还原侧面棱块\n5.顶部十字\n6.还原顶面\n7.做出四面凹字\n8.六面还原"<<endl;
cin>>gn;
system("cls");
if(gn=="黄白小花"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节1:黄白小花"<<endl;
cout<<"暂无教程。"<<endl;
cout<<"3秒后退出。" <<endl;
Sleep(3000);
}
if(gn=="底部十字"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节2:底部十字"<<endl;
cout<<"暂无教程。"<<endl;
cout<<"3秒后退出。" <<endl;
Sleep(3000);
}
if(gn=="还原底面"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节3:还原底面"<<endl;
cout<<"找到一个带白颜色的角块,将其置于此棱块另外两个颜色所对应的中心块中间"<<endl;
cout<<"的上方,并做公式:勾 上 回 下 做多次,直到复原该角块。";
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
if(gn=="还原侧面棱块"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节4:还原侧面棱块"<<endl;
cout<<"找到一个不带黄色的棱块,将它下方的颜色与对应的中心块对齐,若该棱块另"<<endl;
cout<<"的一颜色在右边,做公式:勾 上 回 下 将魔方整体往左转一面,继续做公式:"<<endl;
cout<<"回 顶 勾 底 做一次即可。"<<endl;
cout<<"若另一颜色在左边,做公式:回 顶 勾 底 将魔方整体往右转一面,继续:"<<endl;
cout<<"勾 上 回 下 一次即可。\n";
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
if(gn=="顶部十字"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节5:顶部十字"<<endl;
cout<<"情况一:直角"<<endl;
cout<<"将黄色构造成的直角开口对着自己的左前方,做公式上 勾 下 回 两遍"<<endl;
cout<<"情况二:直线"<<endl;
cout<<"将直线横着(水平)对着自己做公式:上 勾 下 回 一遍"<<endl;
cout<<"情况三:中心点"<<endl;
cout<<"先做公式:上 勾 下 回,接下来按照情况一操作"<<endl;
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
if(gn=="还原顶面"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节6:还原顶面"<<endl;
cout<<"做公式上 回 回 下 回 上 回 下 做多次,直到还原"<<endl;
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
if(gn=="做出四面凹字"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节7:做出四面凹字"<<endl;
cout<<"观察侧面最上面一层是否有两个颜色一样的角块在同一面,若有,将此面对准"<<endl;
cout<<"自己的右手,做公式:上 勾 下 回 下 顺 上 上 回 下 回 上 勾 下 提;"<<endl;
cout<<"若没有,做公式:顺 上 回 下 回 上 勾 下 提 上 勾 下 回 下 顺 上 提。"<<endl;
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
if(gn=="六面还原"){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"章节8:六面还原"<<endl;
cout<<"观察侧面,若四面皆为凹字,直接做公式:上 回 上 勾 上 勾 上 回 下 回 "<<endl;
cout<<"下 下 此时若并未还原且只有三面凹字,将侧面还原的那一面朝后,做公式:"<<endl;
cout<<"上 回 上 勾 上 勾 上 回 下 回 下 下 "<<endl;
cout<<"若本身就只有三面凹字,将侧面还原的那一面朝后,做公式:上 回 上 勾 上"<<endl;
cout<<"勾 上 回 下 回 下 下 "<<endl;
cout<<"(按任意键退出)"<<endl;
cin>>gn;
}
}else if(gn=="随机打乱"){//-------------------------------------------------------------------------------------
char n;
while(1){
int b,k,cnt=0;
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"请输入想要的次数:"<<endl;
cout<<"(推荐选择较大次数)"<<endl;
cin>>b;
cout<<"正在生成中......"<<endl;
Sleep(1000);
system("cls");
for(int i=1;i<=b;i++){
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"生成:"<<i<<"步 剩余:"<<b-i<<endl<<endl;
k=rand()%8;
a[i]=k;
if(k==0){
cout<<"上 ";
}
if(k==1){
cout<<"下 ";
}
if(k==2){
cout<<"顶 ";
}
if(k==3){
cout<<"底 ";
}
if(k==4){
cout<<"勾 ";
}
if(k==5){
cout<<"回 ";
}
if(k==6){
cout<<"顺 ";
}
if(k==7){
cout<<"提 ";
}
if(k==8){
cout<<"随机换一面 ";
}
Sleep(1000);
system("cls");
}
cout<<"==============================三阶魔方=============================="<<endl;
cout<<"生成完成!"<<endl;
cout<<b<<"步"<<endl;
cout<<"步骤如下:"<<endl;
for(int i=1;i<=b;i++){
if(a[i]==0){
cout<<"上 ";
}
if(a[i]==1){
cout<<"下 ";
}
if(a[i]==2){
cout<<"顶 ";
}
if(a[i]==3){
cout<<"底 ";
}
if(a[i]==4){
cout<<"勾 ";
}
if(a[i]==5){
cout<<"回 ";
}
if(a[i]==6){
cout<<"顺 ";
}
if(a[i]==7){
cout<<"提 ";
}
if(k==7){
cout<<endl<<"换面 "<<endl;
}
}
cout<<endl<<"继续生成(输入A)"<<endl;
cout<<"退出(输入B)"<<endl;
cin>>n;
if(n=='B'||n=='b'){
cout<<"欢迎下次使用!";
break;
}
system("cls");
}
}
system("cls");
}
}
效果图:
当然,我肯定不会止步于此,后期将会添加其他功能,当然也会发表在CSDN上。
--------------------------------------------------------------------------------------------------------
(转载请标明原作者)