Donc j'essaye d'utiliser une boucle while pour que mon programme trouve un chemin à travers un tableau 8x8. Cependant, au lancement, Unity cesse de répondre et doit être fermé. Quelqu'un peut-il aider à expliquer pourquoi mon code ne fonctionne pas, car je ne vois rien de mal à le faire lorsque la condition de fin de la boucle est modifiée. Voici le code source:Pendant que la boucle provoque le blocage d'Unity
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelGenerator : MonoBehaviour {
public int counter = 0;
int LevelX = 0;
int LevelY = 0;
int[,] LevelData = new int[8,8]{
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
void Start() {
Generate();
}
void RandomPath(){
int NewDirection = Random.Range(0,3);
if(NewDirection==0){
if(LevelX!=0){
if(LevelData[LevelX-1,LevelY]==0){
counter++;
LevelData[LevelX-1,LevelY]=counter;
LevelX=LevelX-1;
}
}
}else if(NewDirection==1){
if(LevelX!=7){
if(LevelData[LevelX+1,LevelY]==0){
counter++;
LevelData[LevelX+1,LevelY]=counter;
LevelX=LevelX+1;
}
}
}
else if(NewDirection==2){
if(LevelY!=7){
if(LevelY!=0){
if(LevelData[LevelX,LevelY-1]==0){
counter++;
LevelData[LevelX,LevelY+1]=counter;
LevelY=LevelY+1;
}
}else{
counter++;
LevelData[LevelX,LevelY+1]=counter;
LevelY=LevelY+1;
}
}
}
}
void Generate(){
//picks a random location for the level to start and the second room, then generates a random path to the bottom of the level
int LevelStartX = Random.Range(0,8);
int LevelStartY = Random.Range(0,5);
counter++;
LevelData[LevelStartX,LevelStartY] = counter;
Debug.Log(LevelStartX);
Debug.Log(LevelStartY);
int Direction = Random.Range(0,3);
if(Direction==0){
if(LevelStartX==0){
counter++;
LevelData[LevelStartX+1,LevelStartY]=counter;
LevelX = LevelStartX+1;
LevelY = LevelStartY;
}else{
counter++;
LevelData[LevelStartX-1,LevelStartY]=counter;
LevelX = LevelStartX-1;
LevelY = LevelStartY;
}
}else if(Direction==1){
if(LevelStartX==7){
counter++;
LevelData[LevelStartX-1,LevelStartY]=counter;
LevelX = LevelStartX-1;
LevelY = LevelStartY;
}else{
counter++;
LevelData[LevelStartX+1,LevelStartY]=counter;
LevelX = LevelStartX+1;
LevelY = LevelStartY;
}
}else{
counter++;
LevelData[LevelStartX,LevelStartY+1]=counter;
LevelX = LevelStartX;
LevelY = LevelStartY+1;
}
while(LevelY!=7 || counter!=32){
RandomPath();
}
}
}
Cela arrive parce que 'LevelY' est ** jamais ** égal à' 7' et 'counter' est ** jamais ** égal à' 32' donc vous obtenez une boucle infinie. – Programmer
Mais le compteur est incrémenté la plupart des itérations de la boucle et LevelY est augmenté quand NewDirection est égal à 2 et l'espace au-dessus de l'actuel a un zéro dedans. – DoYouEvenFish
@DoYouEvenFish Testing est facile. Mettez un point d'arrêt après votre boucle while et exécutez votre code –