如何用Arduino生成无相邻重复动作的魔方打乱序列?
解决魔方打乱器相邻动作重复问题
你的代码核心问题是未排除上一次选中的动作,导致出现连续重复。只需记录上一次的动作编号,每次生成新动作时强制与上一次不同即可解决,同时还要修正随机范围的错误:
修改后的完整代码
char moves[6][4] = {"R ", "L' ", "B' ", "D2 ", "F ", "U2 "}; int lastMove = -1; // 初始化为无效编号,确保第一次随机不受限制 for (int i=0; i < 6; i++) { int currentMove; // 循环生成动作,直到和上一次不同 do { currentMove = random(0, 6); // 修正范围:覆盖0-5所有6个动作 } while (currentMove == lastMove); Serial.print(moves[currentMove]); lastMove = currentMove; // 更新上一次动作编号 delay(200); }
关键调整说明
- 用数组
moves统一存储所有动作,替代零散的a0-a5,代码更简洁易维护 - 新增
lastMove变量记录上一次动作的编号,初始值设为-1(不在0-5的有效范围内,保证第一次随机正常执行) - 通过
do-while循环强制生成与上一次不同的动作,彻底避免相邻重复 - 修正
random范围:原代码random(0,5)只能生成0-4,漏掉了编号5的动作,改为random(0,6)才能覆盖全部6个动作
修改后输出示例:
B' F D2 R B' U2
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

