SUDOKU OYUNUNUN C++ TA GERÇEKLENMESİ

Yayınlandı: Haziran 20, 2010 / Algoritmalar, C/C++
Etiketler:, , , , , , , , , , ,

SUDOKU OYUNU BİLİNDİĞİ GİBİ ZEVKLİ BİR BULMACA OYUNUDUR.BU BULMACADA KURAL YATAY VE DİKEY BİR ŞEKİLDE AYRICA HER 3*3 MATRİSLERİN İÇERİSİNDE Kİ TÜM RAKAMLAR DA 1-9 ARASINDA OLMALIDIR BUNU RANDOM OLARAK TA YAPILABİLİR.

#include<iostream>
using namespace std;

int p[9][9],q[9][2],r[9][2];

void eliminate(int a,int b)
{
   if(a>0) 
    {
       for(int x=0;x<a;x++)    
          {
             for(int i=0;i<9;i++) 
               if(q[i][0]==p[x][b])
               {
                     q[i][1]=1;
                     break;             
               }
          } 
    }
    
        if(b>0) 
       {
         for(int x=0;x<b;x++)    
          {
             for(int i=0;i<9;i++) 
               if(q[i][0]==p[a][x])
               {
                     q[i][1]=1;
                     break;             
               }
          } 

    }
    
    if(a%3==1)
     a-=1;
     else if(a%3==2)
     a-=2;
     if(b%3==1)
     b-=1;
     else if(b%3==2)
     b-=2;
   
    for(int x=a;x<=a+2;x++)
    {
       for(int y=b;y<=b+2;y++)    
            if(p[x][y]!=0)
              {
                 for(int i=0;i<9;i++)        
                    if(q[i][0]==p[x][y])
                       {
                           q[i][1]=1;            
                            break;           
                       }                      
              }           
    }
}

void choose(int a,int b)
{
        int l=0;
   if(a>0&&b<6)
   { 
   if(b%3==0&&b+3<=8)
   b+=3;
   else if(b%3==1&&b+3<=8)
   b+=2;
   else if(b%3==2&&b+3<=8)
   b+=1;

   a-=1;
  
   for(int x=b;x<=b+2;x++)
   {
       r[l][0]=p[a][x];
       l++;           
   } 
   

    int count=0;
    
   for(int i=0;i<9;i++) 
     {
     if(q[i][1]==0)
        {
           for(int p=0;p<9;p++)
           if(r[p][0]!=0&&r[p][0]==q[i][0])
           count++;
           if(count==0)
           {   
           r[l][0]=q[i][0]; 
           l++;     
           break;       
           } 
        count=0;
} }

}

void appointment()
{
      for(int i=0;i<9;i++) 
      {
      q[i][0]=i+1; 
      q[i][1]=0;
      }
     
     for(int i=0;i<9;i++) 
      {
      r[i][0]=0; 
      r[i][1]=0;
      }
     
}

bool control(int a,int b,int c)
{
     int count=0;
    
     for(int x=0;x<b;x++)
     if(c==p[a][x])
     count++;
    
     for(int x=0;x<a;x++)
     if(c==p[x][b])
     count++;
    
     if(a%3==1)
     a-=1;
     else if(a%3==2)
     a-=2;
     if(b%3==1)
     b-=1;
     else if(b%3==2)
     b-=2;
   
    for(int x=a;x<=a+2;x++)
    {
       for(int y=b;y<=b+2;y++)    
          if(c==p[x][y])
           count++;                        
                         
    }
    
     if(count==0)
     return true;
}

void start()
{
  
     int y;
    for(int i=0;i<9;i++)     
     {
       for(int j=0;j<9;j++)    
         {
         eliminate(i,j);
         choose(i,j);
        
         for(int h=0;h<9;h++)
         if(r[h][0]!=0)
         {
            y=r[h][0];
            if(control(i,j,y)==true)
            {          
           p[i][j]=y;
           r[h][1]=1;
           break;           
         }
         }
            appointment();
     }
    
     }
     
}

void print()
{
   cout<<endl<<endl; 
   for(int i=0;i<9;i++) 
     {
      for(int j=0;j<9;j++)   
        cout<<”   “<<p[i][j];  
          cout<<endl<<endl;   
     }
}

main()
{
    appointment();   //  q ya değer atadık
    start(); 
    print(); 
   
system (“pause”);     
}

MEHMET SALİH DEVECİ

YAZILIM MÜHENDİSİ

Reklamlar
yorum
  1. bebek dedi ki:

    yaaaa bn bu kodları c++ da derledm fakat 3*3 lük bütün sayıları gösteriyor bnm istediğimm kod aslında boşluklar olup kişi kendisi dolduracak ve yanlış yere sayı geldiğinde ekrena “yanlış girdiniz” die uyarı versin istiyorum. oyun tamamlandığında ise tebrikler oyun bitti desin istiyorum ve ekrana “başka bir oyuna geçmek istermisiniz “diye yazsın ve kullanıcııda “evett” ,”hayır” dediğinde oyun biitsin veya kullanıcı tekrar başka bir oyuna geçsin bilmem anlatabildim mi derdimi çok araştırdım ama şuan kimse yapamadı. sizden ümit bekliorum yoksa sınııfta kalıcammmm:(

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Dostum onları yapman pek zor değil kodları incele bu dediklerin çok basit ancak sanırım senin programlama bilgin az herhalde ki bunları böyle yapılmaz olarak sunmuşsun…Sen kodları incele derle ekle çıkar iyice anla o dediklerini hemen halledersin…https://mehmetsalihdeveci.net/2010/06/21/satranc-oyunu-c/ burdaki satrançta senin dediklerine benzer interaktif işler var burdan esinlenerek yapabilirsin gerekli değişiklikleri…

  2. kasva dedi ki:

    sayın mehmet hocam

    sudoku kodunuzu inceledim yalnız her defasında aynı sudoku tablosunu oluşturan bi kod bu.ben şu sıralar sudoku uygulaması üzerine projeyle uğraşıyorum.benim her defasında farklı bi sudoku tablosu oluşturan bi koda ihtiyacım var sizin yazdığınız gibi tamamen dolu olacak şekilde.belki sizin yazdığınız kodu kullanabilirim ama bunu nasıl her defasında çalıştırdığımda farklı bi tablo elde edebilirim.

    ilginiz için teşekkürler.

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      random fonksiyonunu kullanırsan her defasında farklı kordinatlarda bulursun…Ancak gerekli kontrolleri sürekli yapman gerekiyor

  3. kasva dedi ki:

    dediğiniz şekilde yaptım ama işin içine kontroller girdiği için 5-10 saniyede felan cevap veriyor.neyse en azından şimdilik buda iyi.
    sağolun yardımlarınız için.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s