我有一個Python(3.4)迷宮生成器腳本,我試圖轉換爲Javascript。原來的Python腳本可以發現如下:Python迷宮生成腳本 - 轉換爲Javascript:數學差異?
import random
width = 10
height = 10
difficulty = 5
walls = []
maze = [0] * width
for i in range(height):
maze[i] = [0] * height
maze[0][1] = 1
walls.append([1, 1, 1])
print(random.random())
def addWalls():
walls.append([X + 1, Y, 1])
walls.append([X - 1, Y, 2])
walls.append([X, Y + 1, 3])
walls.append([X, Y - 1, 4])
maze[X][Y] = 1
while len(walls) > 0:
if len(walls) > difficulty:
current = len(walls) - round(random.random() * difficulty) - 1
else:
current = round(random.random() * (len(walls) - 1))
cell = walls[current]
walls.pop(current)
X = cell[0]
Y = cell[1]
Dir = cell[2]
if Dir == 1:
if X + 1 < width and maze[X][Y] == 0 and maze[X + 1][Y] == 0 and maze[X + 1][Y - 1] == 0 and maze[X + 1][Y + 1] == 0 and maze[X][Y - 1] == 0 and maze[X][Y + 1] == 0:
addWalls()
elif Dir == 2:
if X - 1 > - 1 and maze[X][Y] == 0 and maze[X - 1][Y] == 0 and maze[X - 1][Y - 1] == 0 and maze[X - 1][Y + 1] == 0 and maze[X][Y - 1] == 0 and maze[X][Y + 1] == 0:
addWalls()
elif Dir == 3:
if Y + 1 < height and maze[X][Y] == 0 and maze[X][Y + 1] == 0 and maze[X - 1][Y + 1] == 0 and maze[X + 1][Y + 1] == 0 and maze[X - 1][Y] == 0 and maze[X + 1][Y] == 0:
addWalls()
elif Dir == 4:
if Y - 1 > - 1 and maze[X][Y] == 0 and maze[X][Y - 1] == 0 and maze[X - 1][Y - 1] == 0 and maze[X + 1][Y - 1] == 0 and maze[X - 1][Y] == 0 and maze[X + 1][Y] == 0:
addWalls()
for y in range(0, height):
line = ''
for x in range(0, width):
if (maze[x][y] == 0):
line += '0'
else:
line += '1'
print(line)
腳本試圖完成同樣在Javascript然而,當工作,因爲它應該,迷宮似乎停止遍歷。見下文(0 =牆,1 =開放的迷宮空間)的片段:
function newLevel(dimensions, difficulty) {
// create arrays
walls = [
[1, 1, 1]
];
maze = [];
for (i = 0; i < dimensions - 1; i++) {
maze[i] = [0];
for (j = 0; j < dimensions - 1; j++) {
maze[i][j] = [0];
}
}
// set the cell (0; 1) as the exit
maze[0][1] = 1;
function addwalls() {
walls.push([X + 1, Y, 1]);
walls.push([X - 1, Y, 2]);
walls.push([X, Y + 1, 3]);
walls.push([X, Y - 1, 4]);
maze[X][Y] = 1;
}
while (walls.length > 0) {
current = Math.round(Math.random() * (walls.length - 1));
if (walls.length > difficulty) {
current = walls.length - Math.round(Math.random() * difficulty) - 1;
}
cell = walls[current];
walls.pop(current);
X = cell[0];
Y = cell[1];
Dir = cell[2];
if (Dir == 1 && X + 1 < dimensions && maze[X][Y] == 0 && maze[X + 1][Y] == 0 && maze[X + 1][Y - 1] == 0 && maze[X + 1][Y + 1] == 0 && maze[X][Y - 1] == 0 && maze[X][Y + 1] == 0) {
addwalls();
}
if (Dir == 2 && X - 1 > -1 && maze[X][Y] == 0 && maze[X - 1][Y] == 0 && maze[X - 1][Y - 1] == 0 && maze[X - 1][Y + 1] == 0 && maze[X][Y - 1] == 0 && maze[X][Y + 1] == 0) {
addwalls()
}
if (Dir == 3 && Y + 1 < dimensions && maze[X][Y] == 0 && maze[X][Y + 1] == 0 && maze[X - 1][Y + 1] == 0 && maze[X + 1][Y + 1] == 0 && maze[X - 1][Y] == 0 && maze[X + 1][Y] == 0) {
addwalls();
}
if (Dir == 4 && Y - 1 > -1 && maze[X][Y] == 0 && maze[X][Y - 1] == 0 && maze[X - 1][Y - 1] == 0 && maze[X + 1][Y - 1] == 0 && maze[X - 1][Y] == 0 && maze[X + 1][Y] == 0) {
addwalls();
}
}
cells = maze;
for (var row = 0; row < maze.length; row++) {
for (var col = 0; col < maze[row].length; col++) {
$('body').append(maze[row][col]);
}
$('body').append('<br />');
}
}
$(document).ready(function() {
newLevel(30, 5);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
</body>
是否有在數學中的Python和JavaScript之間進行過程中的任何重大分歧?
謝謝
編輯:非常感謝您的支持。這裏是工作腳本:
function newLevel(dimensions, difficulty) {
// create arrays
walls = [[1, 1, 1]];
maze = [];
for (i = 0; i < dimensions; i++) {
maze[i] = [0];
for (j = 0; j < dimensions; j++) {
maze[i][j] = [0];
}
}
// set the cell (0; 1) as the exit
maze[0][1] = 1;
function addwalls() {
walls.push([X + 1, Y, 1]);
walls.push([X - 1, Y, 2]);
walls.push([X, Y + 1, 3]);
walls.push([X, Y - 1, 4]);
maze[X][Y] = 1;
}
while (walls.length > 0) {
current = Math.round(Math.random() * (walls.length - 1));
if (walls.length > difficulty) {
current = walls.length - Math.round(Math.random() * difficulty) - 1;
}
cell = walls[current];
walls.splice(current, 1)[0];
X = cell[0];
Y = cell[1];
Dir = cell[2];
if (Dir == 1 && X + 1 < dimensions && maze[X][Y] == 0 && maze[X + 1][Y] == 0 && maze[X + 1][Y - 1] == 0 && maze[X + 1][Y + 1] == 0 && maze[X][Y - 1] == 0 && maze[X][Y + 1] == 0) {
addwalls();
}
if (Dir == 2 && X - 1 > - 1 && maze[X][Y] == 0 && maze[X - 1][Y] == 0 && maze[X - 1][Y - 1] == 0 && maze[X - 1][Y + 1] == 0 && maze[X][Y - 1] == 0 && maze[X][Y + 1] == 0) {
addwalls()
}
if (Dir == 3 && Y + 1 < dimensions && maze[X][Y] == 0 && maze[X][Y + 1] == 0 && maze[X - 1][Y + 1] == 0 && maze[X + 1][Y + 1] == 0 && maze[X - 1][Y] == 0 && maze[X + 1][Y] == 0) {
addwalls();
}
if (Dir == 4 && Y - 1 > - 1 && maze[X][Y] == 0 && maze[X][Y - 1] == 0 && maze[X - 1][Y - 1] == 0 && maze[X + 1][Y - 1] == 0 && maze[X - 1][Y] == 0 && maze[X + 1][Y] == 0) {
addwalls();
}
}
return cells;
}
首先,Javascript不支持整數。 – cjohnson318
@ cjohnson318這很有趣......那麼表示一個整數的最好方法是什麼?通過舍入值? – MrPutuLips