我正在尝试使用C ++可以解决回溯的迷宫。 怎么了?
//laberinto.h
#pragma once
#include <vector>
#define widths 33
#define heights 6
class Laberinto
{
public:
Laberinto();
~Laberinto();
void init();
};
//main
#include <iostream>
#include "Player.h"
#include "Laberinto.h"
#include "ConsoleControl.h"
#include <time.h>
#include <vector>
int main()
{
Player Jugador;
Laberinto Laberinto;
//Laberinto
Laberinto.init();
//Init Player
Jugador.init();
while (true)
{
//Update Player
Jugador.update();
//Render Player
Jugador.render();
ConsoleXY(0, 0);
ConsoleWait(50);
ConsoleClear();
}
system("pause");
return 0;
}
//laberinto.cpp
void Laberinto::init()
{
//logica
int laberinto[widths][heights];
for (size_t u = 0; u < heights; u++)
{
for (size_t i = 0; i < widths; i++)
{
laberinto[u][i] = 0;
}
}
struct POS
{
int x;
int y;
/*bool operator == (POS altre){
bool torna = false;
if ((x == altre.x) && (y == altre.y)) {
torna = true;
}
return torna;
}*/
};
POS posActual;
posActual.x = 0;
posActual.y = 0;
POS posLimit;
posLimit.x = widths;
posLimit.y = heights;
std::vector<POS> camino;
int random;
bool faltanCasillas = true;
bool norte = true;
bool sur = true;
bool este = true;
bool oeste = true;
int sumaCasilla = 0;
int contadorCasellas = 0;
while (contadorCasellas < widths*heights)//(faltanCasillas)
{
random = rand() % 4 + 1;//N = 1, S = 2, E = 3, O = 4;
if (posActual.y == 0)
{
norte = false;
random = rand() % 4 + 1;
}
if (posActual.y == posLimit.y)// > o ==
{
sur = false;
random = rand() % 4 + 1;
}
if (posActual.x == 0)
{
oeste = false;
random = rand() % 4 + 1;
}
if (posActual.x == posLimit.x)//> o ==
{
este = false;
random = rand() % 4 + 1;
}
if (laberinto[posActual.x][posActual.y] != 0)
{
random = rand() % 4 + 1;
}
if (!norte && !sur && !oeste && !este)
{
posActual = camino[camino.size() - 1];
camino.erase(camino.begin() + camino.size() - 1);
}
if (norte)
{
sumaCasilla = 1;
laberinto[posActual.x][posActual.y] += sumaCasilla;
if (laberinto[posActual.x][posActual.y] == 0)
{
laberinto[posActual.x][posActual.y] += 4;
posActual.y--;
sur = false;
este = true;
oeste = true;
contadorCasellas++;
//std::cout << sumaCasilla;
}
}
if (este)
{
sumaCasilla = 2;
laberinto[posActual.x][posActual.y] += sumaCasilla;
if (laberinto[posActual.x][posActual.y] == 0)
{
laberinto[posActual.x][posActual.y] += 8;
posActual.x++;
oeste = false;
sur = true;
norte = true;
contadorCasellas++;
}
}
if (sur)
{
sumaCasilla = 4;
laberinto[posActual.x][posActual.y] += sumaCasilla;
if (laberinto[posActual.x][posActual.y] == 0)
{
laberinto[posActual.x][posActual.y] += 1;
posActual.y++;
norte = false;
este = true;
oeste = true;
contadorCasellas++;
}
}
if (oeste)
{
sumaCasilla = 8;
laberinto[posActual.x][posActual.y] += sumaCasilla;
if (laberinto[posActual.x][posActual.y] == 0)
{
laberinto[posActual.x][posActual.y] += 2;
posActual.x--;
este = false;
sur = true;
norte = true;
contadorCasellas++;
}
}
camino.push_back(posActual);
for (int i = 0; i < widths; i++)
{
for (int j = 0; j < heights; j++)
{
if (laberinto[i][j] == '0')std::cout << (char)177;
else std::cout << laberinto[i][j];
}
std::cout << std::endl;
}
}
//render
ConsoleXY(posActual.x, posActual.y);
std::cout << "X";
}
它没有给出任何错误,并且可以编译,但是给出以下输出:
600000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 -858993460-858993460-858993460-858993460-858993460-858993460 //...