public static bool Gerar(Palavra[] palavras, char[,] matriz) { Random rdn = new Random(); int nPalavras = 0; int tentativas = 0; for (int i = 0; i < palavras.Length; i++) { tentativas = 0; //definindo número max de tentativas while (true) { tentativas += 1; //gerando direcao e posicao inicial DirecaoECelulaInicialPalavra dl = gerarDirecaoELocalAleatorios(matriz.GetLength(0), JogoExecucao.jogo.NivelDificuldade); //verificando se a direcao e a posicao inicial são if (verificarDirecao(dl, matriz, palavras[i].TextoPalavra)) { nPalavras++; palavras[i].CelulaInicial = dl.CelulaInicial; CoordenadasPalavraEMatriz coordenadas = inserirCoordenadas(dl, palavras[i], matriz); matriz = coordenadas.Matriz; palavras[i].PosicaoPalavra = coordenadas.CoordenadaPalavra; if (nPalavras == palavras.Length) { matriz = preencherEspacosMatriz(matriz, rdn); JogoExecucao.jogo.MatrizJogo = matriz; JogoExecucao.jogo.Palavras = palavras; return(true); } else { break; } } else { tentativas++; if (tentativas >= 1000000) { MessageBox.Show("ESSA RODADA FOI FALHA, TENTEI MAIS DE 1000X MONTAR A MATRIZ, MAS NÃO OBTIVE SUCESSO :("); return(false); } } } } return(false); }
private static CoordenadasPalavraEMatriz inserirCoordenadas(DirecaoECelulaInicialPalavra dl, Palavra palavra, char[,] matriz) { CoordenadasPalavraEMatriz coordenadas = new CoordenadasPalavraEMatriz(); //criando obj coordenada palavra com tamanho de linhas igual ao de letras da palavra coordenadas.CoordenadaPalavra = new int[palavra.TextoPalavra.Length, 2]; for (int i = 0; i < palavra.TextoPalavra.Length; i++) { matriz[dl.CelulaInicial[0, 0] + (i * dl.X), dl.CelulaInicial[0, 1] + (i * dl.Y)] = palavra.TextoPalavra[i]; coordenadas.CoordenadaPalavra[i, 0] = dl.CelulaInicial[0, 0] + (i * dl.X); coordenadas.CoordenadaPalavra[i, 1] = dl.CelulaInicial[0, 1] + (i * dl.Y); } coordenadas.Matriz = matriz; return(coordenadas); }