String & Rekursif : Program Papan Catur 8 x 8 untuk Langkah Kuda (Knight) dari Koordinat Awal sampai Akhir yang Belum Pernah Disinggahi

7 12 2009

1. Buat program papan catur yang menggambarkan langkah kuda berpindah dari suatu koordinat awal  ke koordinat akhir yang belum pernah disinggahinya sampai kuda tersebut tidak dapat berjalan lagi.

Hint: Gunakan Rekursi, Papan Catur 8 x 8 fixed

Algoritma Program :

  1. Program menampilkan instruksi kepada user untuk memasukkan koordinat x awal kuda.
  2. Program menampilkan instruksi kepada user untuk memasukkan koordinat y awal kuda.
  3. Program mengisi kotak catur yang sesuai dengan koordinat dengan angka 1 sebagai detektor.
  4. Program memanggil fungsi awal.
  5. Fungsi awal akan membersihkan layar dan menampilkan koordinat kuda yang telah ditentukan user.
  6. Fungsi awal akan menampilkan papan catur dengan dimensi 8 x 8 dan menampilkan karakter ’o’ pada  koordinat yang telah ditentukan dan telah berisi angka1.
  7. Program memanggil fungsi rekursi.
  8. Fungsi rekursi akan memeriksa koordinat sesuai dengan 8 prioritas gerakan kuda yang telah ditentukan programmer secara berurutan dan berisi angka 0.
  9. Jika koordinat tersebut telah memenuhi syarat, fungsi rekursi akan mengisi koordinat tersebut dengan angka 1. Kemudian fungsi rekursi akan memanggil fungsi sekarang.
  10. Fungsi sekarang akan membersihkan layar, menampilkan koordinat kuda yang telah memenuhi syarat, dan papan catur dengan karakter ’o’ pada koordinat tersebut dan telah berisi angka 1, karakter ‘x’ pada koordinat lain yang telah berisi angka 1 saja, dan mengisi spasi pada koordinat lainnya.
  11. Fungsi rekursi akan melakukan  rekursi berulang kali hingga koordinat yang telah memenuhi syarat tidak bisa didapatkan lagi. Selanjutnya fungsi rekursi akan menampilkan informasi bahwa kuda tidak dapat bergrak lagi dengan statemen “There’s no way out for the knight>>”.

Source Code Program :

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

int kotak[8][8];

void awal(int x1,int y1)

{

int a,b;

//system("cls");

clrscr();

printf("Koordinat awal kuda adalah : %d,%d\n",(x1+1),(y1+1));

printf("   1   2   3   4   5   6   7   8   x\n");

printf("   --- --- --- --- --- --- --- ---\n");

for(a=0;a<=14;a++)

{

if(a%2==1)

printf("   --- --- --- --- --- --- --- ---\n");

else

{

printf("%d ",(a+2)/2);

for(b=0;b<=7;b++)

{

printf("|");

if(kotak[b][a/2]==1 && b==x1 && a/2==y1)

printf(" o ");

else

printf("   ");

}

printf("|\n");

}

}

printf("   --- --- --- --- --- --- --- ---\n");

printf("y\n");

getch();

}

void sekarang(int x1,int y1)

{

int a,b;

//system("cls");

clrscr();

printf("Koordinat kuda sekarang adalah : %d,%d\n",(x1+1),(y1+1));

printf("   1   2   3   4   5   6   7   8   x\n");

printf("   --- --- --- --- --- --- --- ---\n");

for(a=0;a<=14;a++)

{

if(a%2==1)

printf("   --- --- --- --- --- --- --- ---\n");

else

{

printf("%d ",(a+2)/2);

for(b=0;b<=7;b++)



{

printf("|");

if(kotak[b][a/2]==1 && b==x1 && a/2==y1)

printf(" o ");

else

if(kotak[b][a/2]==1)

printf(" x ");

else

printf("   ");

}

printf("|\n");

}

}

printf("   --- --- --- --- --- --- --- ---\n");

printf("y\n");

getch();

}

void rekursi(int x2,int y2)

{

if(x2+1<=7 && y2+2<=7 && kotak[x2+1][y2+2]==0)

{

kotak[x2+1][y2+2]=1;

sekarang(x2+1,y2+2);

rekursi(x2+1,y2+2);

}

else

if(x2+2<=7 && y2+1<=7 && kotak[x2+2][y2+1]==0)

{

kotak[x2+2][y2+1]=1;

sekarang(x2+2,y2+1);

rekursi(x2+2,y2+1);

}

else

if(x2+2<=7 && y2-1>=0 && kotak[x2+2][y2-1]==0)

{

kotak[x2+2][y2-1]=1;

sekarang(x2+2,y2-1);

rekursi(x2+2,y2-1);

}

else

if(x2+1<=7 && y2-2>=0 && kotak[x2+1][y2-2]==0)

{

kotak[x2+1][y2-2]=1;

sekarang(x2+1,y2-2);

rekursi(x2+1,y2-2);

}

else

if(x2-1>=0 && y2-2>=0 && kotak[x2-1][y2-2]==0)

{

kotak[x2-1][y2-2]=1;


sekarang(x2-1,y2-2);

rekursi(x2-1,y2-2);

}

else

if(x2-2>=0 && y2-1>=0 && kotak[x2-2][y2-1]==0)

{

kotak[x2-2][y2-1]=1;

sekarang(x2-2,y2-1);

rekursi(x2-2,y2-1);

}

else

if(x2-2>=0 && y2+1<=7 && kotak[x2-2][y2+1]==0)

{

kotak[x2-2][y2+1]=1;

sekarang(x2-2,y2+1);

rekursi(x2-2,y2+1);

}

else

if(x2-1>=0 && y2+2>=0 && kotak[x2-1][y2+2]==0)

{

kotak[x2-1][y2+2]=1;

sekarang(x2-1,y2+2);

rekursi(x2-1,y2+2);

}

else

printf("\n<<There's no way out for the knight>>");

}

main(void)

{

int x,y,x0,y0;

printf("Masukkan koordinat x awal kuda : ");

scanf("%d",&x);

printf("Masukkan koordinat y awal kuda : ");

scanf("%d",&y);

x0=x-1;

y0=y-1;

kotak[x0][y0]=1;

awal(x0,y0);

rekursi(x0,y0);

getch();

}

Kelebihan dan Kelemahan Program :

  • Kelebihan Program
  1. Program Catur Kuda yang telah kami buat ini dapat menampilkan program sesuai dengan contoh  program Catur Kuda pada soal praktikum.
  2. Pada program ini, kuda dapat berjalan layaknya kuda pada permainan catur.
  3. User dapat menentukan sendiri posisi kuda yang diinginkan.
  • Kelemahan Program
  1. Program Catur Kuda yang telah kami buat ini belum dapat berjalan dengan cara berjalan kuda secara bergantian.
  2. Kuda tidak dapat berjalan hingga koordinat terakhir. Dengan kata lain kuda akan menemukan jalan buntu sebelum semua koordinat terisi.

Kesimpulan :

Walaupun program masih jauh dari kesempurnaan, tetapi program ini sudah dapat berjalan layaknya jalan kuda pada permainan catur dan user bisa memanfaatkan program ini sekedar untuk mengenal gerakan – gerakan kuda pada permainan catur. Selain itu, kami telah mendapatkan tambahan ilmu dari materi yang diberikan kakak asisten serta pengalaman (jam terbang) dalam membuat program ini serta program lain dalam modul ini yang mempunyai materi String dan Rekursi.

Posted By : Evan Yofiyanto @ Evan’s Blog : Kuliah Informatika (kuliahinformatika.wordpress.com)

[FREAX]


Actions

Information

One response

30 11 2013
Zainal

mas kalo caranya rekursif 3 langkah kuda, dengan inputan sebagai koordinatnya bagaimana

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: