sobota, 18 lipca 2015

18 C++ Abstract Factory Pattern



main.cpp
#include <iostream>
#include "UnitFactory.h"


using namespace std;

int main()
{

    UnitFactory* unitFactory;
    Worker* worker;
    Fighter* fighter;

    unitFactory = new ElfFactory;
    worker = unitFactory->createWorker();
    fighter = unitFactory->createFighter();
    worker->draw();
    fighter->draw();

    unitFactory = new OrcFactory;
    worker = unitFactory->createWorker();
    fighter = unitFactory->createFighter();
    worker->draw();
    fighter->draw();

    delete unitFactory;
    delete worker;
    delete fighter;

    return 0;
}


UnitFactory.h
#ifndef UNITFACTORY_H
#define UNITFACTORY_H
#include "Worker.h"
#include "Fighter.h"

class UnitFactory
{
    public:
        UnitFactory() {};
        virtual ~UnitFactory() {};
        virtual Worker* createWorker()=0;
        virtual Fighter* createFighter()=0;

    protected:
    private:
};

class HumanFactory : public UnitFactory
{
    public:
        Worker* createWorker() { return new HumanWorker; };
        Fighter* createFighter() { return new HumanFighter; };

};

class OrcFactory : public UnitFactory
{
    public:
        Worker* createWorker() { return new OrcWorker; };
        Fighter* createFighter() { return new OrcFighter; };
};

class ElfFactory : public UnitFactory
{
    public:
        Worker* createWorker() { return new ElfWorker; };
        Fighter* createFighter() { return new ElfFighter; };
};


#endif // UNITFACTORY_H

Worker.h
#ifndef WORKER_H
#define WORKER_H
#include <iostream>

class Worker
{
    public:
        Worker() {};
        virtual ~Worker() {};
        virtual void draw()=0;
};

class HumanWorker : public Worker
{
    public:
        void draw() {
            std::cout << "Witaj Panie, to ja, ludzki robotnik\n";
        };
};

class OrcWorker : public Worker
{
    public:
        void draw() {
            std::cout << "Aghrrrr... Witaj Master, ja, orku\n";
        };
};

class ElfWorker : public Worker
{
    public:
        void draw() {
            std::cout << "Witaj Master, ja, Elf\n";
        };
};

#endif // WORKER_H


Fighter.cpp
#ifndef FIGHTER_H
#define FIGHTER_H
#include <iostream>

class Fighter
{
    public:
        Fighter() {};
        virtual ~Fighter() {};
        virtual void draw()=0;
};

class HumanFighter : public Fighter
{
    public:
        void draw() {
            std::cout << "Witaj Panie, to ja, ludzki Fighter\n";
        };
};

class OrcFighter : public Fighter
{
    public:
        void draw() {
            std::cout << "Aghrrrr... Maj Master, ja, orku Fighter\n";
        };
};

class ElfFighter : public Fighter
{
    public:
        void draw() {
            std::cout << "Master, ja, orku Elf Fighter\n";
        };
};


#endif // FIGHTER_H

....
G


czwartek, 16 lipca 2015

17 C++ Factory Pattern

Tym razem rozkminiamy Factory Pattern









Kody:

main.cpp
#include "Location.h"
#include "DungeonFactory.h"

using namespace std;

int main()
{
    srand(time(NULL));

    Location *location = DungeonFactory::NewLocation(0);
    location->DrawLocation();

    for (int i=0; i<50; i++)
    {
        Location *location = DungeonFactory::NewLocation(rand()%3);
        location->DrawLocation();
    }

    delete location;
    return 0;
}


środa, 15 lipca 2015

16 C++ Strategy Pattern

Wreszcie udało mi się załapać Strategy Pattern...





Kody:

main.cpp
#include <iostream>
#include "Player.h"

using namespace std;

int main()
{
    Player *player = new Player(new Topor);
    player->atakuj();
    player->wyciagnijBron(new Miecz);
    player->atakuj();
    player->wyciagnijBron(new Cep);
    player->atakuj();
    player->wyciagnijBron(new Sztylet);
    player->atakuj();

    delete player;
    player = nullptr;

    return 0;
}


player.h
#ifndef PLAYER_H
#define PLAYER_H
#include "Bron.h"
#include "Miecz.h"
#include "Topor.h"
#include "Cep.h"
#include "Sztylet.h"

class Player
{
    public:
        Player(Bron* rodzajBroni);
        ~Player();

        void wyciagnijBron(Bron* rodzajBroni);
        void atakuj();

    private:
        Bron* rodzajBroni;
};

#endif // PLAYER_H



player.cpp

#include "Player.h"

Player::Player(Bron* rodzajBroni):rodzajBroni(rodzajBroni) {}

Player::~Player()
{
    delete rodzajBroni;
}

void Player::wyciagnijBron(Bron* rodzajBroni)
{
    this->rodzajBroni=rodzajBroni;
}

void Player::atakuj()
{
    rodzajBroni->atak();
}


bron.h

#ifndef BRON_H
#define BRON_H
#include <iostream>

class Bron
{
    public:
        virtual void atak() = 0;
};
#endif // BRON_H

miecz.h

#ifndef MIECZ_H
#define MIECZ_H
#include "Bron.h"

class Miecz : public Bron
{
    public:
        Miecz();
        ~Miecz();

        virtual void atak();
};
#endif // MIECZ_H

miecz.cpp

#include "Miecz.h"
Miecz::Miecz() {}
Miecz::~Miecz() {}
void Miecz::atak()
{
    std::cout << "Atakuje mieczem...\n";
}

topor.h

#ifndef TOPOR_H
#define TOPOR_H

#include "Bron.h"

class Topor : public Bron
{
    public:
        Topor();
        ~Topor();

        virtual void atak();
};
#endif // TOPOR_H

topor.cpp

#include "Topor.h"

Topor::Topor() {}
Topor::~Topor() {}

void Topor::atak()
{
    std::cout << "Atakuje toporem...\n";
}

cep.h

#ifndef CEP_H
#define CEP_H
#include "Bron.h"

class Cep : public Bron
{
    public:
        Cep();
        ~Cep();

        virtual void atak();
};
#endif // CEP_H

cep.cpp

#include "Cep.h"

Cep::Cep() {}
Cep::~Cep() {}
void Cep::atak()
{
    std::cout << "Atakuje cepem...\n";
}

sztylet.h

#ifndef SZTYLET_H
#define SZTYLET_H
#include "Bron.h"

class Sztylet : public Bron
{
    public:
        Sztylet();
        ~Sztylet();

        virtual void atak();
};
#endif // SZTYLET_H

sztylet.cpp

#include "Sztylet.h"
Sztylet::Sztylet() {}
Sztylet::~Sztylet() {}
void Sztylet::atak()
{
    std::cout << "Atakuje sztyletem...\n";
}



...







sobota, 4 lipca 2015

Seamless stone texture using Krita

15b C++ Największa Wspólna Wartość







#include <iostream>


using namespace std;


int main(int argc, char *argv[])
{


   int a, b, t, ab;
   cin >> a >> b;
   ab = a*b;


   while (b) {
       t = b;
       b = a%b;
       a = t;
   };


   cout << (ab/=a);




   return 0;
}

G

15a C++ Liczby względnie pierwsze w przedziale





#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

   int x, y, a, b, t, p;
   cin >> x >> y >> p;

   for (int i=x; i<=y; i++) {
       a = i;
       b = p;
       while (b) {
           t = b;
           b = a%b;
           a = t;
       };
       if (a==1 && i>=p) cout << i << endl;

   }

   return 0;
}




G


Pierwszy post

W ramach mojej cierpiętniczej, ale jakże zaszczytnej drogi młodego programisty, postanowiłem zrobić bloga i wrzucać na niego swoje wypociny. Oczywiście tytuł bloga nawiązuje luźno do tytułu lektury, która za moich czasów była w szkole, teraz zapewne porzucona, choć kto wie... Na YT nie da się wrzucać pełnych kodów, więc stąd ten blog...