Pages - Menu

miércoles, 13 de agosto de 2014

Tic-Tac-Toe: Cambiado a SFML

Como ya anunciamos, se ha cambiado la biblioteca de SDL a SFML. En su mayor parte, la biblioteca SFML tiene las mismas funcionalidades que SDL por lo que con solo cambiar las partes en las que se usa SDL basta.
Ahora mostraré los cambios que se han realizado en los diferentes ficheros. Para facilitarlo, he dejado la parte de SDL comentada.

Clase Juego

En la clase juego lo primero que se ha cambiado son las variables privadas usadas en la biblioteca SDL a las necesarias para SFML:
//Variables SDL
/*
    SDL_Window *window;
    SDL_Renderer *renderer;
*/
//Variables SFML
sf::RenderWindow *window;

y ahora para crear la ventana del juego solo necesitamos:

window = new sf::RenderWindow(sf::VideoMode(anchura,altura),"Tic-Tac-Toe");

acordándonos después de eliminar la ventana.

Clase CtrlVPartida

En el controlador, ahora necesitamos un puntero a la ventana de renderizado que usaremos para obtener los eventos que recibe la misma.

sf::RenderWindow *window;

Y ahora la función para manejar eventos funciona de la siguiente manera:

sf::Event e;
while(window->pollEvent(e)){
    switch(e.type){
    case sf::Event::Closed:
        window->close();
        salir = true;
        break;
    case sf::Event::MouseButtonPressed:
        if (e.mouseButton.button == sf::Mouse::Left){
            modelo->setFicha(e.mouseButton.x/200,e.mouseButton.y/200);
        }
        break;
    }
}

Si observamos el código en la versión SDL vemos que es muy parecido.

Clase VPartida

En la vista, tenemos que cambiar las variables que guardan las imágenes en SDL a su contratarte en SFML.

//Variables SDL
/*
SDL_Renderer* renderer;
SDL_Texture* imgTablero;
SDL_Texture* imgFichaCirculo;
SDL_Texture* imgFichaCruz;
*/
//Variables SFML
sf::RenderWindow *window;
sf::Texture imgTablero;
sf::Texture imgFichaCirculo;
sf::Texture imgFichaCruz;

Y por supuesto, modificar la funcion de renderizado:

/*
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer,imgTablero, NULL, NULL);
SDL_Rect pos;
pos.w = 200;
pos.h = 200;
*/
window->clear(sf::Color::Black);
window->draw(sf::Sprite(imgTablero));
sf::Sprite ficha;
for (int i = 0; i < Partida::TAM; i++){
    //pos.y = i*200;
    for (int j = 0; j < Partida::TAM; j++){
        //pos.x = j*200;
        ficha.setPosition(j*200,i*200);
        switch (modelo->getFicha(j,i)){
        case CRUZ:
            //SDL_RenderCopy(renderer,imgFichaCruz, NULL, &pos);
            ficha.setTexture(imgFichaCruz);
            window->draw(ficha);
            break;
        case CIRCULO:
            //SDL_RenderCopy(renderer,imgFichaCirculo, NULL, &pos);
            ficha.setTexture(imgFichaCirculo);
            window->draw(ficha);
            break;
        }
   }
}
//SDL_RenderPresent(renderer);
window->display();

Si queréis ver el código podéis descargarlo desde aquí. A partir de ahora, con esta nueva biblioteca empezaremos a funcionar, hasta otra.

No hay comentarios:

Publicar un comentario