用种子生成相同的迷宫

Generate the same maze with a seed

我按照教程使用递归回溯创建了一个迷宫,效果很好。

我正在尝试创建一个人们进入同一个迷宫的游戏,如果有人赢了,它会创建一个新的迷宫,每个人当前的迷宫都会得到更新。

所以我想的是有一个种子来创建相同的迷宫,并将该种子传递给所有玩家,这样他们就可以拥有相同的迷宫。

有没有办法修改它,以便我可以给迷宫一个种子,它总是创建相同的迷宫?

这是我现在拥有的:

它使用一个单元格class (posx,posy)

class Cell(var col:Int = 0, var row: Int = 0){
    var topWall = true
    var leftWall = true
    var bottomWall = true
    var rightWall = true
    var visited = false
}
    fun createMaze(){
    var stack = Stack<Cell>()
    var current:Cell
    var next:Cell?


    for(x in 0 until COLS){
        for(y in 0 until ROWS){

            cells[x][y] = Cell(x,y)
        }
    }

    player = cells[0][0]
    exit = cells [COLS-1][ROWS-1]


    current = cells[0][0]
    current.visited = true

    do{
        next = getNeighbour(current)
        if(next != null) {
            removeWall(current, next)
            stack.push(current)
            current = next
            current.visited = true
        }else{
            current = stack.pop()
        }
    }while (!stack.empty())

}
fun getNeighbour(cell:Cell): Cell? {
    var vecinos: ArrayList<Cell> = ArrayList()
    //vecino izquierda
    if(cell.col > 0) {
        if (!cells[cell.col - 1][cell.row].visited) {
            vecinos.add(cells[cell.col - 1][cell.row])
        }
    }
    //vecino derecha
    if(cell.col < COLS - 1) {
        if (!cells[cell.col + 1][cell.row].visited) {
            vecinos.add(cells[cell.col + 1][cell.row])
        }
    }
    //vecino arriba
    if(cell.row > 0) {
        if (!cells[cell.col][cell.row - 1].visited) {
            vecinos.add(cells[cell.col ][cell.row - 1])
        }
    }
    //vecino abajo
    if(cell.row < ROWS - 1) {
        if (!cells[cell.col][cell.row + 1].visited) {
            vecinos.add(cells[cell.col][cell.row + 1])
        }
    }
    if (vecinos.size > 0) {
        var index = random.nextInt(vecinos.size)
        return vecinos[index]
    }else {
        return null
    }
}

fun removeWall(current:Cell,next:Cell){
    if (current.col == next.col && current.row == next.row +1){
        current.topWall = false
        next.bottomWall = false
    }
    if (current.col == next.col && current.row == next.row -1){
        current.bottomWall = false
        next.topWall = false
    }
    if (current.col == next.col + 1 && current.row == next.row){
        current.leftWall = false
        next.rightWall = false
    }
    if (current.col == next.col - 1 && current.row == next.row){
        current.rightWall = false
        next.leftWall = false
    }
}

如果你想通过种子来创建迷宫,那么你必须确保所有玩家都使用相同的随机数生成器。这意味着您必须提供自己的随机数生成器实现。

应用程序将使用您传递的值作为随机数生成器的种子,然后它应该为每个客户端确定性地生成相同的随机数序列。

另请注意,您永远无法更改随机数生成器的实现,除非您可以证明新的实现将生成与原始实现完全相同的数字序列。