Fryshuset Forum
IndexIndex  ­Vanliga frågorVanliga frågor  ­SökSök  ­MedlemslistaMedlemslista  ­AnvändargrupperAnvändargrupper  ­Bli medlemBli medlem  ­Logga inLogga in  
Skapa nytt ämne   Svara på ämnetShare | 
 

 Projekt 1: Peka & klicka -äventyr

Föregående ämne Nästa ämne Go down 
FörfattareMeddelande
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Projekt 1: Peka & klicka -äventyr   ons jan 21, 2009 9:53 am

Jag har lagt upp mitt exempel på hur ett pekaklickaspel kan se ut på J: under:

J:\Läsår 08-09\Passioner\Gamer\Programmering C\pekaklicka-exempel

Men jag varnar er. Det är helt icke-objektorienterat, mycket dåligt kommenterad fulkod.

Jag hoppas få se mycket snyggare program från er sen Wink
Till överst på sidan Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Migon



Antal inlägg: 40
Join date: 08-08-29
Age: 18
Ort: In my room, building stuff.

InläggRubrik: Re: Projekt 1: Peka & klicka -äventyr   ons jan 21, 2009 10:06 am

Här är koden för de lata som inte orkar gå in på J:

Kod:
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>



int main()
{

    ///////////////////////////
    // I N I T
    ///////////////////////////
    //Variabler
        //Spelaren
        int aktivtRum = 3;

        //Världen
        int antalRum = 4;
        int antalLankarPerRum = 2;
        std::string rumFil[antalRum][2]; //[0]:rum [1]:mask
        int lank[antalRum][antalLankarPerRum][4]; //[0]:mål-rum [1]:rött [2]:grönt [3]:blått

        //Katalog för grafikfiler
        std::string graphLocation = "graphics/";

        //rum0
        rumFil[0][0] = "pos0Hangar.jpg";
        rumFil[0][1] = "pos0HangarMask.jpg";
        lank[0][0][0] = 1; lank[0][0][1] = 254; lank[0][0][2] = 0; lank[0][0][3] = 2;
        lank[0][1][0] = 3; lank[0][1][1] = 1;  lank[0][1][2] = 0; lank[0][1][3] = 254;

        //rum1
        rumFil[1][0] = "pos1Hangar.jpg";
        rumFil[1][1] = "pos1HangarMask.jpg";
        lank[1][1][0] = 0; lank[1][0][1] = 254; lank[1][0][2] = 0; lank[1][0][3] = 2;
        lank[1][0][0] = 2; lank[1][1][1] = 1;  lank[1][1][2] = 0; lank[1][1][3] = 254;

        //rum2
        rumFil[2][0] = "pos2Hangar.jpg";
        rumFil[2][1] = "pos2HangarMask.jpg";
        lank[2][0][0] = 1; lank[2][0][1] = 254; lank[2][0][2] = 0; lank[2][0][3] = 2;
        lank[2][1][0] = 3; lank[2][1][1] = 1;  lank[2][1][2] = 0; lank[2][1][3] = 254;

        //rum3
        rumFil[3][0] = "pos3Hangar.jpg";
        rumFil[3][1] = "pos3HangarMask.jpg";
        lank[3][0][0] = 0; lank[3][0][1] = 254; lank[3][0][2] = 0; lank[3][0][3] = 2;
        lank[3][1][0] = 2; lank[3][1][1] = 1;  lank[3][1][2] = 0; lank[3][1][3] = 254;

        //Rotationskänslighet
        int rotationTrigger = 50;
        float rotationSpeed = 500;


    //Skapa Fönstret
    sf::RenderWindow App(sf::VideoMode(600, 400, 32), "Click!");


    //Skapa bild som ska skrivas ut
    sf::Image rum;
    if (!rum.LoadFromFile(graphLocation + rumFil[aktivtRum][0]))
    {
        // Error...
    }

    //Skapa maskbild som ska ligga osynlig över bilden
    sf::Image mask;
    if (!mask.LoadFromFile(graphLocation + rumFil[aktivtRum][1]))
    {
        // Error...
    }

    //Skapa bild till pekaren
    sf::Image pointerImage;
    if (!pointerImage.LoadFromFile("graphics/pointer.png"))
    {
        // Error...
    }

    //Skapa bildens sprite nr 1
    sf::Sprite Sprite;
    Sprite.SetImage(rum);
    Sprite.SetColor(sf::Color(255, 255, 255));
    Sprite.SetPosition(0.f, 0.f);
    //Sprite.SetScaleX(1.625);

    //Skapa bildens sprite nr 2
    sf::Sprite Sprite2;
    Sprite2.SetImage(rum);
    Sprite2.SetColor(sf::Color(255, 255, 255));
    Sprite2.SetPosition(Sprite.GetSize().x, 0.f);
    //Sprite2.SetScaleX(1.625);

    //Skapa maskens Sprite nr 1
    sf::Sprite MaskSprite;
    MaskSprite.SetImage(mask);
    MaskSprite.SetColor(sf::Color(255, 255, 255));
    MaskSprite.SetPosition(0.f, 0.f);

    //Skapa maskens Sprite nr 2
    sf::Sprite MaskSprite2;
    MaskSprite2.SetImage(mask);
    MaskSprite2.SetColor(sf::Color(255, 255, 255));
    MaskSprite2.SetPosition(MaskSprite.GetSize().x, 0.f);

    //Pekarens Sprite
    sf::Sprite Pointer;
    Pointer.SetImage(pointerImage);
    Pointer.SetColor(sf::Color(255, 255, 255));
    Pointer.SetPosition(10,10);
    Pointer.SetSubRect(sf::IntRect(0,0,30,30));

    //Ta bort den ursprungliga muspekaren
    App.ShowMouseCursor(0);


    ///////////////////////////
    // G A M E  L O O P
    ///////////////////////////
    while (App.IsOpened())
    {

        //EVENT - HANTERING
        ////////////////////

        //Engångsklick
        sf::Event event;
        while (App.GetEvent(event))
        {
            // Close window : exit
            if (event.Type == sf::Event::Closed)
                App.Close();

            //Escape stänger av spelet
            if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Escape))
                App.Close();

            //Kolla om man klickar på färgade ytor av masken och byt bild
            if (event.Type == sf::Event::MouseButtonPressed){
                //Mask1
                if ((App.GetInput().GetMouseX()-MaskSprite.GetPosition().x)>0 && (App.GetInput().GetMouseX()-MaskSprite.GetPosition().x)<MaskSprite.GetSize().x){
                    //Länk 1
                    if (MaskSprite.GetPixel(App.GetInput().GetMouseX()-MaskSprite.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][0][1],lank[aktivtRum][0][2],lank[aktivtRum][0][3])){
                        aktivtRum = lank[aktivtRum][0][0];
                        if (!rum.LoadFromFile(graphLocation + rumFil[aktivtRum][0])){
                            // Error...
                        }
                        if (!mask.LoadFromFile(graphLocation + rumFil[aktivtRum][1])){
                            // Error...
                        }
                    }
                    //Länk 2
                    else if (MaskSprite.GetPixel(App.GetInput().GetMouseX()-MaskSprite.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][1][1],lank[aktivtRum][1][2],lank[aktivtRum][1][3])){
                        aktivtRum = lank[aktivtRum][1][0];
                        if (!rum.LoadFromFile(graphLocation + rumFil[aktivtRum][0])){
                            // Error...
                        }
                        if (!mask.LoadFromFile(graphLocation + rumFil[aktivtRum][1])){
                            // Error...
                        }
                    }
                }
                //Mask2
                else if ((App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x)>0 && (App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x)<MaskSprite2.GetSize().x){
                    if (MaskSprite2.GetPixel(App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][0][1],lank[aktivtRum][0][2],lank[aktivtRum][0][3])){
                        aktivtRum = lank[aktivtRum][0][0];
                        if (!rum.LoadFromFile(graphLocation + rumFil[aktivtRum][0])){
                            // Error...
                        }
                        if (!mask.LoadFromFile(graphLocation + rumFil[aktivtRum][1])){
                            // Error...
                        }
                    }else if (MaskSprite2.GetPixel(App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][1][1],lank[aktivtRum][1][2],lank[aktivtRum][1][3])){
                        aktivtRum = lank[aktivtRum][1][0];
                        if (!rum.LoadFromFile(graphLocation + rumFil[aktivtRum][0])){
                            // Error...
                        }
                        if (!mask.LoadFromFile(graphLocation + rumFil[aktivtRum][1])){
                            // Error...
                        }
                    }//if (MaskSprite2.GetPixel...
                }//if ((App.GetInput().GetMouseX...
            }//if (event.Type == sf::Event...
        }//while (App.GetEv..

        //Collisioner
            //Om musen nuddar kanten så ska bilden ska rotera
            if (App.GetInput().GetMouseX()< rotationTrigger){
                Sprite.Move(rotationSpeed * App.GetFrameTime(),0);
                Sprite2.Move(rotationSpeed * App.GetFrameTime(),0);
                MaskSprite.Move(rotationSpeed * App.GetFrameTime(),0);
                MaskSprite2.Move(rotationSpeed * App.GetFrameTime(),0);
            }else if (App.GetInput().GetMouseX()> (App.GetWidth()-rotationTrigger)){
                Sprite.Move(-rotationSpeed * App.GetFrameTime(),0);
                Sprite2.Move(-rotationSpeed * App.GetFrameTime(),0);
                MaskSprite.Move(-rotationSpeed * App.GetFrameTime(),0);
                MaskSprite2.Move(-rotationSpeed * App.GetFrameTime(),0);
            }

            //Om musen nuddar en färgad yta på maskbilden så ska den byta bild
            if ((App.GetInput().GetMouseX()-MaskSprite.GetPosition().x)>0 && (App.GetInput().GetMouseX()-MaskSprite.GetPosition().x)<MaskSprite.GetSize().x){
                    if (MaskSprite.GetPixel(App.GetInput().GetMouseX()-MaskSprite.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][0][1],lank[aktivtRum][0][2],lank[aktivtRum][0][3])){
                        Pointer.SetSubRect(sf::IntRect(30,0,60,30));
                    }else if (MaskSprite.GetPixel(App.GetInput().GetMouseX()-MaskSprite.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][1][1],lank[aktivtRum][1][2],lank[aktivtRum][1][3])){
                        Pointer.SetSubRect(sf::IntRect(30,0,60,30));
                    }else{
                        Pointer.SetSubRect(sf::IntRect(0,0,30,30));
                    }
            }else if ((App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x)>0 && (App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x)<MaskSprite2.GetSize().x){
                    if (MaskSprite2.GetPixel(App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][0][1],lank[aktivtRum][0][2],lank[aktivtRum][0][3])){
                        Pointer.SetSubRect(sf::IntRect(30,0,60,30));
                    }else if (MaskSprite2.GetPixel(App.GetInput().GetMouseX()-MaskSprite2.GetPosition().x, App.GetInput().GetMouseY()) == sf::Color(lank[aktivtRum][1][1],lank[aktivtRum][1][2],lank[aktivtRum][1][3])){
                        Pointer.SetSubRect(sf::IntRect(30,0,60,30));
                    }else{
                        Pointer.SetSubRect(sf::IntRect(0,0,30,30));
                    }
            }


        //Flytta rotations-sprite ifall den hamnar utanför skärmen
            //Sprite 1
            if(Sprite.GetPosition().x< -Sprite.GetSize().x){
                Sprite.SetX(Sprite2.GetPosition().x+Sprite2.GetSize().x-1);
                MaskSprite.SetX(MaskSprite2.GetPosition().x+MaskSprite2.GetSize().x);
            }else if(Sprite.GetPosition().x > Sprite.GetSize().x){
                Sprite.SetX(Sprite2.GetPosition().x-Sprite2.GetSize().x+1);
                MaskSprite.SetX(MaskSprite2.GetPosition().x-MaskSprite2.GetSize().x);
            }

            //Sprite 2
            if(Sprite2.GetPosition().x< -Sprite2.GetSize().x){
                Sprite2.SetX(Sprite.GetPosition().x+Sprite.GetSize().x-1);
                MaskSprite2.SetX(MaskSprite.GetPosition().x+MaskSprite.GetSize().x);
            }else if(Sprite2.GetPosition().x > Sprite2.GetSize().x){
                Sprite2.SetX(Sprite.GetPosition().x-Sprite.GetSize().x+1);
                MaskSprite2.SetX(MaskSprite.GetPosition().x-MaskSprite.GetSize().x);
            }


        //GÖR UPPDATERINGAR
        ///////////////////////

        //Placera muspekarbilden på rätt position
        Pointer.SetPosition(App.GetInput().GetMouseX(), App.GetInput().GetMouseY());



        //SKRIV UT
        ///////////////////
        App.Draw(Sprite);
        App.Draw(Sprite2);
        App.Draw(Pointer);
        App.Display();
    }

    ///////////////////////////
    // E N D
    ///////////////////////////
    return EXIT_SUCCESS;
}

_________________
It's not junk! It's goods assorted with no current use!
Till överst på sidan Go down
Användarens profil
 

Projekt 1: Peka & klicka -äventyr

Föregående ämne Nästa ämne Till överst på sidan 
Sida 1 av 1

Permissions of this forum:Du kan inte svara på inlägg i det här forumet
Fryshuset Gamer Forum :: Programmering :: Koder-
Skapa nytt ämne   Svara på ämnet