【一】完整程序下载地址
链接:https://pan.baidu.com/s/1ANjnli5iiVTL6x5C6kDaFQ
提取码:1111
【二】源程序部分代码
REGION 开始记录
IF #Record_B THEN
IF "Logic_D".L_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 1;
ELSIF "Logic_D".M_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 2;
ELSIF "Logic_D".R_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 3;
ELSIF "Logic_D".U_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 4;
ELSIF "Logic_D".E_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 5;
ELSIF "Logic_D".D_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 6;
ELSIF "Logic_D".B_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 7;
ELSIF "Logic_D".S_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 8;
ELSIF "Logic_D".F_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 9;
ELSIF "Logic_D".L1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 10;
ELSIF "Logic_D".M1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 11;
ELSIF "Logic_D".R1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 12;
ELSIF "Logic_D".U1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 13;
ELSIF "Logic_D".E1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 14;
ELSIF "Logic_D".D1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 15;
ELSIF "Logic_D".B1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 16;
ELSIF "Logic_D".S1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 17;
ELSIF "Logic_D".F1_Bt THEN
#RandomReal_i := #RandomReal_i + 1;
#ActionRecords[#RandomReal_i] := 18;
END_IF;
END_IF;
END_REGION
"R_TRIG_DB"(CLK:="Clock_1Hz");
REGION 开始还原
IF #Restore_B THEN
#Record_B := false;
IF "R_TRIG_DB".Q THEN
#i:= #ActionRecords[#RandomReal_i];
IF #i = 1 THEN
"Logic_D".L1_Bt := TRUE;
ELSIF #i = 2 THEN
"Logic_D".M1_Bt := TRUE;
ELSIF #i = 3 THEN
"Logic_D".R1_Bt := TRUE;
ELSIF #i = 4 THEN
"Logic_D".U1_Bt := TRUE;
ELSIF #i = 5 THEN
"Logic_D".E1_Bt := TRUE;
ELSIF #i = 6 THEN
"Logic_D".D1_Bt := TRUE;
ELSIF #i = 7 THEN
"Logic_D".B1_Bt := TRUE;
ELSIF #i = 8 THEN
"Logic_D".S1_Bt := TRUE;
ELSIF #i = 9 THEN
"Logic_D".F1_Bt := TRUE;
ELSIF #i = 10 THEN
"Logic_D".L_Bt := TRUE;
ELSIF #i = 11 THEN
"Logic_D".M_Bt := TRUE;
ELSIF #i = 12 THEN
"Logic_D".R_Bt := TRUE;
ELSIF #i = 13 THEN
"Logic_D".U_Bt := TRUE;
ELSIF #i = 14 THEN
"Logic_D".E_Bt := TRUE;
ELSIF #i = 15 THEN
"Logic_D".D_Bt := TRUE;
ELSIF #i = 16 THEN
"Logic_D".B_Bt := TRUE;
ELSIF #i = 17 THEN
"Logic_D".S_Bt := TRUE;
ELSIF #i = 18 THEN
"Logic_D".F_Bt := TRUE;
END_IF;
#RandomReal_i :=#RandomReal_i -1;
END_IF;
IF #RandomReal_i = 0 THEN
#Restore_B := false;
#Record_B := TRUE;
END_IF;
END_IF;
END_REGION
REGION Reset
IF "Logic_D".Reste_Bt THEN
FOR #i := 1 TO 3 DO
FOR #q := 1 TO 3 DO
"Data_B".Color_A[#i, #q] := 1;
"Data_B".Color_B[#i, #q] := 2;
"Data_B".Color_C[#i, #q] := 3;
"Data_B".Color_D[#i, #q] := 4;
"Data_B".Color_E[#i, #q] := 5;
"Data_B".Color_F[#i, #q] := 6;
END_FOR;
END_FOR;
"Logic_D".Reste_Bt := false;
#RandomReal_i := 0;
END_IF;
END_REGION
REGION X,Y,Z旋转
END_REGION
REGION L,M,R 旋转
IF "Logic_D".M1_Bt OR "Logic_D".L1_Bt OR "Logic_D".R1_Bt THEN
IF "Logic_D".L1_Bt THEN
#q := 1;
#x := 3;
// "Logic_D".L1_Bt := false;
ELSIF "Logic_D".M1_Bt THEN
#q := 2;
#x := 2;
"Logic_D".M1_Bt := false;
ELSIF "Logic_D".R1_Bt THEN
#q := 3;
#x := 1;
// "Logic_D".R1_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_D[ #x, #i] := "Data_B".Color_C[ #q, 4-#i];
#Color_C[ #q, #i] := "Data_B".Color_A[ #q, #i];
#Color_A[ #q, #i] := "Data_B".Color_F[ #q, #i];
#Color_F[ #q, #i] := "Data_B".Color_D[ #x, 4-#i];
END_FOR;
FOR #i := 1 TO 3 DO
"Data_B".Color_D[#x, #i] := #Color_D[#x, #i];
"Data_B".Color_C[#q, #i] := #Color_C[#q, #i];
"Data_B".Color_A[#q, #i] := #Color_A[#q, #i];
"Data_B".Color_F[#q, #i] := #Color_F[#q, #i];
END_FOR;
END_IF;
IF "Logic_D".M_Bt OR "Logic_D".L_Bt OR "Logic_D".R_Bt THEN
IF "Logic_D".L_Bt THEN
#q := 1;
#x := 3;
// "Logic_D".L_Bt := false;
ELSIF "Logic_D".M_Bt THEN
#q := 2;
#x := 2;
"Logic_D".M_Bt := false;
ELSIF "Logic_D".R_Bt THEN
#q := 3;
#x := 1;
// "Logic_D".R_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_A[#q, #i] := "Data_B".Color_C[#q, #i];
#Color_C[#q, #i] := "Data_B".Color_D[#x, 4-#i];
#Color_D[#x, #i] := "Data_B".Color_F[#q, 4-#i];
#Color_F[#q, #i] := "Data_B".Color_A[#q, #i];
END_FOR;
FOR #i := 1 TO 3 DO
"Data_B".Color_A[#q, #i] := #Color_A[#q, #i] ;
"Data_B".Color_C[#q, #i] := #Color_C[#q, #i];
"Data_B".Color_D[#x, #i] := #Color_D[#x, #i];
"Data_B".Color_F[#q, #i] := #Color_F[#q, #i];
END_FOR;
END_IF;
END_REGION
REGION U,E,D 旋转
IF "Logic_D".U_Bt OR "Logic_D".E_Bt OR "Logic_D".D_Bt THEN
IF "Logic_D".U_Bt THEN
#q := 1;
// "Logic_D".U_Bt := false;
ELSIF "Logic_D".E_Bt THEN
#q := 2;
"Logic_D".E_Bt := false;
ELSIF "Logic_D".D_Bt THEN
#q := 3;
// "Logic_D".D_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_temp := "Data_B".Color_B[#i, #q];
"Data_B".Color_B[#i, #q] := "Data_B".Color_A[#i, #q];
"Data_B".Color_A[#i, #q] := "Data_B".Color_E[#i, #q];
"Data_B".Color_E[#i, #q] := "Data_B".Color_D[#i, #q];
"Data_B".Color_D[#i, #q] := #Color_temp;
END_FOR;
END_IF;
IF "Logic_D".E1_Bt OR "Logic_D".U1_Bt OR "Logic_D".D1_Bt THEN
IF "Logic_D".U1_Bt THEN
#q := 1;
// "Logic_D".U1_Bt := false;
ELSIF "Logic_D".E1_Bt THEN
#q := 2;
"Logic_D".E1_Bt := false;
ELSIF "Logic_D".D1_Bt THEN
#q := 3;
// "Logic_D".D1_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_temp := "Data_B".Color_A[#i, #q];
"Data_B".Color_A[#i, #q] := "Data_B".Color_B[#i, #q];
"Data_B".Color_B[#i, #q] := "Data_B".Color_D[#i, #q];
"Data_B".Color_D[#i, #q] := "Data_B".Color_E[#i, #q];
"Data_B".Color_E[#i, #q] := #Color_temp;
END_FOR;
END_IF;
END_REGION
REGION B,S,F 旋转
IF "Logic_D".B_Bt OR "Logic_D".S_Bt OR "Logic_D".F_Bt THEN
IF "Logic_D".F_Bt THEN
#q := 3;
#x := 1;
// "Logic_D".F_Bt := false;
ELSIF "Logic_D".S_Bt THEN
#q := 2;
#x := 2;
"Logic_D".S_Bt := false;
ELSIF "Logic_D".B_Bt THEN
#q := 1;
#x := 3;
// "Logic_D".B_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_F[#i, #x] := "Data_B".Color_B[#x, 4-#i];
#Color_B[#x, #i] := "Data_B".Color_C[#i, #q];
#Color_C[#i, #q] := "Data_B".Color_E[#q, 4-#i];
#Color_E[#q, #i] := "Data_B".Color_F[#i, #x];
END_FOR;
FOR #i := 1 TO 3 DO
"Data_B".Color_F[#i, #x] := #Color_F[#i, #x];
"Data_B".Color_B[#x, #i] := #Color_B[#x, #i];
"Data_B".Color_C[#i, #q] := #Color_C[#i, #q];
"Data_B".Color_E[#q, #i] := #Color_E[#q, #i];
END_FOR;
END_IF;
IF "Logic_D".B1_Bt OR "Logic_D".S1_Bt OR "Logic_D".F1_Bt THEN
IF "Logic_D".F1_Bt THEN
#q := 3;
#x := 1;
// "Logic_D".F1_Bt := false;
ELSIF "Logic_D".S1_Bt THEN
#q := 2;
#x := 2;
"Logic_D".S1_Bt := false;
ELSIF "Logic_D".B1_Bt THEN
#q := 1;
#x := 3;
// "Logic_D".B1_Bt := false;
END_IF;
FOR #i := 1 TO 3 DO
#Color_B[#x, 4 - #i]:= "Data_B".Color_F[#i, #x];
#Color_C[#i, #q]:= "Data_B".Color_B[#x, #i];
#Color_E[#q, 4 - #i] := "Data_B".Color_C[#i, #q];
#Color_F[#i, #x] := "Data_B".Color_E[#q, #i] ;
END_FOR;
FOR #i := 1 TO 3 DO
"Data_B".Color_F[#i, #x] := #Color_F[#i, #x];
"Data_B".Color_B[#x, 4 - #i] := #Color_B[#x, 4 - #i];
"Data_B".Color_C[#i, #q] := #Color_C[#i, #q];
"Data_B".Color_E[#q, 4 - #i] := #Color_E[#q, 4 - #i];
END_FOR;
END_IF;
END_REGION
REGION 面旋转
IF "Logic_D".F_Bt OR "Logic_D".F1_Bt THEN
#Color_temp1 := "Data_B".Color_A;
END_IF;
IF "Logic_D".R_Bt OR "Logic_D".R1_Bt THEN
#Color_temp1 := "Data_B".Color_B;
END_IF;
IF "Logic_D".U_Bt OR "Logic_D".U1_Bt THEN
#Color_temp1 := "Data_B".Color_C;
END_IF;
IF "Logic_D".B_Bt OR "Logic_D".B1_Bt THEN
#Color_temp1 := "Data_B".Color_D;
END_IF;
IF "Logic_D".L_Bt OR "Logic_D".L1_Bt THEN
#Color_temp1 := "Data_B".Color_E;
END_IF;
IF "Logic_D".D_Bt OR "Logic_D".D1_Bt THEN
#Color_temp1 := "Data_B".Color_F;
END_IF;
////////////////////赋初始值
#Color_M[1] := #Color_temp1[1, 1];
#Color_M[2] := #Color_temp1[3, 1];
#Color_M[3] := #Color_temp1[3, 3];
#Color_M[4] := #Color_temp1[1, 3];
#Color_M[5] := #Color_temp1[2, 1];
#Color_M[6] := #Color_temp1[3, 2];
#Color_M[7] := #Color_temp1[2, 3];
#Color_M[8] := #Color_temp1[1, 2];
////////////////////值正旋
IF "Logic_D".L_Bt OR "Logic_D".R1_Bt OR "Logic_D".U1_Bt OR "Logic_D".D_Bt OR "Logic_D".F_Bt OR "Logic_D".B1_Bt THEN
#Color_temp1[1,1]:= #Color_M[4];
#Color_temp1[3, 1]:= #Color_M[1];
#Color_temp1[3, 3]:= #Color_M[2];
#Color_temp1[1, 3]:= #Color_M[3];
#Color_temp1[2, 1]:= #Color_M[8];
#Color_temp1[3, 2]:= #Color_M[5];
#Color_temp1[2, 3] := #Color_M[6];
#Color_temp1[1, 2]:= #Color_M[7];
END_IF;
////////////////////值反旋
IF "Logic_D".L1_Bt OR "Logic_D".R_Bt OR "Logic_D".U_Bt OR "Logic_D".D1_Bt OR "Logic_D".F1_Bt OR "Logic_D".B_Bt THEN
#Color_temp1[1, 1] := #Color_M[2];
#Color_temp1[3, 1] := #Color_M[3];
#Color_temp1[3, 3] := #Color_M[4];
#Color_temp1[1, 3] := #Color_M[1];
#Color_temp1[2, 1] := #Color_M[6];
#Color_temp1[3, 2] := #Color_M[7];
#Color_temp1[2, 3] := #Color_M[8];
#Color_temp1[1, 2] := #Color_M[5];
END_IF;
////////////////////值回传
IF "Logic_D".F_Bt OR "Logic_D".F1_Bt THEN
"Data_B".Color_A := #Color_temp1;
"Logic_D".F_Bt := false;
"Logic_D".F1_Bt := false;
END_IF;
IF "Logic_D".R_Bt OR "Logic_D".R1_Bt THEN
"Data_B".Color_B := #Color_temp1 ;
"Logic_D".R_Bt := false;
"Logic_D".R1_Bt := false;
END_IF;
IF "Logic_D".U_Bt OR "Logic_D".U1_Bt THEN
"Data_B".Color_C := #Color_temp1;
"Logic_D".U_Bt := false;
"Logic_D".U1_Bt := false;
END_IF;
IF "Logic_D".B_Bt OR "Logic_D".B1_Bt THEN
"Data_B".Color_D := #Color_temp1;
"Logic_D".B_Bt := false;
"Logic_D".B1_Bt := false;
END_IF;
IF "Logic_D".L_Bt OR "Logic_D".L1_Bt THEN
"Data_B".Color_E := #Color_temp1;
"Logic_D".L_Bt := false;
"Logic_D".L1_Bt := false;
END_IF;
IF "Logic_D".D_Bt OR "Logic_D".D1_Bt THEN
"Data_B".Color_F := #Color_temp1 ;
"Logic_D".D_Bt := false;
"Logic_D".D1_Bt := false;
END_IF;
END_REGION
REGION 打乱
IF #i_Set < 10 THEN
#i := "LGF_RandomReal"(minValue := 1, maxValue := 9, error => #"_bool_out_", statusID => #"_uint_out_", status => #"_word_out_");
#i_Set := #i_Set + 1;
IF #i = 1 THEN
"Logic_D".L_Bt := TRUE;
ELSIF #i = 2 THEN
"Logic_D".M_Bt := TRUE;
ELSIF #i = 3 THEN
"Logic_D".R_Bt := TRUE;
ELSIF #i = 4 THEN
"Logic_D".U_Bt := TRUE;
ELSIF #i = 5 THEN
"Logic_D".E_Bt := TRUE;
ELSIF #i = 6 THEN
"Logic_D".D_Bt := TRUE;
ELSIF #i = 7 THEN
"Logic_D".B_Bt := TRUE;
ELSIF #i = 8 THEN
"Logic_D".S_Bt := TRUE;
ELSIF #i = 9 THEN
"Logic_D".F_Bt := TRUE;
END_IF;
END_IF;
END_REGION
(感谢程序作者: 狂奔的蜗牛)
往期 · 推荐
分享、在看与点赞,至少我要拥有一个吧