Kode Untuk Gerakan Langkah Garuda Yang Benar
KODE UNTUK GERAKAN LANGKAH GARUDA YANG BENAR
Langkah garuda bisa bergerak lurus vertikal dan diagonal, dan bisa bergerak lurus diagonal, bila bergerak lurus melangkah 2 petak, bila bergerak diagonal melangkah 2 petak. Jadi selueuhnya ada 8 petak yang akan ditempati garuda. Contoh langkah garuda yang benar ada 8 petak kemungkinan untuk ditempati, misalnya garuda dari petak d3 ke d5 atau ke f5 atau ke f3 atau ke f1 atau ke d1 atau ke b1 atau ke b3, atau ke b5.
Kode:
# **Gerakan Garuda**
if p_type == "garuda":
dx = abs(x2 - x1)
dy = abs(y2 - y1)
# **1. Cek apakah petak tujuan ditempati bidak sendiri**
if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
return False # Tidak bisa bergerak ke petak yang ditempati bidak sendiri
# **2. Gerakan Lurus (vertikal/horizontal)**
if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
return True # Bisa lompat 2 petak lurus
# **3. Gerakan Diagonal**
if dx == 2 and dy == 2:
return True # Bisa lompat 2 petak diagonal
return False # Jika tidak memenuhi aturan langkah Garuda
πΉ Perbaikan Gerakan Garuda dalam Catur Nine 9x9 Petak
Garuda bergerak vertikal, horizontal, dan diagonal, tetapi dengan aturan khusus:
- Jika bergerak lurus (vertikal/horizontal) → melangkahi 1 petak, jadi bergeser sejauh 2 petak.
- Jika bergerak diagonal → melangkahi 1 petak, jadi bergeser sejauh 2 petak.
πΉ Implementasi dalam is_valid_move()
Tambahkan aturan Garuda ke dalam catur_nine_move.py
:
# Fungsi validasi langkah
def is_valid_move(piece, start, end, pieces, turn, last_move, castling_rights):
color, p_type = piece.split(' ')
x1, y1 = start
x2, y2 = end
if color != turn: # Hanya bidak pada giliran yang sesuai
return False
# **Gerakan Garuda:**
if p_type == "garuda":
dx = abs(x2 - x1)
dy = abs(y2 - y1)
# **1. Gerakan Lurus (vertikal/horizontal)**
if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
return True # Bisa lompat 2 petak lurus
# **2. Gerakan Diagonal**
if dx == 2 and dy == 2:
return True # Bisa lompat 2 petak diagonal
return False # Jika tidak memenuhi aturan langkah Garuda
# **Tambahkan aturan bidak lainnya di sini (Pawn, Rook, etc.)**
return False # Jika bukan langkah yang val
πΉ Implementasi dalam Game Loop (__main__.py
)
Tambahkan bagian ini dalam event MOUSEBUTTONDOWN
di __main__.py
untuk menangani gerakan Garuda:
elif selected_piece and selected_piece.endswith("garuda"):
if is_valid_move(selected_piece, selected_position, (col, row), pieces, turn, last_move, castling_rights):
move_piece(selected_piece, selected_position, (col, row))
switch_turn()
π Kesimpulan
✅ Garuda kini bergerak lurus (2 petak) atau diagonal (2 petak).
✅ Dapat melompati bidak tanpa hambatan.
✅ Kode lebih optimal & sesuai aturan Catur Nine.
Sekarang Garuda dapat bergerak sesuai aturan yang benar! π―♟️
Langkah Garuda yang benar sesuai dengan aturan yang ditetapkan adalah:
-
Gerakan Lurus
- Bisa melangkah 2 petak secara vertikal atau horizontal.
- Contoh: Dari
(e3)
bisa ke(e5)
atau(g3)
.
-
Gerakan Diagonal
- Bisa melangkah 2 petak secara diagonal.
- Contoh: Dari
(e3)
bisa ke(g5)
atau(c1)
.
Kode Perbaikan di is_valid_move()
Jika belum diterapkan, tambahkan kode berikut di dalam fungsi is_valid_move()
pada file catur_nine_move.py
:
# **Gerakan Garuda**
if p_type == "garuda":
dx = abs(x2 - x1)
dy = abs(y2 - y1)
# **1. Gerakan Lurus (vertikal/horizontal)**
if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
return True # Bisa lompat 2 petak lurus
# **2. Gerakan Diagonal**
if dx == 2 and dy == 2:
return True # Bisa lompat 2 petak diagonal
return False # Jika tidak memenuhi aturan langkah Garuda
Tambahan Perbaikan
Jika ingin memastikan Garuda tidak terhalang oleh bidak lawan atau kawan (hanya bisa melompati, bukan mendarat di atasnya), tambahkan pengecekan:
if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
return False # Tidak bisa bergerak ke petak yang ditempati bidak sendiri
Kode ini memastikan Garuda hanya bisa mendarat di petak kosong atau memakan bidak lawan.
Coba Uji Coba Garuda
Setelah perbaikan, uji langkah Garuda dengan beberapa skenario, seperti:
✅ (e3 → e5): Bergerak lurus 2 petak vertikal.
✅ (e3 → g3): Bergerak lurus 2 petak horizontal.
✅ (e3 → g5): Bergerak 2 petak diagonal.
❌ (e3 → e4): Tidak bisa melangkah hanya 1 petak.
Kode berikut:
if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
return False # Tidak bisa bergerak ke petak yang ditempati bidak sendiri
harus diletakkan di dalam fungsi is_valid_move()
, tepatnya di dalam aturan langkah Garuda, sebelum return True
.
Perbaikan Fungsi is_valid_move()
pada file catur_nine_move.py
Cari bagian Gerakan Garuda, lalu ubah menjadi seperti ini:
# **Gerakan Garuda**
if p_type == "garuda":
dx = abs(x2 - x1)
dy = abs(y2 - y1)
# **1. Cek apakah petak tujuan ditempati bidak sendiri**
if is_occupied((x2, y2), pieces) and not is_occupied_by_enemy((x2, y2), color, pieces):
return False # Tidak bisa bergerak ke petak yang ditempati bidak sendiri
# **2. Gerakan Lurus (vertikal/horizontal)**
if (dx == 2 and dy == 0) or (dx == 0 and dy == 2):
return True # Bisa lompat 2 petak lurus
# **3. Gerakan Diagonal**
if dx == 2 and dy == 2:
return True # Bisa lompat 2 petak diagonal
return False # Jika tidak memenuhi aturan langkah Garuda
Penjelasan Perbaikan:
-
Mencegah Garuda mendarat di petak yang ditempati bidak sendiri
- Jika petak tujuan ditempati bidak sendiri, Garuda tidak bisa bergerak ke sana.
- Namun, jika petak itu berisi bidak lawan, maka Garuda bisa menyerang.
-
Menjaga aturan gerakan Garuda tetap benar
- Bisa lompat 2 petak lurus (vertikal/horizontal).
- Bisa lompat 2 petak diagonal.
Uji Coba
Pastikan kode ini berfungsi dengan mencoba beberapa langkah:
✅ Garuda dari (e3 → e5) (2 petak vertikal) ✔
✅ Garuda dari (e3 → g3) (2 petak horizontal) ✔
✅ Garuda dari (e3 → g5) (2 petak diagonal) ✔
❌ Garuda dari (e3 → e4) (hanya 1 petak, tidak boleh) ✖
❌ Garuda dari (e3 → e5) jika e5 ditempati bidak sendiri ✖
Demikian, semoga bermanfaat
Comments
Post a Comment