Gabs86
04/10/2008, 23:01
Hola, estoy aprendiendo SDL y C++ a la vez, así que tengo dudas muy a menudo, quiero hacer las cosas bien así que en cuanto tengo una duda dejo de programar :S. Para empezar hice un pong con C, algo muy básico y que hice en una tarde sin ningún problema, ahora estoy intentando dar un pasito más y me he puesto a hacer un tetris usando POO, aquí os dejo un fragmento del código y lo que creo que está mal:
fichero de cabecera de la clase Tablero
#ifndef TABLEROH
#define TABLEROH
#include "ladrillo.h"
class Tablero{
private:
int x,y;
SDL_Surface tablero;
Ladrillo * matriz[10][20];
public:
Tablero(int x,int y);
bool addLadrillo(int x, int y, SDL_Color color);
SDL_Surface * imprimir();
Ladrillo * getLadrillo(int x, int y);
};
#endif
fichero tablero.cpp
#include "tablero.h"
Tablero::Tablero(int x, int y){
this->x=x;
this->y=y;
SDL_Surface *tablero=SDL_CreateRGBSurface(SDL_HWSURFACE,20*10, 20*20,24,0,0,0,0);
}
bool Tablero::addLadrillo(int x, int y, SDL_Color color){
if(this->matriz[x][y]==NULL) {
this->matriz[x][y]=new Ladrillo(x,y,color);
return true;
}else{
return false;
}
}
SDL_Surface * Tablero::imprimir(){
for(int i=0;i<10;i++){
for(int j=0;j<20;j++){
if(this->matriz[i][j]!=NULL){
SDL_FillRect(&tablero, matriz[i][j]->getRect(), SDL_MapRGB(tablero.format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
}
}
}
return &tablero;
}
Ladrillo * Tablero::getLadrillo(int x, int y){
return this->matriz[x][y];
}
mi duda está en la función imprimir de la clase tablero en la linea SDL_FillRect(&tablero, matriz[i][j]->getRect(), SDL_MapRGB(tablero.format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
en mi opinión es linea debería ser esta:
[SDL_FillRect(tablero, &matriz[i][j]->getRect(), SDL_MapRGB(tablero->format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
pero si pongo la segunda linea el compilador me dice que está mal, y poniendo la primera compila, pero creo que no funciona, al menos he hecho alguna prueba y parece que peta.
pero si pongo
si necesitaís saber como está implementada la clase ladrillo aquí os dejo el archivo de cabecera y el .cpp:
archivo de cabecera ladrillo.h
#ifndef LADRILLOH
#define LADRILLOH
#include <SDL/SDL.h>
class Ladrillo{
private:
SDL_Rect rectangulo;
SDL_Color color;
public:
Ladrillo(int x, int y, SDL_Color color);
void mover();
void mover(int i);
SDL_Rect* getRect();
SDL_Color* getColor();
};
#endif
archivo ladrillo.cpp
#include "ladrillo.h"
Ladrillo::Ladrillo(int x, int y, SDL_Color color){
rectangulo.x=x;
rectangulo.y=y;
rectangulo.w=25;
rectangulo.h=25;
this->color=color;
}
void Ladrillo::mover(int i){
rectangulo.x+=(i*25);
rectangulo.y+=25;
}
void Ladrillo::mover(){
mover(0);
}
SDL_Rect* Ladrillo::getRect(){
return &rectangulo;
}
SDL_Color* Ladrillo::getColor(){
return &color;
}
Un saludo y muchas gracias!!!
fichero de cabecera de la clase Tablero
#ifndef TABLEROH
#define TABLEROH
#include "ladrillo.h"
class Tablero{
private:
int x,y;
SDL_Surface tablero;
Ladrillo * matriz[10][20];
public:
Tablero(int x,int y);
bool addLadrillo(int x, int y, SDL_Color color);
SDL_Surface * imprimir();
Ladrillo * getLadrillo(int x, int y);
};
#endif
fichero tablero.cpp
#include "tablero.h"
Tablero::Tablero(int x, int y){
this->x=x;
this->y=y;
SDL_Surface *tablero=SDL_CreateRGBSurface(SDL_HWSURFACE,20*10, 20*20,24,0,0,0,0);
}
bool Tablero::addLadrillo(int x, int y, SDL_Color color){
if(this->matriz[x][y]==NULL) {
this->matriz[x][y]=new Ladrillo(x,y,color);
return true;
}else{
return false;
}
}
SDL_Surface * Tablero::imprimir(){
for(int i=0;i<10;i++){
for(int j=0;j<20;j++){
if(this->matriz[i][j]!=NULL){
SDL_FillRect(&tablero, matriz[i][j]->getRect(), SDL_MapRGB(tablero.format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
}
}
}
return &tablero;
}
Ladrillo * Tablero::getLadrillo(int x, int y){
return this->matriz[x][y];
}
mi duda está en la función imprimir de la clase tablero en la linea SDL_FillRect(&tablero, matriz[i][j]->getRect(), SDL_MapRGB(tablero.format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
en mi opinión es linea debería ser esta:
[SDL_FillRect(tablero, &matriz[i][j]->getRect(), SDL_MapRGB(tablero->format, matriz[i][j]->getColor()->r, matriz[i][j]->getColor()->g, matriz[i][j]->getColor()->b));
pero si pongo la segunda linea el compilador me dice que está mal, y poniendo la primera compila, pero creo que no funciona, al menos he hecho alguna prueba y parece que peta.
pero si pongo
si necesitaís saber como está implementada la clase ladrillo aquí os dejo el archivo de cabecera y el .cpp:
archivo de cabecera ladrillo.h
#ifndef LADRILLOH
#define LADRILLOH
#include <SDL/SDL.h>
class Ladrillo{
private:
SDL_Rect rectangulo;
SDL_Color color;
public:
Ladrillo(int x, int y, SDL_Color color);
void mover();
void mover(int i);
SDL_Rect* getRect();
SDL_Color* getColor();
};
#endif
archivo ladrillo.cpp
#include "ladrillo.h"
Ladrillo::Ladrillo(int x, int y, SDL_Color color){
rectangulo.x=x;
rectangulo.y=y;
rectangulo.w=25;
rectangulo.h=25;
this->color=color;
}
void Ladrillo::mover(int i){
rectangulo.x+=(i*25);
rectangulo.y+=25;
}
void Ladrillo::mover(){
mover(0);
}
SDL_Rect* Ladrillo::getRect(){
return &rectangulo;
}
SDL_Color* Ladrillo::getColor(){
return &color;
}
Un saludo y muchas gracias!!!