Jump to content

[Resolvido] vector bidimensional, duvida de código, erro


luismsantana
 Share

Recommended Posts

boa noite,

estou a tentar fazer um tabuleiro de jogo, uma mina! O vector contem outro vector com objectos blocos! Consigo criá-lo ... mas depois não o consigo voltar a apresentar no ecrã, dá erro "Expression: vector subscript out of range" .. vejam se me conseguem ajudar a encontrar o bug, por favor!

#pragma once
#include "Minerio.h"
#include "consola1.h"
class Blocos{
 Minerio tipoMinerio;
protected:
 bool existenciaMinerio;
 bool existeAlgo;
 bool permiteMineiro;
 Consola c;
public:
 //
 Blocos();
 ~Blocos();
 void desenhaPedra(int x, int y);
};

//subclasse de Bloco (Pedra)
class Pedra:public Blocos{
//

public:
 Pedra();
 ~Pedra();
 void setPermiteMineiro();
 void setPedra(){
 existeAlgo = true;
}
void setExistenciaMinerio();
void desenhaPedra(int x, int y);

//
};


#pragma once

#include "Mineiro.h"
#include "consola1.h"
#include "Blocos.h"
//#include "Material.h"
#include <iostream>

using namespace std;

class Jogo
{
 vector< vector<Blocos> >mina;
 //Pedra p;
 Consola c;
 Mineiro mineiro;
 string nome;
 int linha;
 int coluna;
 int dificuldade;
 int visibilidade;
public:
 Jogo(string nome, int linha, int coluna, int dificuldade);
 Jogo(void);
 ~Jogo(void);

 void comecaJogo();
 void desenhaMineiro();
 void desenhaTabuleiro(float x, float y);
 void desenhaMina(float x, float y);
};

#include "Blocos.h"
#include "consola1.h"

Blocos::Blocos(){

}

Blocos::~Blocos(){

}

void Blocos::desenhaPedra(int x, int y){
 c.gotoxy(x,y);
 cout << (char) 218 << (char) 196 << (char) 196 << (char) 196 << (char) 196 << (char) 191 << '\n';
 c.gotoxy(x,y+1);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+2);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+3);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+4);
 cout << (char) 192 << (char) 196 << (char) 196 << (char) 196 << (char) 196 << (char) 217 << '\n';
}

Pedra::Pedra(){

}

Pedra::~Pedra(){

}

void Pedra::setPermiteMineiro(){
permiteMineiro = false;
}

void Pedra::setExistenciaMinerio(){
 existenciaMinerio = false;
}

void Pedra::desenhaPedra(int x, int y){
 c.gotoxy(x,y);
 cout << (char) 218 << (char) 196 << (char) 196 << (char) 196 << (char) 196 << (char) 191 << '\n';
 c.gotoxy(x,y+1);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+2);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+3);
 cout << (char) 179 << (char) 219 << (char) 219 << (char) 219 << (char) 219 << (char) 179 << '\n';
 c.gotoxy(x,y+4);
 cout << (char) 192 << (char) 196 << (char) 196 << (char) 196 << (char) 196 << (char) 217 << '\n';
}
Link to comment
Share on other sites


void Jogo::desenhaTabuleiro(float x, float y){ // este método serve para desenhar o tabuleiro (é onde acontece o erro)
      c.clrscr();

      for(int i=x, indiceX=0; indiceX<linha; i=i+6, indiceX++){
           for(int j=y, indiceY=0; indiceY<coluna; j=j+5, indiceY++){ //o i e o j servem para determinar onde serão desenhadas as pedras
              mina[indiceX][indiceY].desenhaPedra(i, j);

           }
      }
}

void Jogo::desenhaMina(float x, float y){ // este metodo serve para desenhar a mina pela primeira vez e guardá-la no vector
         int n;

        for(int i=x, indiceX=0; indiceX<linha; i=i+6, ++indiceX){
              vector<Blocos>tempLinha;

              for(int j=y, indiceY=0; indiceY<coluna; j=j+5, ++indiceY){

                    n=rand()%100;

                    if(n <=30 ){

                        Pedra pedra;

                        pedra.desenhaPedra(i, j);
                        tempLinha.push_back(pedra);
//p.setExistenciaMinerio();
                   }

             }
            mina.push_back(tempLinha);
            tempLinha.clear();

//c.gotoxy(y++, i);
       }
}

Edited by thoga31
Correcção do GeSHi
Link to comment
Share on other sites

a pedra vai ser desenhada na coordenada dada por x e y ...

i=x, j= y

.... desenhaPedra(i, y);

o erro é "Exp<b></b>ression: vector subscript out of range" ... dá-se no 2º for:

void Jogo::desenhaTabuleiro(float x, float y){
     c.clrscr();

     for(int i=x, indiceX=0; indiceX<linha; i=i+6, indiceX++){
            for(int j=y, indiceY=0; indiceY<coluna; j=j+5, indiceY++){
                 mina[indiceX][indiceY].desenhaPedra(i, j);

            }
      }
}

parece-me que, apesar de estar a fazer push_back dos elementos, o vector está vazio :s

ando há dias à volta disto e nao consigo resolver ... :s

tambem pode ser da forma como estou a fazer o acesso ao vector bidimensional.. mas conforme pesquisei, é assim que se faz :s

Edited by thoga31
Correcção do GeSHi
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.