Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: ns. Map komento

mika132 [25.05.2011 16:24:00]

#

Eli HTML löytyy <map> tagi johon voi määrittää x, y akselissa jonkinnäköisen alueen joka toimii omalla tavallaan sitten.

Löytyykö valmista / vinkkejä jos ei löydy että miten voisi tehdä tälläinen C++??

Esimerkiksi:
Piirretty kuva liittyen asiaan

Eli yläpuolella oleva linkki vie kuvaan josta selostan nyt hieman:
Harmaa alue on tietä ja mustat alueet seiniä. Punainen viiva kuvaa sitä "map" komentoa.. Eli miten tuollaisen voisi toteuttaa? Tarkistetaan sen jälkeen vain että jos tuosta kohdasta jotain löytyy niin PAM.. :D

The Alchemist [25.05.2011 17:59:04]

#

Eiköhän se ole helpointa määritellä esim. polygoniolio ja sille vain toteuttaa funktio contains(point). Sitten lätkit kuvan polygonit listaan ja looppaat listan läpi tarkistaen, löytyykö kyseinen piste (kursorin koordinaatti) jostain polygonista. Noudattaen siis täydellisesti HTML-version logiikkaa.

Tietty monista kirjastoista löytyy valmiiksi kaikki tarvittavat palaset.

Blaze [25.05.2011 19:29:03]

#

mika132: termi, jota haet, on 'törmäystarkistus' (collision detection). Sillä hakemalla luulis löytyvät materiaalia täältäkin.

mika132 [26.05.2011 18:22:56]

#

hmm.. tuossa luettuani oppaita tein tälläisen viritelmän:

namespace Game {
    static SDL_Rect wall;
    static SDL_Rect box;
    //The square
    class Square
    {
        private:
        SDL_Rect box;
        int xVel, yVel;

        public:
        Square();
        void handle_input();
        void move();
        void show();
    };
    static int SQUARE_WIDTH=100;
	static int SQUARE_HEIGHT=100;
}


Game::Square::Square()
{
    //Initialize the offsets
    box.x = 0;
    box.y = 0;

    //Set the square's dimensions
    box.w = SQUARE_WIDTH;
    box.h = SQUARE_HEIGHT;

    //Initialize the velocity
    xVel = 0;
    yVel = 0;
}
void Game::Square::move()
{
    //Move the square left or right
    box.x += xVel;

    //If the square went too far to the left or right or has collided with the wall
    if( ( box.x < 0 ) || ( box.x + SQUARE_WIDTH > RESOLUUTIO_LEVEYS ) || ( check_collision( box, wall ) ) )
    {
        //Move back
        box.x -= xVel;
    }

    //Move the square up or down
    box.y += yVel;

    //If the square went too far up or down or has collided with the wall
    if( ( box.y < 0 ) || ( box.y + SQUARE_HEIGHT > RESOLUUTIO_KORKEUS ) || ( check_collision( box, wall ) ) )
    {
        //Move back
        box.y -= yVel;
    }
}
bool Game::check_collision( SDL_Rect A, SDL_Rect B )
{
    //The sides of the rectangles
    int leftA, leftB;
    int rightA, rightB;
    int topA, topB;
    int bottomA, bottomB;

    //Calculate the sides of rect A
    leftA = A.x;
    rightA = A.x + A.w;
    topA = A.y;
    bottomA = A.y + A.h;

    //Calculate the sides of rect B
    leftB = B.x;
    rightB = B.x + B.w;
    topB = B.y;
    bottomB = B.y + B.h;
        //If any of the sides from A are outside of B
    if( bottomA <= topB )
    {
        return false;
    }

    if( topA >= bottomB )
    {
        return false;
    }

    if( rightA <= leftB )
    {
        return false;
    }

    if( leftA >= rightB )
    {
        return false;
    }

    //If none of the sides from A are outside B
    return true;
}

En nyt kuitenkaan tiedä miten saan tuon käyttöön koska oppaassa josta tuon otin ei sen tarkempaa asiasta puhuta.

jimi-kimi [26.05.2011 21:42:08]

#

http://lazyfoo.net/SDL_tutorials/lesson17/index.php

mika132 [27.05.2011 09:53:57]

#

Siis saan toimimaan nämä:

SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) );
SDL_FillRect( screen, &wall, SDL_MapRGB( screen->format, 0x77, 0x77, 0x77 ) );

mutta en näitä:

mySquare.move();
mySquare.show();

valittaa että ei ole mySquarea.. joten pistin tuon kohdan

Game::Square.move();
sitten se valittaa:
error: expected unqualified-id before '.' token

Eli miten tuo määritellään?

Spongi [27.05.2011 10:33:07]

#

Tuollahan ne on jimi-kimin linkkaaman oppaan paketissa. Ja kai ny luokkia osaat käyttää? o_O Jos et, niin mene ihmeessä jonkun c++-oppaan kimppuun.

Square mySquare;
mySquare.herpDerp();

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta