Bagaimana cara model papan catur ketika pemrograman komputer untuk bermain catur?

Awalnya, gunakan sebuah 8 * 8 integer array untuk mewakili papan catur.

Anda dapat mulai programing menggunakan notasi ini. Beri nilai titik bagian. Contoh:

**White**
9 = white queen
5 = white rook
3 = bishop
3 = knight
1 = pawn

**black**
-9 = white queen
-5 = white rook
-3 = bishop
-3 = knight
-1 = pawn
White King: very large positive number
Black King: very large negative number dll

Dalam bit papan, Anda menggunakan 8-bit delapan kata-kata untuk mewakili papan. Representasi ini membutuhkan papan catur untuk masing-masing bagian. Dalam satu bit board Anda akan menyimpan posisi benteng sedangkan di lain Anda akan menyimpan posisi kesatria.

Bit dewan dapat meningkatkan kinerja aplikasi Anda sangat banyak karena memanipulasi potongan papan dengan bit sangat mudah dan cepat.

Saat Anda menunjukkan,



Kebanyakan chessprograms hari ini, terutama
orang-orang yang berjalan di 64 bit CPU, gunakan
bitmapped pendekatan untuk mewakili
papan catur dan menghasilkan bergerak. x88 adalah
papan alternatif model untuk mesin
tanpa 64 bit CPU.


Salah satu hal yang dipertimbangkan jika melakukan pendekatan 8] [8] [menggambarkan posisi. Sebagai contoh jika Anda ingin menjelaskan langkah yang valid untuk sepotong catur, Anda akan butuh 2 byte untuk melakukannya. Sementara dengan array 64] [item Anda dapat melakukannya dengan satu byte.

Untuk mengkonversi dari posisi di papan 64] [item sebuah papan 8] [8] [Anda hanya dapat menggunakan perhitungan sebagai berikut:

Baris = (byte) (index / 8)

Col = (byte) (indeks% 8)


Pendekatan sederhana adalah dengan menggunakan sebuah array integer 8x8. Gunakan 0 untuk kotak kosong dan memberikan nilai untuk potongan:

1 white pawns
2 white knights
3 white bishops
4 white rooks
5 white queens
6 white king
Black pieces use negative values
-1 black pawn
-2 black knight
etc
8| -4 -2 -3 -5 -6 -3 -2 -4
7| -1 -1 -1 -1 -1 -1 -1 -1
6| 0 0 0 0 0 0 0 0
5| 0 0 0 0 0 0 0 0
4| 0 0 0 0 0 0 0 0
3| 0 0 0 0 0 0 0 0
2| 1 1 1 1 1 1 1 1
1| 4 2 3 5 6 3 2 4
-------------------------
1 2 3 4 5 6 7 8

Piece bergerak dapat dihitung dengan menggunakan indeks array. Misalnya bidak putih bergerak dengan meningkatkan indeks baris dengan 1, atau dengan 2 bila itu pertama bidak bergerak. Jadi pion putih pada [2] [1] bisa pindah ke [3] [1] atau [4] [1].

Namun 8x8 sederhana ini representasi array memiliki papan catur memiliki beberapa masalah. Terutama ketika Anda sedang bergerak 'geser' potongan seperti Rooks, uskup dan ratu yang Anda butuhkan untuk terus-menerus indeks akan memeriksa untuk melihat apakah potongan sudah dipindahkan dari papan.

Kebanyakan chessprograms, terutama yang dijalankan di 64 bit CPU, menggunakan pendekatan bitmapped untuk mewakili papan catur dan menghasilkan bergerak. x88 adalah papan alternatif model untuk mesin tanpa 64 bit CPU.

int[8][8]
0=no piece
1=king
2=queen
3=rook
4=knight
5=bishop
6=pawn

menggunakan putih ints positif dan negatif untuk hitam ints


Nama : Rina Yuliana Siagian
Kelas : 3IA07
NPM : 50407731

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Bagaimana Menyelesaikan Ending Raja+Benteng+Gajah vs Raja+Benteng


Berikut ini teori dan contoh penyelesaian partai ending Raja+Benteng+Gajah vs
Raja+Benteng :

Pada prakteknya tidak banyak ending semacam ini yang dapat dimenangkan. alias mayoritas yang terjadi adalah draw/remis. kendala utama tentu saja peraturan FIDE 50 langkah.

Pada prinsipnya pihak penyerang dapat membunuh Raja lawan jika Raja lawan dapat digiring ke tepi papan. Dan jangan lupa bahwa ada peraturan FIDE 50 langkah (partai berakhir remis jika dalam 50 langkah tidak dapat membunuh dan tidak ada pertukaran
buah catur). Cara membunuhnya mengikuti pola-pola yang sudah pernah ada/ditemukan para ahli ratusan tahun yang lalu.

Sedang pihak yang bertahan mempunyai strategi sebaliknya. Berusaha agar jangan sampai dapat digiring ke tepi papan. Dan berusaha untuk mengulur-ulur partai sepanjang mungkin sampai lebih dari 50 langkah sejak terjadinya formasi ending Raja+Benteng+Gajah vs Raja+Benteng.

Contoh
posisi ending yang terkenal untuk ending ini pernah dibahas oleh
pecatur termasyhur masa lalu yaitu Philidor. Fragmen di bawah ini
terjadi pada abad ke-18 M (tahun 1749 M).


1 Rf8+! Re8 2 Rf7
( … 3 Ra7) 2...Re2!

2...Kc8
kalah lebih cepat: 3 Ra7 Rd8+ 4 Kc6 Kb8 5 Rb7+ Ka8 6 Rb1 Ka7 7 Kc7.

3 Rh7!
taktik langkah menunggu yang penting. benteng hitam harus meninggalkan baris kedua, dimana di baris inilah hitam bisa bertahan. Jalur berikut membuktikan bahwa baris ketiga merupakan tempat yang buruk bagi benteng hitam.

3...Re3 4 Rd7+ Ke8
(4...Kc8 5 Ra7)

5 Ra7 Kf8 6 Rf7+ Ke8 7 Rf4
(8 Bc6+ adalah ancaman)

7...Kd8
(7...Rd3 8 Rg4)

8 Be4!
(langkah gajah yang penting sekali yang mencegah benteng hitam tidak bisa melakukan check pada lajur d)

8...Ke8 9 Bc6+. 3...Re1 4 Rb7
alternatif ini mengancam untuk menyerang pada kedua sayap pafa pola posisi ini. Jika 4...Kc8, 5 Rb2 Rd1 6 Rh2 Kb8 7 Ra2 menentukan hasil akhir.

4...Rc1 5 Bb3!
Langkah kunci!
Jika benteng hitam masih ada di baris kedua, sebuah langkah check masih
bisa dilakukan. Sekarang hitam harus menempatkan bentengnya pada baris
ketiga yang tidak menguntungkan!

5...Rc3 If 5...Kc8 then 6 Rb4 Kd8 7 Rh4 Re1
(7...Kc8 8 Bd5)

8 Ba4
(there is no saving check along the d-file again)

8...Kc8 9 Bc6 Rd1+ 10 Bd5 Kb8 11 Ra4. 6 Be6 Rd3+ 7 Bd5 Rc3 8 Rd7+ Kc8
(8...Ke8 9 Rg7)

9 Rh7 Kb8 10 Rb7+ Kc8 11 Rb4 Kd8 12 Bc4! Kc8 13 Be6+
dan raja hitam mat dalam beberapa langkah kemudian.

Karena
ending ini jumlah biji caturnya hanya 5 buah, maka sejatinya
penyelesaian termudah dan lebih akurat bisa memanfaatkan teknologi
Tablebase Ending (untuk menentukan menang atau remisnya dan berapa
jumlah langkah yang dibutuhkan untuk me-matkan raja lawan, atau kalo
ketahuan lebih dari 50 langkah berarti remis). Seperti telah
saya sharing pada posting sebelumnya bahwa Tablebase Ending ini sampai
sekarang baru bisa menangani ending dengan buah catur tersisa di papan
sebanyak maksimal 6 buah. Para ahli sekarang sedang berusaha
mengerjakan proyek untuk Tablebase Ending dengan 7 (tujuh) buah catur
tersisa.

Partai terbaru (dalam database saya) yang memuat ending Raja+Benteng+Gajah vs Raja+Benteng bisa anda simak di bawah ini :

[Event "FSGM April"]
[Site "Budapest HUN"]
[Date "2008.04.10"]
[Round "6"]
[White "Ilincic, Z."]
[Black "Duong The Anh"]
[Result "1-0"]
[ECO "D12"]
[WhiteElo "2548"]
[BlackElo "2403"]

1.
d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bf5 5. Nc3 e6 6. Nh4 Be4 7. f3 Bg6 8.
a3 Nbd7 9. Be2 a6 10. g3 b5 11. c5 Bh5 12. b4 a5 13. Bb2 Be7 14. e4
axb4 15. axb4 Rxa1 16. Bxa1 O-O 17. O-O Qb8 18. Bb2 Rd8 19. Ng2 dxe4
20. fxe4 Bg6 21. Nf4 Nxc5 22. Nxg6 hxg6 23. e5 Na6 24. exf6 gxf6 25.
Na2 Qb6 26. Qe1 f5 27. g4 Bf6 28. gxf5 Bxd4+ 29. Bxd4 Qxd4+ 30. Qf2
exf5 31. Qxd4 Rxd4 32. Bf3 Nxb4 33. Nxb4 Rxb4 34. Bxc6 Rg4+ 35. Bg2 b4
36. Rd1 b3 37. Rd8+ Kg7 38. Rb8 Kf6 39. Rxb3 Kg5 40. Kf2 f6 41. Bc6
Rf4+ 42. Bf3 Ra4 43. Rb1 Ra2+ 44. Be2 f4 45. Rb5+ f5 46. Rb6 Ra3 47.
Bc4 Rh3 48. Kg2 Rh7 49. Bb5 Rh6 50. Be8 Kg4 51. Bc6 Kg5 52. Bd5 Rh7 53.
Rd6 Rh6 54. Bf7 Kg4 55. h3+ Kg5 56. Be8 Kh4 57. Rf6 Kg5 58. Rf8 f3+ 59.
Kg3 f4+ 60. Kh2 f2 61. Bb5 Rh7 62. Kg2 Rb7 63. Bf1 Rb3 64. Kxf2 Rg3 65.
Rh8 Kf6 66. Be2 Kg7 67. Rh4 g5 68. Rh5 Kg6 69. Bg4 Ra3 70. Rh8 Rg3 71.
Ra8 Kf6 72. Ra6+ Kg7 73. Bf5 Kf7 74. Rh6 Kg7 75. Rh5 Kf6 76. Be4 Ke5
77. Bc2 Kf6 78. h4 gxh4 79. Rf5+ Ke6 80. Rxf4 Rc3 81. Bd1 h3 82. Rh4
Ke5 83. Bf3 Rc2+ 84. Kg3 h2 85. Bg2 Rc3+ 86. Kxh2 Kf5 87. Bf1 Kg5 88.
Ra4 Rb3 89. Kg2 Rc3 90. Kf2 Kf5 91. Ke2 Ke5 92. Kd2 Rg3 93. Bd3 Rg1 94.
Kc3 Rc1+ 95. Bc2 Rg1 96. Ra5+ Kf6 97. Kd4 Rg8 98. Rf5+ Ke6 99. Rh5 Rd8+
100. Ke4 Kf6 101. Rf5+ Kg7 102. Rc5 Kf6 103. Kf4 Rd4+ 104. Be4 Rd6 105.
Bd5 Rb6 106. Bc4 Rd6 107. Rf5+ Kg6 108. Ke5 Rb6 109. Rf2 Rc6 110. Rg2+
Kh6 111. Be6 Rc5+ 112. Kf6 Ra5 113. Rg6+ Kh5 114. Rg8 Kh4 115. Rg4+ Kh5
116. Rb4 Ra6 117. Rb8 Kh4 118. Rb3 1-0

[Event "IX EICC"]
[Site "Plovdiv BUL"]
[Date "2008.04.27"]
[Round "7"]
[White "Nikolic, Pr"]
[Black "Jojua, D."]
[Result "1/2-1/2"]
[ECO "D57"]
[WhiteElo "2674"]
[BlackElo "2463"]

1.
d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 O-O 6. e3 h6 7. Bh4 Ne4 8.
Bxe7 Qxe7 9. cxd5 Nxc3 10. bxc3 exd5 11. Qb3 Rd8 12. c4 Be6 13. c5 b6
14. Rc1 bxc5 15. Rxc5 Nd7 16. Rxc7 Rab8 17. Qc2 Qa3 18. Bd3 Rb2 19. Qc3
Qxc3+ 20. Rxc3 Rxa2 21. O-O Rb8 22. Rfc1 Kf8 23. Kf1 a5 24. R3c2 Rxc2
25. Rxc2 Ke7 26. Nd2 a4 27. Ra2 Ra8 28. Nb1 Kd6 29. Rb2 Kc7 30. Ke2 Nb6
31. Na3 Bd7 32. Kd2 Nc8 33. Rc2+ Kd6 34. Rc5 f5 35. Kc3 g5 36. Bb5 Ne7
37. f4 gxf4 38. exf4 h5 39. Be2 h4 40. Bf3 Bc6 41. h3 Rb8 42. Nc2 Rb3+
43. Kd2 Rb2 44. Rc3 Ng6 45. Ke3 Rb7 46. Bh5 Nf8 47. Be2 Ne6 48. Bd3 Rg7
49. Ne1 Rg3+ 50. Nf3 Rxg2 51. Nxh4 Rg3+ 52. Kf2 Rxh3 53. Nxf5+ Kd7 54.
Ke1 Nxf4 55. Kd2 Rh2+ 56. Kc1 Nxd3+ 57. Rxd3 Bb5 58. Ra3 Re2 59. Ne3
Kc6 60. Rc3+ Kd6 61. Nxd5 a3 62. Nb4 a2 63. Nxa2 Rxa2 64. Rc2 Ra4 65.
Rb2 Bc4 66. Kd2 Kd5 67. Ke3 Ra3+ 68. Kf4 Kxd4 69. Rb7 Ra6 70. Rd7+ Bd5
71. Kf5 Ra2 72. Re7 Rf2+ 73. Kg5 Be4 74. Rd7+ Ke3 75. Rd6 Rf5+ 76. Kh6
Kf4 77. Kg7 Ke5 78. Rg6 Rh5 79. Rg1 Rh7+ 80. Kg8 Rc7 81. Rg7 Rc8+ 82.
Kf7 Bf5 83. Ke7 Ra8 84. Rf7 Bg6 85. Rg7 Ra6 86. Kf8 Kf6 87. Rf7+ Kg5
88. Rc7 Re6 89. Kg7 Bf5 90. Rf7 Rh6 91. Re7 Bg4 1/2-1/2



Nama : Rina Yuliana Siagian
Kelas : 3IA07
NPM : 50407731

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Program Papan Catur 8 * 8 Untuk Langkah Kuda (Knight)

PROGRAM PAPAN CATUR 8*8 UNTUK LANGKAH KUDA (KNIGHT) DARI KOORDINAT AWAL SAMPAI AKHIR YANG BELUM PERNAH DISINGGAHI

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

#include

#include

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<>");

}

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.




Nama : Rina Yuliana Siagian
Kelas : 3IA07
NPM : 50407731

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS