Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL] Statki - wykrywanie klikniętych pól na mapie

Ostatnio zmodyfikowano 2013-03-13 19:21
Autor Wiadomość
sheadovas
Temat założony przez niniejszego użytkownika
[SDL] Statki - wykrywanie klikniętych pól na mapie
» 2013-03-13 19:21:35
Z góry uprzedzam że jestem początkujący jeśli chodzi o SDL. Jestem obecnie w trakcie pisania statków i obecnie jestem na pisaniu zdarzenia podczas którego program ma wyświetlać w klikniętym miejscu kwadrat(obecnie chodzi mi tylko o sprawdzenie czy wszytsko działa później to rozbuduje). Jednak wyświetla w sumie tylko 4 kwadraty (ze 100 na planszy). Moje pytanie to jak sprawic aby wszytskie pola były aktywne i aby "coś się działo".

C/C++
#include <SDL.h>
#include <SDL_image.h>
#include "funkcje.h"

SDL_Surface * screen;
SDL_Surface * tlo;
SDL_Surface * plansza;
SDL_Surface * kratka;


SDL_Event zdarzenie;


SDL_Rect pole[ 10 ];


int myszX, myszY;

const int SCRN_WDTH = 500;
const int SCRN_HGHT = 500;
const int SCRN_BPP = 32;

bool trafiony[ 10 ][ 10 ];


int main( int argc, char * args[] )
{
   
    SDL_Init( SDL_INIT_EVERYTHING );
   
    screen = SDL_SetVideoMode( SCRN_WDTH, SCRN_HGHT, SCRN_BPP, SDL_SWSURFACE );
    plansza = load_image( "images/plansza.png" );
    kratka = load_image( "images/kratka.png" );
   
    apply_surface( 0, 0, plansza, screen );
   
    //ustawienie kwadratów
    pole[ 0 ].w = 50;
    pole[ 0 ].h = 50;
    pole[ 0 ].x = 0;
    pole[ 0 ].y = 0;
    for( int i = 1; i < 10; i++ )
    {
        pole[ i ].x += 50;
        pole[ i ].y += 50;
    }
   
   
    bool wyjscie = false;
    while( !wyjscie )
    {
        SDL_Flip( screen );
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_MOUSEMOTION )
            {
                myszX = zdarzenie.motion.x;
                myszY = zdarzenie.motion.y;
            }
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
            if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
            {
                for( int x = 0; x < 10; x++ )
                {
                    for( int y = 0; y < 10; y++ )
                    {
                        if( zdarzenie.button.button == SDL_BUTTON_LEFT &&(
                        myszX >= pole[ x ].x && myszX <= pole[ x ].x + pole[ 0 ].w ) &&(
                        myszY >= pole[ y ].y && myszY <= pole[ y ].y + pole[ 0 ].h ) )
                        {
                            apply_surface( pole[ x ].x, pole[ y ].y, kratka, screen );
                            continue;
                        }
                    }
                }
               
            }
           
        }
    }
    SDL_FreeSurface( plansza );
    SDL_FreeSurface( kratka );
    SDL_Quit();
    return 0;
}

i zapomniałem wcześniej obie funkcje użyte w kodzie:
C/C++
//*****************LOAD_IMAGE*********************
SDL_Surface * load_image( std::string nazwaPliku )
{
    SDL_Surface * loadedImage = NULL;
    SDL_Surface * optimizedImage = NULL;
   
    loadedImage = IMG_Load( nazwaPliku.c_str() );
   
    if( loadedImage != NULL )
    {
        optimizedImage = SDL_DisplayFormat( loadedImage );
        SDL_FreeSurface( loadedImage );
    }
   
    return optimizedImage;
}

//***************APPLY_SURFACE********************
void apply_surface( int x, int y, SDL_Surface * source, SDL_Surface * destination )
{
    SDL_Rect offset;
    offset.x = x;
    offset.y = y;
   
    SDL_BlitSurface( source, NULL, destination, & offset );
}


Problem rozwiązany sorry za ewentualny spam
P-78241
« 1 »
  Strona 1 z 1