首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机移动魔方的javascript扰码器

随机移动魔方的javascript扰码器
EN

Stack Overflow用户
提问于 2017-12-09 21:00:40
回答 1查看 169关注 0票数 0

我目前正在做一个网络计时器,我对我的加扰算法有一些问题。因为这是第一个版本,我只想让扰码器是随机移动,而不是随机状态,因为它太复杂,难以制造,它将在未来的更新。我有一个算法,它从可能的可能性中选择一个随机移动的数组,然后检查两个相同的字母(或动作)是否相邻。这一切都很好,但我不知道如何添加一些可以避免出现以下情况的东西:例如," D“。被另一个移动分开的两个相同的移动是可以接受的,例如"D R D",而不是"D U D",因为它等于"D2 U",因此是一个浪费的移动。

非立方体的信息:

每一封信都代表它在读信时会被移动的脸。例如:"L U L":"L“表示左脸顺时针旋转一次,然后"U”意味着顺时针旋转上面,最后"L“再次意味着再次旋转左脸。如果一个字母后面跟着撇号,那就意味着脸应该逆时针旋转。如果后面跟着"2",就意味着脸部应该连续旋转两次。左,右,F在前面,B在后面,D在下面,U在上面

,这是代码:

代码语言:javascript
复制
		function generate_scramble() {
			var scramble_length = 20;
			var scramble = new Array();

			var possible_letters = new Array(" D", " U", " B", " F", " R", " L");
			var possible_switches = new Array("", "2", "'");

			var array_of_randoms = new Array();

			for (var i = 0; i < scramble_length; i++) {
				var random_letters = Math.floor(Math.random() * possible_letters.length);
				var random_switches = Math.floor(Math.random() * possible_switches.length);

				array_of_randoms.push(random_letters);

				if (array_of_randoms[array_of_randoms.length - 1] == array_of_randoms[array_of_randoms.length - 2]) {
					if (array_of_randoms[array_of_randoms.length - 1]  < 5) {
						array_of_randoms[array_of_randoms.length - 1]++;
					} else {	
						array_of_randoms[array_of_randoms.length - 1]--;
					}
				}
			random_letters = array_of_randoms[array_of_randoms.length - 1];
			scramble.push(possible_letters[random_letters] + possible_switches[random_switches])
			}
			document.getElementById("scramble").innerHTML = "Scramble: " + scramble.join("");
		}

		generate_scramble();
代码语言:javascript
复制
	<p id="scramble">
		Scramble: 
	</p>
	<button onclick="generate_scramble()">
		New Scramble
	</button>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-09 21:26:26

代码语言:javascript
复制
 const directions = [
   ["D", "U"],
   ["L","R"],
   ["F","B"]
 ];

 const times = ["", "'", "2"];

 const random = (array, exclude) => {
   do {
      var n = Math.floor( Math.random() * array.length );
   } while(array[n] === exclude)
   return array[n];
}

const scramble = new Array(20);
var direction;
for(var i = 0; i < scramble.length; i++){
  direction = random(directions, direction);
  scramble[i] = random(direction) + random(times);
 }

你可以减少许多错误的移动,总是改变它的移动方向。所以D,U,D不会出现,因为D和你走向相同的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47733159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档