我正在尝试在C ++中使用可回溯的迷宫。怎么了?

时间:2019-05-21 08:53:42

标签: c++ class maze

我正在尝试使用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   //...

0 个答案:

没有答案