// Bilgisayarin kagit atarken nasil dusunecegini belirler #ifndef EKLENDI_DUSUNCE_H_ #define EKLENDI_DUSUNCE_H_ #include "deger.h" #include "kagit.h" #include "sabit.h" #include #include #include #include // Bilgisayarin eldeki her bir kagidi oynama konusunda ne // kadar fikri oldugunu tutan bir dizi. typedef int Fikir[eldekiKagitSayisi]; class Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & yer) = 0; public: virtual ~Dusunce() {} virtual Dusunce * kopyala() const = 0; virtual void yeniEl() {} virtual void yeniDeste() {} virtual void gor(Kagit const &) {} virtual void solundakiAlmadi(Kagit const &) {} virtual std::string satirBasiParcasi(Deste const & /* el */) const { return ""; } virtual void fikirBildir(Fikir & fikir, Deste const & el, Deste const & yer) { fikirBildir_ozel(fikir, el, yer); } }; class Dusunce_Rastgeleci : public Dusunce { virtual void fikirBildir_ozel(Fikir & /* fikir */, Deste const & /* el */, Deste const & /* yer */); public: virtual Dusunce * kopyala() const { return new Dusunce_Rastgeleci(*this); } }; class Dusunce_TutanKagitci : public Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & yer); public: Dusunce * kopyala() const { return new Dusunce_TutanKagitci(*this); } }; class Dusunce_Valeci : public Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & yer); public: Dusunce * kopyala() const { return new Dusunce_Valeci(*this); } }; class Dusunce_DegerliKagitci : public Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & yer); public: Dusunce * kopyala() const { return new Dusunce_DegerliKagitci(*this); } }; class Dusunce_DegerliKagitEsci : public Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & yer); public: Dusunce * kopyala() const { return new Dusunce_DegerliKagitEsci(*this); } }; class Dusunce_KagitSayici : public Dusunce { // Kagitlarin kac kere ciktiklarini tutuyor typedef std::map CikanKagitlar; CikanKagitlar cikanKagitlar_; typedef std::set Gorulenler; Gorulenler gorulenler_; void saydiklariniGoster(); virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & /* yer */); public: virtual void yeniDeste(); virtual void gor(Kagit const & kagit); Dusunce * kopyala() const { return new Dusunce_KagitSayici(*this); } }; class Dusunce_SoldakineDikkatEden : public Dusunce { typedef std::vector Degerler; Degerler almadiklari_; virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & /* yer */); public: virtual void yeniEl(); virtual void solundakiAlmadi(Kagit const & kagit); Dusunce * kopyala() const { return new Dusunce_SoldakineDikkatEden(*this); } }; class Dusunce_insanaSoran : public Dusunce { virtual void fikirBildir_ozel(Fikir & fikir, Deste const & el, Deste const & /* yer */); size_t karariGiristenOku(Fikir const & fikir, Deste const & el) const; public: virtual Dusunce * kopyala() const { return new Dusunce_insanaSoran(*this); } std::string satirBasiParcasi(Deste const & el) const; virtual void gor(Kagit const & kagit); }; #endif // EKLENDI_DUSUNCE_H_