Hi ! I have a C source code of Knight' Tour like

#include <stdio.h>
#include <winbgim.h>
#include <stdlib.h>
#include <conio.h>
#define N 8
void alternatif_bul(int,int);
void alt_say_hesapla();
int yeni_konum_bul();
void alt_dizi_sifirla();

int board[N][N]={0}; //satranç tahtası
int alt_x[8]={0}; //gidilebilecek alternatif karelerin X konumlarini tutuyor
int alt_y[8]={0}; //gidilebilecek alternatif karelerin Y konumlarini tutuyor
int alt_cikis[8]={0}; //alternatiflerden çıkışların sayılarını tutuyor
int fark_x[8]={-2,-1,1,2,2,1,-1,-2};//saat yonunde olusan farklar
int fark_y[8]={1,2,2,1,-1,-2,-2,-1};
int main(){
int i,j,sayac=1,gosterge;
int konum_x,konum_y,x,y,hareket;
int a[N];

printf("ilk konumu giriniz (X--satir  0-8) :\n");  
scanf("%d",&konum_x);
printf("ilk konumu giriniz (Y--sutun  0-8):\n ");   
scanf("%d",&konum_y);
             if(konum_x<0 || konum_x>N-1 || konum_y<0 || konum_y>N-1)
                { //girilen konum değerleri matris içinde mi?
                  printf("girilebilecek degerler 0-%d arasinda olmali!",N);
                 return 0;
                }
  x=konum_x;
   y=konum_y;
   
        while(!(board[konum_x][konum_y])) //döngü,gidilecek kare ziyaret edilmediği sürece devam eder
       {
               board[konum_x][konum_y]=sayac++;
               alternatif_bul(konum_x,konum_y);
               alt_say_hesapla();
               gosterge=yeni_konum_bul(); //gosterge degiskeni yeni_konum_bul fonksiyonundan dönen indisi tutuyor
              if(gosterge!= -1)
             {
                konum_x=alt_x[gosterge];
                konum_y=alt_y[gosterge];
              }
          alt_dizi_sifirla();
       }
hareket=sayac-1;

for(i=0;i<8;i++) //eğer gosterge nin degeri -1 ise ve hala çıkış var ise(at sondan bir önceki hamlede ise)

if(konum_x+fark_x[i]>-1 && konum_x+fark_x[i]<N && konum_y+fark_y[i]>-1 &&konum_y+fark_y[i]<N && board[(konum_x+fark_x[i])][(konum_y+fark_y[i])]==0)
{
       board[(konum_x+fark_x[i])][(konum_y+fark_y[i])]=sayac; //sayacın son degerini son kareye ata
       hareket++;
}

printf("At %d,%d karesinden baslarsa,%d hamle yapar\n",x,y,hareket);



      for(i=0;i<8;i++)
          printf("%5c",'a'+i); 
         

     for(i=0;i<8;i++)
    {
       printf("%5d",i);
       printf("\n");
       for(j=0;j<8;j++)
       printf("%5d",board[i][j]);

    }
   printf("Bir tusa basin!\n");
   getch();
return 0;
}


       void alternatif_bul(int x,int y)
    { /*atın bulunduğu kareden gidebileceği konumları bulur,X konumlarını alt_x dizisine,Y konumlarını alt_y dizisine atar.*/
         int i;
         for(i=0;i<8;i++)
{
alt_x[i]=x+fark_x[i];
alt_y[i]=y+fark_y[i];
}
}
void alt_say_hesapla(){/*alt_say_hesapla fonksiyonu alternatif karelerden gidilebilecek karelerin sayılarını (kareler daha önce gezilmemiş ve matris içinde //ise)alt_cikis dizisine atar.*/
int i,j,tmp_x,tmp_y;
for(i=0;i<8;i++)
if(alt_x[i]>-1 && alt_y[i]>-1 && alt_x[i]<N && alt_y[i]<N && !(board[alt_x[i]][alt_y[i]])) /*alternatif çıkış gezilmemiş ve */
for(j=0;j<8;j++) // tahta içinde mi?
{     
tmp_x=alt_x[i]+fark_x[j];
tmp_y=alt_y[i]+fark_y[j];
if(tmp_x>-1 && tmp_y>-1 && tmp_x<N && tmp_y<N && !(board[tmp_x][tmp_y]))  /* alternatif çıkış*/
alt_cikis[i]++; /*gezilmemiş ve tahta içinde ise çıkışa ait alternatif sayısını        1 arttır*/
}
}

int yeni_konum_bul(){ //alt_cikis dizisinin 0 hariç en küçük elemanının indisini döndürür.

int i,sayi=9,ind=-1;
for(i=0;i<8;i++)
if(alt_cikis[i]) //çıkış 0 ise döngüden çık
if(sayi>alt_cikis[i]){//çıkış 9 dan küçük ise

sayi=alt_cikis[i]; //sayıyı çıkış sayısına eşitle
ind=i;          //ind değişkenine indisi ata
}
return ind; //indisi döndür
}


//alt_dizi_sifirla fonksiyonu yeni konum belirlendikten sonra alt_cikis dizisinin elemanlarına 0 atar.
void alt_dizi_sifirla(){

int i;
for(i=0;i<8;i++)
alt_cikis[i]=0;

Then I want to make graphics, ı mean ı want to show moves in Chess Board , are there any source code of this ?

Recommended Answers

All 3 Replies

>>Then I want to make graphics, ı mean ı want to show moves in Chess Board , are there any source code of this ?

Well, there are many Graphic libraries available. Question is, how good do you want them to look?

Do you want the Chess pieces to be modelled as 3D objects?
If yes, you can use OpenGL. A very good Graphics API.

OR

Do you want just 2D pieces on the console?
i think Unicode has Chess characters. You can print them on the console using wprintf().

PS: i had actually tried this once, but it had not worked. i suppose the console did not support the font. i would like to know if anyone has tried this.

I suggest using chess fonts - google, download them.

For a 2D chess board, a console window will be OK, but the visual quality of the pieces really suffers if you don't have chess fonts installed.

Using something like Winboard (a chess program interface for chess playing programs without them), could be an easy option.

For all things chess computer related:

openchess.com and talkchess.com

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.