原神稻妻荒海那里有个解谜方块,由于太过于复杂导致我一向使用的瞎猫撞死耗子解谜法失效了,遂来csdn找解谜代码。转了一圈以后决定用c++自己写一个解谜程序。
解题思路来源于这里Python-《原神》荒海雷立方机关破解一 简单说就是把四个方块编号,然后用嵌套循环一个一个试过去,遍历所有转动情况。当四个方块方向都与中央方块一致时跳出循环。 最终输出的是一串数组,表示按数组顺序敲击对应编号的石块便可完成游戏。
#include<iostream>
#include<vector>
using namespace std ;
int s[4];
int main()
{
vector<int> hitseq ;
cout << "面向中央方块发光的一面" << endl ;
cout << "零 一" << endl ;
cout << " * " << endl ;
cout << "三 二" << endl ;
cout << "石块方向对应数字为:" << endl ;
cout << "↓0 ←1 ↑2 →3"<< endl ;
cout << "零号方块方向为:(输入数字)" << endl ;
cin >> s[0] ;
cout << "一号方块方向为:(输入数字)" << endl ;
cin >> s[1] ;
cout << "二号方块方向为:(输入数字)" << endl ;
cin >> s[2] ;
cout << "三号方块方向为:(输入数字)" << endl ;
cin >> s[3] ;
void hit(int x);
for(int a=0;a<4;a++)
{
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
hit(0);
hitseq.push_back(0) ;
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
for(int b=0;b<4;b++)
{
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
hit(1);
hitseq.push_back(1) ;
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
for(int c=0;c<4;c++)
{
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
hit(2);
hitseq.push_back(2) ;
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
for(int d=0;d<4;d++)
{
hit(3);
hitseq.push_back(3) ;
if(s[0]==0&&s[1]==0&&s[0]==0&&s[0]==0)
{
break ;
}
}
}
}
}
int num = hitseq.size() ;
for(int i=0 ; i <num-3 ; i ++ )
{
if(hitseq[i]==hitseq[i+1]&&hitseq[i+1]==hitseq[i+2]&&hitseq[i+2]==hitseq[i+3])
{
hitseq.erase(hitseq.begin()+i , hitseq.begin()+i+4 );
}
}
for (int i = 0; i < hitseq.size(); i++)
{
cout << hitseq[i] << " ";
}
return 0 ;
}
void hit(int x)
{
int i=x ;
if(i==1||i==2)
{
s[i]+=1;
s[i-1]+=1;
s[i+1]+=1;
}
else if(i==0)
{
s[i]+=1;
s[3]+=1;
s[i+1]+=1;
}
else if(i==3)
{
s[i]+=1;
s[i-1]+=1;
s[0]+=1;
}
for(int j=0 ; j<4 ; j++)
{
if(s[j]==4)
{
s[j]=0;
}
}
}
|