Sorunumu su sekilde acikliyim bir santranc oyunu yapiyorum bir base clasim var tahta adinda icin 8x8 bir dinamik matris barindiriyor ve bunlarin degerlerinin donduren set ve get fonksiyonlari ve tahtayi ekrana basma fonksiyonlari var baska class olarakda oyun ve kural adinda alt siniflar var ben mainde tahta adinda bir nesne olusturuyorum ekrana basiliyor fakat alt siniflardan tahta pointerina erisinde icindeki veriler 0 oluyor yani ilk olusan nesneleri gormuyor bu sorunu ayni class icinde toplayarak cozdum fakat farklı class larda bu erisimi saglayamadim nasil bir cozum yolu incelemem gerekir

soruldu: 21 Şub, 08:51

engineers's gravatar image

engineers
356517091
cevap kabul oranı: 23%

Kodunu biraz yazabilir misin hata aldığın yeri main içindeki

(22 Şub, 03:00) ibrahim472 ibrahim472's gravatar image

#include "tahta.h"
#include"oyun.h"
Tahta::Tahta()
{
    tahta=new Node*[9];
    for(int i=1;i<=8;i++)
        tahta[i]=new Node[9];
}
Tahta::~Tahta()
{
    for(int i=1;i<=8;i++)
        delete []tahta[i];
}
void Tahta::Renk_Atamasi()
{
  for(int i=1;i<=8;i++)
    for(int j=1;j<=8;j++)
    {
        if((i+j)&2==1)
            tahta[i][j].rng=siyah;
        else
            tahta[i][j].rng=beyaz;
    }
}

void Tahta::Baslangic_Durumu()
{
    tahta[1][1] .Deger =5; tahta[8][1].Deger=-5;
    tahta[1][2].Deger=4;  tahta[8][2].Deger=-4;
    tahta[1][3].Deger=3;  tahta[8][3].Deger=-3;
    tahta[1][4].Deger=2;  tahta[8][4].Deger=-2;
    tahta[1][5].Deger=1;   tahta[8][5].Deger=-1;
    tahta[1][6].Deger=3;  tahta[8][6].Deger=-3;
    tahta[1][7].Deger=4;  tahta[8][7].Deger=-4;
    tahta[1][8].Deger=5;  tahta[8][8].Deger=-5;

    for(int i=3;i<7;i++)
        for(int j=1;j<=8;j++)
            tahta[i][j].Deger=0;
    for(int i=1;i<=8;i++)
    {
        tahta[2][i].Deger=6;
        tahta[2][i].durum=false;
        tahta[7][i].Deger=-6;
        tahta[7][i].durum= false;

    }
}
void Tahta::Ekrana_bas()
{
    for(int i=1;i<=8;i++)
    {
        for(int j=1;j<=8;j++)
        {
            cout<<"|"<<tahta[i][j].Deger<< "|"<<"\\t";
        }
        cout<<endl<<"-----------------------------------------------------------"<<"\\t"<<i<<endl;
    }
    cout<<endl<<"1--------2--------3--------4-------5-------6-------7-------8"<<endl<<endl;
}

void Tahta::setD(int i,int j,int d)
{
    tahta[i][j].Deger=d;
}
int Tahta:: getD(int i,int j)
{

    return tahta[i][j].Deger;

}
void Tahta::setR(int i,int j,renk r)
{
    tahta[i][j].rng=r;
}
renk Tahta::getR(int i ,int j)
{
    return tahta[i][j].rng;
}

void Tahta::setY(int i ,int j,bool d)
{
    tahta[i][j].durum=d;
}
bool Tahta::getY(int i,int j)
{
    return tahta[i][j].durum;
}

bool  Tahta::kuralPion(int i,int j,int i_,int j_)
{
    if(getD(i,j)>0 && i>i_) return false;
    else if(getD(i,j)<0 && i<i_) return false;
    else
    {
    if(getY(i,j)==false) /// ilk durumda ise
    {
        if(j==j_ && i!=i_)
        {
            if(getD(i,j)>0 && i+1==i_ && getD(i+1,j)<=0) return true;
            else if(getD(i,j)>0 && i+2==i_ && getD(i+2,j)<=0) return true;
            else if(getD(i,j)<0 && i-1==i_ && getD(i-1,j)>=0) return true;
            else if(getD(i,j)<0 && i-2==i_ && getD(i-2,j)>=0) return true;
            else return false;
        }
        else if(abs(i-i_)==abs(j-j_)) /// saldiri yapiyosa
        {
            if(getD(i,j)>0 && i+1==i_ && getD(i_,j_)<0) return true;
            else if(getD(i,j)<0 && i-1==i_ && getD(i_,j_)>0) return true;
            else return false;
        }
        else return false;
     }
     else
     {
        if(j==j_ && i!=i_)
        {
            if(getD(i,j)>0 && i+1==i_ && getD(i+1,j)<=0) return true;
            else if(getD(i,j)<0 && i-1==i_ && getD(i-1,j)>=0) return true;
            else return false;
        }
        else if(abs(i-i_)==abs(j-j_)) /// saldiri yapiyosa
        {
            if(getD(i,j)>0 && i+1==i_ && getD(i_,j_)<0) return true;
            else if(getD(i,j)<0 && i-1==i_ && getD(i_,j_)>0) return true;
            else return false;
        }
        else return false;
     }
    }
}
bool Tahta::kuralKale(int i,int j,int i_,int j_)
{
    if(i!=i_ && j!=j_) return false; /// capraz gidemez
    else
    {
      if(i!=i_) /// satir ustunde gezindiyse
      {
        if(i<i_)
          for(int x=i;x<=i_;x++)
          {
            if(getD(i,j)<0 && getD(x,j)<0) return false;
            else if(getD(i,j)>0 && getD(x,j)>0)return false;
          }
        else
          for(int x=i;x>=i_;x--)
          {
            if(getD(i,j)<0 && getD(x,j)<0) return false;
            else if(getD(i,j)>0 && getD(x,j)>0) return false;
          }
      }
      else if(j!=j_)
      {
        if(j<j_)
          for(int y=j;y<=j_;y++)
            {
            if(getD(i,j)<0 && getD(i,y)<0) return false;
            else if(getD(i,j)>0 && getD(i,y)>0) return false;
            }
        else
          for(int y=j;y>=j_;y--)
            {
            if(getD(i,j)<0 && getD(i,y)<0) return false;
            else if(getD(i,j)>0 && getD(i,y)>0) return false;
            }
      }
    }
    return true;
}

bool Tahta::kuralFil(int i,int j,int i_,int j_)
{
    if(i==i_ || j==j_) return false;
    else
    {
           if(i>i_)
            for(int x=1;x<=abs(i-i_);x++)
            {
                if(getD(i,j)>0 && getD(i+x,j+x)>0) return false;
                else if( getD(i,j)<0 && getD(i+x,j+x)<0) return false;
            }
           else
           {
            for(int x=1;x<=abs(i-i_);x++)
            {
                if(getD(i,j)>0 && getD(i-x,j-x)>0) return false;
                else if( getD(i,j)<0 && getD(i-x,j-x)<0) return false;
            }
           }
    }
    return true;
}
bool Tahta::kuralAt(int i,int j,int i_,int j_)
{
if(getD(i,j)>0 &&
((i+1==i_&& j+2==j_) || (i+1==i_&& j-2==j_) || (i-2==i_ && j-1==j_) ||(i-2==i_ && j+1==j_) ||
 (i-1==i_ && j+2==j_) || (i-1==i_ && j-2==j_) || (i+2==i && j-1==j_) ||(i+2==i_ && j+1==j_))&&
getD(i_,j_)<=0)
    return true;
else if(getD(i,j)<0 &&
((i+1==i_&& j+2==j_) || (i+1==i_&& j-2==j_) || (i-2==i_ && j-1==j_) ||(i-2==i_ && j+1==j_) ||
 (i-1==i_ && j+2==j_) || (i-1==i_ && j-2==j_) || (i+2==i && j-1==j_) ||(i+2==i_ && j+1==j_))&&
getD(i_,j_)>=0)
    return true;
else
    return false;
}
bool Tahta::kuralVezir(int i,int j,int i_,int j_)
{
    if( abs(i-i_) == abs(j-j_))
    {
      if(i!=i_)
      {
        if(i<i_)
          for(int x=i;x<=i_;x++)
          {
            if(getD(i,j)<0 && getD(x,j)<0) return false;
            else if(getD(i,j)>0 && getD(x,j)>0)return false;
          }
        else
          for(int x=i;x>=i_;x--)
          {
            if(getD(i,j)<0 && getD(x,j)<0) return false;
            else if(getD(i,j)>0 && getD(x,j)>0) return false;
          }
      }
      else if(j!=j_)
      {
        if(j<j_)
          for(int y=j;y<=j_;y++)
            {
            if(getD(i,j)<0 && getD(i,y)<0) return false;
            else if(getD(i,j)>0 && getD(i,y)>0) return false;
            }
        else
          for(int y=j;y>=j_;y--)
            {
            if(getD(i,j)<0 && getD(i,y)<0) return false;
            else if(getD(i,j)>0 && getD(i,y)>0) return false;
            }
      }
      else if(i!=i && j!=j)
      {
          if(i>i_)
            for(int x=1;x<=abs(i-i_);x++)
            {
                if(getD(i,j)>0 && getD(i+x,j+x)>0) return false;
                else if( getD(i,j)<0 && getD(i+x,j+x)<0) return false;
            }
           else
           {
            for(int x=1;x<=abs(i-i_);x++)
            {
                if(getD(i,j)>0 && getD(i-x,j-x)>0) return false;
                else if( getD(i,j)<0 && getD(i-x,j-x)<0) return false;
            }
           }
      }
    }
    else return false;
    return true;
}
bool Tahta::kuralSah(int i,int j,int i_,int j_)
{

    if(i==i_ && j!=j_)
    {
        if(getD(i,j)>0 &&  getD(i,j_)<=0 && abs(j-j_)==1) return true;
        else if(getD(i,j)<0 &&  getD(i,j_)>=0 && abs(j-j_)==1) return true;
        else return false;
    }
    else if(i!=i_ && j==j_)
    {
        if(getD(i,j)>0 && getD(i_,j)<=0 && abs(i-i_)==1)return true;
        else if(getD(i,j)<0 && getD(i_,j)>=0 && abs(i-i_)==1) return true;
        else return false;
    }
    else if(i!=i_ && j!=j_)
    {
        if(getD(i,j)>0 && getD(i_,j_)<=0 && abs(i-i_)==1 && abs(j-j_)==1) return true;
        else if(getD(i,j)<0 && getD(i_,j_)>=0 && abs(i-i_)==1 && abs(j-j_)==1) return true;
        else false;
    }
    else return false;

}

void Tahta::Oyna()
{
    bool Durum =true;
    bool Secim  =true;
    bool okey=true;
    do
    {
    cout<<"ilk olrak Sirasiyla  satir ve sutun ' da olan  oynamak istedigin  Cismi Gir"
    <<"Sonraki iki girdiye ise Gidilecek olan  veriyi Gir"<<endl;
    do{
    cin>>x>>y>>x_>>y_;
    if(getD(x,y)!=0){
    if(Cisim_Belirleme(x,y,x_,y_))
    {
    if(Secim==true && getD(x,y)>0)
    {
        Secim=false;
        okey=false;
        setY(x_,y_,true);
        setD(x_,y_, getD(x,y));
        setD(x,y,0);
        system("cls");
        Ekrana_bas();
        cout<<"Sira Rakipte"<<endl;

    }
    else if(Secim==false && getD(x,y)<0)
    {
        Secim=true;
        okey=false;
        setY(x_,y_,true);
        setD(x_,y_, getD(x,y));
        setD(x,y,0);
        system("cls");
        Ekrana_bas();
        cout<<"Sira Rakipte"<<endl;
    }
    else
        cout<<"Sira Sende Degil Lutfen Rakibine birak"<<endl;
    }
    else
            cout<<"islem hatali tekrar dene"<<endl;
    }
    else cout<< "Orada Eleman yok"<<endl;
    }while(okey);
    okey=true;
    /*
    if(Cisim_Belirleme(x,y,x_,y_))
    {
        setD(x_,y_, getD(x,y));
        setD(x,y,0);
        system("cls");
        Ekrana_bas();
        cout<<"Sira Rakipte"<<endl;
    }
    else
        cout<<"islem hatali tekrar dene"<<endl;
    */
    }while(Durum);
}
bool Tahta::Cisim_Belirleme(int x,int y,int x_,int y_)
{
    switch(getD(x,y))
    {
    case  6:
    case -6:
        if(kuralPion(x,y,x_,y_)) return true;
        else return false;
        break;
    case  5:
    case -5:
        if(kuralKale(x,y,x_,y_)) return true;
        else return false;
        break;
    case  4:
    case -4:
         if(kuralAt(x,y,x_,y_)) return true;
        else return false;
        break;

    case  3:
    case -3:
        if(kuralFil(x,y,x_,y_)) return true;
        else return false;
        break;

    case  2:
    case -2:
        if(kuralVezir(x,y,x_,y_)) return true;
        else return false;
        break;

    case  1:
    case -1:
        if(kuralSah(x,y,x_,y_)) return true;
        else return false;
        break;
    }
}

Burada kural bolumleri var bide oyun bide base class tahta var bunlar suan ayni main icinde ben base classi ayrinca digerleri kural ve oyun adli class acinca bu clas lar base class da olusan dinamik verilere erisemiyor bunun nedeni nedir hata degil sadece degerleri alamiyorum 0 donduruyor ayni mainde olunca sorun olmuyor .

permanent link

cevaplandı: 22 Şub, 07:47

engineers's gravatar image

engineers
356517091
cevap kabul oranı: 23%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×45

Soruldu: 21 Şub, 08:51

Görüntüleme: 214 kez

Son güncelleme: 22 Şub, 07:47

powered by BitNami OSQA