可缩放菱形图案与javascript

时间:2018-10-21 08:42:52

标签: javascript

对javascript来说还很新,几周了。我的目标是制造可缩放的钻石。

这是我到目前为止的代码。

var board = '';
var dimondX = 4;
var dimondY = 4;
  for (y = 0; y <= dimondY; y++) {
    for(x = 0; x <= dimondX; x++) {
        if ((y == 0 || y == dimondY ) && (x == dimondX / 2 )){ 
        board += "#" }  
        else if (( y == 1 || y == 3) && (x == 3 || x ==1 )) {
        board += "#" }
        else if (( y == dimondY / 2) && (x % 2 == 0)) {
        board += "#" }
        else { 
        board += " " }
    }  
  board += "\n" 
  };
console.log(board);

使用上面的代码,菱形的开始,结尾和中间可以在任何尺寸下正常工作。但是我不知道如何缩放中间行,即开始或结束与确切中间之间的行。 Y触发器可以交替使用奇数和偶数,并且我认为这会起作用。但是X触发器需要分支到更高的维度,以至于我不知道如何表达它。

这是另一个钻石:

var board = "";
var dimondX = 8;
var dimondY = 8;
for (y = 0; y <= dimondY; y++) {
for(x = 0; x <= dimondX; x++) {
        if ((y == 0 || y == dimondY ) && (x == dimondX / 2 )){ 
        board += "#" }
        else if (( y == 1 || y == 7 )  && (x == 3 || x == 5)) {
        board += "#" }
        else if (( y == 2 || y == 6) && ((x % 2 == 0) && x > 1 && x < 8 )) {
        board += "#" }
        else if (( y == 3 || y == 5) && (x % 2 !== 0)) {
        board += "#" }
        else if (( y == dimondY / 2) && (x % 2 == 0)) {
        board += "#" }
        else { 
        board += " " }
}  
board += "\n" 
};
console.log(board);

可以看出。不需要对起始行和直接中间行进行任何操作,但是中间的所有操作都需要手动调整。第一行之后的X轴公式为:x ==(1-(dimondX / 2)||(x ==(1 +(dimondX / 2)。然后从此处开始,每个点都将具有+ 1, -1。我只是不知道如何表达。

并不是真正地寻找直接答案,而是更多的提示,甚至是“这不是可行的方向”。

1 个答案:

答案 0 :(得分:0)

感谢您的提问,我喜欢拼图,而且我真的很喜欢这一题。这是我的版本,我做了一个通用版本,长度是动态的,您可以输入任何数字

var board = '';
var N = 10;
var M = N/2;

for (y = 0; y <= N; y++) {
    for(x = 0; x <= N; x++) {

        c = Math.abs(M * -Math.floor(y/M) + y % M);
        if(c==N) c = 0;

        if(  (x >= M-c && x <= M+c) && (x % 2 == y%2) )
            board += "#";
        else
            board += " ";
    }
    board += "\n"; 
}
console.log(board);