GAME CATUR NINE 9x9 PETAK
GAME CATUR_NINE 9x9 PETAK
(Oleh: SR.Pakpahan,SST)
Makna dan arti dari angka 9 adalah mengungkapkan rahasia. Waktu-nya yang tepat, di tahun sisa 9 ini yaitu tahun 2025 kita akan membuat permainan game catur_nine atau disebut juga catur_garuda pada ukuran 9x9 petak karena ada penambahan 2 buah/bidak catur lagi pada catur 8x8 petak yang konvensional yaitu pion (bidak opsir) 1 buah dan garuda (bidak perwira) 1 buah di masing-masing bidak putih dan hitam, sehingga seluruhnya ada berjumlah 18 buah catur_nine di masing-masing warna putih dan hitam,
KODE PYTHON MENGGUNAKAN PYGAME UNTUK MEMBUAT TIMER HITUNGAN MUNDUR
Berikut adalah kode Python sederhana untuk membuat timer mundur menggunakan Pygame. Timer ini akan menghitung mundur dari waktu tertentu (di sini dibuat waktu dalam 5 menit atau 300 detik) dan menampilkannya di layar.
Kode Timer Hitungan Mundur (Pygame)
import pygame
import timeimport sys# Inisialisasi pygamepygame.init()# Ukuran layarWIDTH, HEIGHT = 400, 200SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("Countdown Timer")# WarnaWHITE = (255, 255, 255)BLACK = (0, 0, 0)TEXT_COLOR = (255, 0, 0) # Warna merah agar jelas# Font dan ukuran teksfont = pygame.font.Font(None, 80)# Waktu awal dalam detik (misalnya 5 menit = 300 detik)start_time = 300current_time = start_timelast_update = time.time()# Fungsi menggambar timer di layardef draw_timer():SCREEN.fill(WHITE) # Bersihkan layar dengan warna putihminutes = current_time // 60seconds = current_time % 60timer_text = font.render(f"{minutes:02}:{seconds:02}", True, TEXT_COLOR)SCREEN.blit(timer_text, (WIDTH // 3, HEIGHT // 3))pygame.display.flip()# Loop utamarunning = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# Update timer setiap detiknow = time.time()if now - last_update >= 1:current_time -= 1last_update = nowif current_time <= 0:print("Waktu habis!")running = Falsedraw_timer()pygame.quit()sys.exit()
Penjelasan Kode:
MM:SS
(misalnya "04:59" untuk 4 menit 59 detik).Jika kode jalankan, maka akan terlihat timer tampil dengan jelas di layar!
Timer dalam format Jam : Menit : Detik
Berikut adalah kode Python yang menampilkan timer mundur dalam format jam:menit:detik menggunakan Pygame. Timer ini akan menghitung mundur dari waktu tertentu (di sini dibuat waktu dalam 1 jam atau 60 menit) dan menampilkannya di layar.
Kode Timer Hitungan Mundur (Pygame) - Format HH:MM:SS
import pygame
import timeimport sys# Inisialisasi pygamepygame.init()# Ukuran layarWIDTH, HEIGHT = 400, 200SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("Countdown Timer")# WarnaWHITE = (255, 255, 255)BLACK = (0, 0, 0)TEXT_COLOR = (255, 0, 0) # Warna merah agar jelas# Font dan ukuran teksfont = pygame.font.Font(None, 60)# Waktu awal dalam detik (2 jam = 7200 detik)start_time = 3600current_time = start_timelast_update = time.time()# Fungsi menggambar timer di layardef draw_timer():SCREEN.fill(WHITE) # Bersihkan layar dengan warna putihhours = current_time // 3600minutes = (current_time % 3600) // 60seconds = current_time % 60timer_text = font.render(f"{hours:02}:{minutes:02}:{seconds:02}", True, TEXT_COLOR)SCREEN.blit(timer_text, (WIDTH // 4, HEIGHT // 3))pygame.display.flip()# Loop utamarunning = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# Update timer setiap detiknow = time.time()if now - last_update >= 1:current_time -= 1last_update = nowif current_time <= 0:print("Waktu habis!")running = Falsedraw_timer()pygame.quit()sys.exit()
Perubahan & Penyesuaian:
HH:MM:SS
(misalnya "00:59:59" untuk 0 jam 59 menit 59 detik).
Jika kode dijalankan, maka timer tampil dengan format jam yang benar!
Integrasi Game Catur dan Timer Dalam Satu Thread yang Sama
Berikut adalah kode Python untuk game Catur Nine (9x9) + Timer, di mana game dan timer berjalan dalam satu thread yang sama menggunakan Pygame.
📌 Kode Python
import pygame
import sysimport time# === KONFIGURASI TIMER ===WHITE_TIME = 7200 # 2 Jam dalam detikBLACK_TIME = 7200# === KONFIGURASI PYGAME ===pygame.init()# Ukuran layarSCREEN_WIDTH, SCREEN_HEIGHT = 800, 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption("Chess Nine with Timer")# Ukuran papan caturBOARD_SIZE = 450TILE_SIZE = BOARD_SIZE // 9BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 4# WarnaWHITE = (255, 255, 255)BLACK = (0, 0, 0)LIGHT_BROWN = (240, 217, 181)DARK_BROWN = (181, 136, 99)RED = (200, 50, 50)# Font Timerfont = pygame.font.Font(None, 40)# Timer awalwhite_timer = WHITE_TIMEblack_timer = BLACK_TIMEturn = "white" # Giliran awal pemain putih# === FUNGSI GAMBAR PAPAN ===def draw_board():for row in range(9):for col in range(9):color = LIGHT_BROWN if (row + col) % 2 == 0 else DARK_BROWNpygame.draw.rect(screen, color, (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))# === FUNGSI FORMAT TIMER ===def format_time(seconds):hours = seconds // 3600minutes = (seconds % 3600) // 60seconds = seconds % 60return f"{hours:02}:{minutes:02}:{seconds:02}"# === LOOP GAME UTAMA ===clock = pygame.time.Clock()last_time = time.time()running = Truewhile running:screen.fill(WHITE) # Bersihkan layar# Hitung waktu yang berlalucurrent_time = time.time()elapsed = current_time - last_timeif elapsed >= 1:if turn == "white":white_timer = max(0, white_timer - 1)else:black_timer = max(0, black_timer - 1)last_time = current_time# Gambar papan caturdraw_board()# Tampilkan Timer Pemain Putihwhite_timer_text = font.render(f"White: {format_time(white_timer)}", True, BLACK)screen.blit(white_timer_text, (50, 50))# Tampilkan Timer Pemain Hitamblack_timer_text = font.render(f"Black: {format_time(black_timer)}", True, BLACK)screen.blit(black_timer_text, (50, 550))# Event handlingfor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN: # Ganti giliran saat klikturn = "black" if turn == "white" else "white"pygame.display.flip()clock.tick(30) # Batasi FPS ke 30pygame.quit()sys.exit()
📌 Cara Kerja Kode
-
Timer & Game dalam 1 Thread
- Timer berjalan di dalam loop utama Pygame tanpa menggunakan thread terpisah.
- Waktu dihitung berdasarkan time.time(), sehingga tetap sinkron.
-
Papan Catur 9x9
- Dibuat dengan loop ganda (for loop).
- Petak catur otomatis berganti warna.
-
Pergantian Giliran Pemain
- Pemain klik papan → Giliran berpindah.
- Saat giliran berubah, timer yang aktif juga berubah.
-
Tampilan Timer
- Timer Pemain Putih (Atas Kiri).
- Timer Pemain Hitam (Bawah Kiri).
- Format jam:menit:detik (contoh:
01:59:59
).
📌 Tampilan Program
Timer otomatis berkurang setiap detik saat pemain berganti giliran! 🚀
Silakan jalankan kodenya dan lihat hasilnya!
Timer Dibungkus Dalam Kotak Kecil dan DIletakkan di Posisi yang Tepat (Timer putih di sebelah atas kanan, Timer hitam di sebelah bawah kanan papan catur)
Berikut adalah kode yang telah diperbaiki agar posisi Timer Putih berada tepat di atas papan (sebelah atas kanan) dan Timer Hitam berada tepat di bawah papan (sebelah bawah kanan), dan Timer Putih dan Timer Hitam bergeser ke kiri sejauh kira-kira 150 pixel.
📌 Kode Python (Update Terbaru)
import pygame
import sysimport time# === KONFIGURASI TIMER ===WHITE_TIME = 7200 # 2 Jam dalam detikBLACK_TIME = 7200# === KONFIGURASI PYGAME ===pygame.init()# Ukuran layarSCREEN_WIDTH, SCREEN_HEIGHT = 900, 700screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption("Chess Nine with Timer")
# === KONFIGURASI PYGAME ===pygame.init()# Ukuran layarSCREEN_WIDTH, SCREEN_HEIGHT = 800, 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption("Chess Nine with Timer")
# Ukuran papan catur
BOARD_SIZE = 585TILE_SIZE = BOARD_SIZE // 9BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2 - 90 #
Papan sedikit ke kiri agar pas di tengah layar
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 2 - (-60) # Papan sedikit turun agar Timer atas pas
# Posisi Timer (Digeser ke kiri sejauh 150 pixel)
TIMER_WIDTH, TIMER_HEIGHT = 200, 60TIMER_SHIFT_LEFT = 150 # Geser ke kiri sejauh 150 pixelTIMER_WHITE_X, TIMER_WHITE_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y - TIMER_HEIGHT - 10 # Tepat di atas papanTIMER_BLACK_X, TIMER_BLACK_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y + BOARD_SIZE + 10 # Tepat di bawah papan# WarnaWHITE = (255, 255, 255)BLACK = (0, 0, 0)LIGHT_BROWN = (240, 217, 181)DARK_BROWN = (181, 136, 99)RED = (200, 50, 50)GRAY = (50, 50, 50)BLUE = (100, 149, 237)# Font Timerfont = pygame.font.Font(None, 40)# Timer awalwhite_timer = WHITE_TIMEblack_timer = BLACK_TIMEturn = "white" # Giliran awal pemain putih# === FUNGSI GAMBAR PAPAN ===def draw_board():for row in range(9):for col in range(9):color = LIGHT_BROWN if (row + col) % 2 == 0 else DARK_BROWNpygame.draw.rect(screen, color, (BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))# === FUNGSI FORMAT TIMER ===def format_time(seconds):hours = seconds // 3600minutes = (seconds % 3600) // 60seconds = seconds % 60return f"{hours:02}:{minutes:02}:{seconds:02}"# === FUNGSI GAMBAR TIMER DALAM KOTAK ===def draw_timer_box(x, y, time_text, label):pygame.draw.rect(screen, GRAY, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10) # Kotak latar belakangpygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10) # Garis luarlabel_text = font.render(label, True, WHITE)time_display = font.render(time_text, True, WHITE)screen.blit(label_text, (x + 10, y + 5))screen.blit(time_display, (x + 10, y + 30))# === LOOP GAME UTAMA ===clock = pygame.time.Clock()last_time = time.time()running = Truewhile running:screen.fill(WHITE) # Bersihkan layar# Hitung waktu yang berlalucurrent_time = time.time()elapsed = current_time - last_timeif elapsed >= 1:if turn == "white":white_timer = max(0, white_timer - 1)else:black_timer = max(0, black_timer - 1)last_time = current_time# Gambar papan caturdraw_board()# Gambar kotak timer di atas dan bawah papan (dengan posisi geser kiri 150 pixel)draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")# Event handlingfor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN: # Ganti giliran saat klikturn = "black" if turn == "white" else "white"pygame.display.flip()clock.tick(30) # Batasi FPS ke 30pygame.quit()sys.exit()
📌 Perubahan & Peningkatan
Bidak/Buah Catur Pada Game Catur_Nine
Ada 7 jenis bidak atau buah catur di warna putih dan hitam yang dimainkan pada game catur_nine ini, yaitu:
1. Pion (pawn): putih dan hitam masing-masing 9 buah
2. Kuda (knight): putih dan hitam masing-masing 2 buah
3. Gajah (bishop) putih dan hitam masing-masing 2 buah
4. Benteng (rook) putih dan hitam masing-masing 2 buah
5. Ratu (queen) putih dan hitam masing-masing 1 buah
6. Raja (king) putih dan hitam masing-masing 1 buah)
7. Garuda (garuda) putih dan hitam masing-masing 1 buah.
Berikut dibetikan gambar buah catur_nine di URL Link sini: Gambar Transparan Lengkap Buah Catur_Nine 9x9 Putih dan Hitam
Aturan Permainan Catur_Nine atau Catur_Garuda:
Aturan langkah permainan dari gerakan setiap buah catur_nine 9x9 petak di sini tidak jauh berbeda dengan aturan permainan game catur 8x8 petak yang konvensional, cuma ada penambahan 3 (tiga) aturan lagi, yaitu:
1. Sebuah pion (pawn) yang ditambahkan ini memiliki aturan langkah yang sama seperti pion pada game catur 8x8 petak yang konvensional.
Petak e5 adalah petak F2P (Forboden For Pawn) sehingga Pion di baris lajur e tidak bisa melewati lebih dari petak e5 (pion mentok di e5). Namun pion e5 dalam serangan diagonal dapat memakan pion atau bidak lawan di lajur d atau f, kemudian sebaliknya juga pion di lajur d atau f dalam setangan diagonal dapat menjadi berada di petak e5 atau di sepanjang kolom/lajur e setelah memakan bidak lawan, selanjutnya pion ini akan menjadi berada/bergerak di sepanjang jalur lajur e untuk melangkah terus dan memungkinkan mendapat promosi di petak baris terakhir. Selengkapnya gerakan langkah Pion bisa dilihat di URL Link sini: Kode Untuk Gerakan Langkah Pion (Khususnya Pion di Petak e5) Yang Benar
2. Sebuah Perwira Garuda yang ditambahkan ini memiliki aturan melangkah lurus 2 petak, baik secara vertikal, horizontal, maupun diagonal. Garuda bisa melompati bidak yang menghalang, baik bidak sendiri maupun bidak lawan yang menghalang. Bila Garuda dapat bergerak lurus vertikal dan horizontal melangkah 2 petak dan bergerak diagonal melangkah 2 petak sehingga seluruhnya 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. Selengkapnya gerakan langkah Garuda bisa dilihat di URL Link sini: Kode Untuk Gerakan Langkah Garuda yang Benar.
3. Perwira Garuda akan mendapat promosi menjadi ratu (queen)/benteng(rook)/gajah(bishop) atau promosi lain yang diberikan bila saja Garuda dapat menangkap (memakan) pion lawan yang bergerak di sepanjang jalur kolom/lajur e. Dan oleh karena setiap bidak Garuda selalu berada dan melangkah di/ke petak putih, maka hanya ada 3 kali kesempatan bagi Garuda untuk mendapatkan promosinya setelah pion lawan di lajur e telah melangkah.
Analisis Fundamental Game Catur_Nine 9x9 Petak
Selanjutnya, Kecuali Timer, semua hal game catur_nine di atas yang telah diberikan baik itu papan catur (board), bidak catur (pieces), aturan catur_nine (rules), langkah-langkah permainan setiap bidak (moves), dan hal lainnya (every-thing else) adalah masih dugaan yang bersifat hipotesa yang perlu kita uji kebenarannya dengan pakai alat uji atau semacam beberapa analisis untuk memperoleh hal/bagian mana yang dapat kita terima sebagai kebenaran dan hal/bagian mana yang harus kita tolak karena mengandung kesalahan.
1. Analisis IB (Initialize Board) Catur_Nine
Papan (board) Catur_nine yang berbentuk persegi empat sama sisi memiliki 9x9 = 81 petak yaitu putih dan hitam berselang-seling, dimana ada 2 kemungkinan susunan setiap petak putih dan hitam bisa diterapkan, tetapi hanya ada 1 yang harus kita pilih yang benar di antara keduanya, yaitu:
1. Petak hitam di setiap sudut papan (board)
2. Petak putih di setiap sudut papan (board)
Papan (board) catur_nine 9x9 petak dengan petak hitam di setiap sudut/pojok papan akan membuat petak di tengah-tengah papan adalah petak hitam juga, dan petak yang ditempati raja putih adalah petak hitam juga (bidak catur putih sebagai penentu). Sedangkan bila dibuat petak putih di setiap sudut/pojok papan, ini akan membuat petak di tengah-tengah papan adalah petak putih juga, dan petak yang ditempati raja putih adalah petak putih juga (susunan bidak hitam mengikuti susunan bidak putih karena bidak putih sebagai penentu).
Biasanya permainan catur yang me-representasi-kan perjalanan kehidupan, fenomena kehidupan seorang raja dalam suatu kerajaan atau seorang presiden sebagai kepala negara, maka raja (presiden) tersebut berada dalam ruang keadaan (state space) "gelap" dalam arti sebagai orang nomor satu di wilayah yang ia kepalai, seorang raja (presiden) yang baik dan benar adalah seorang yang memiliki tugas dan tanggung jawab yang besar untuk mensejahterakan rakyat dan memakmurkan negerinya, bahkan bila perlu ia harus rela mati duluan dengan cepat dibanding rakyatnya di dalam kerajaan (negara) yang ia pimpin demi menyelamatkan rakyatnya dari setiap ancaman maut kematian dari setiap serangan musuh yang datang. Keberadaan seorang raja dalam ruang keadaan "gelap" inilah yang dapat diilustrasikan oleh bidak raja putih yang menempati petak hitam dalam permainan di atas papan catur.
Dengan demikian hal yang dapat kita terima adalah bahwa papan (board) catur_nine 9x9 petak yang benar adalah papan (board) dengan petak hitam di setiap sudut papan (board) sehingga petak yang ditempati raja putih akan ada di petak hitam, dan otomatis petak tengah yang sebagai FFP (Forboden For Pawn) yang di tengah-tengah papan adalah petak hitam juga.
Berikut adalah kode yang sudah memperbaiki susunan setiap petak putih dan hitam pada papan catur_nine 9x9 agar sesuai dengan aturan yang benar, yaitu petak hitam di setiap sudut papan.
Modifikasi:
-
Menentukan koordinat petak e5
- Papan 9×9 menggunakan notasi berbasis indeks array.
- e5 dalam indeks array adalah
(4, 4)
, karena indeks dimulai dari0
.
-
Mengubah warna petak e5 menjadi putih dalam fungsi
draw_board()
Kode yang telah dimodifikasi
import pygame
import sys
import time
# === KONFIGURASI TIMER ===
WHITE_TIME = 7200 # 2 Jam dalam detik
BLACK_TIME = 7200
# === KONFIGURASI PYGAME ===
pygame.init()
# Ukuran layar
SCREEN_WIDTH, SCREEN_HEIGHT = 900, 700
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Chess Nine with Timer")
# Ukuran papan catur
BOARD_SIZE = 585
TILE_SIZE = BOARD_SIZE // 9
BOARD_X = (SCREEN_WIDTH - BOARD_SIZE) // 2 - 90 # Papan sedikit ke kiri agar pas di tengah layar
BOARD_Y = (SCREEN_HEIGHT - BOARD_SIZE) // 2 - (-60) # Papan sedikit turun agar Timer atas pas
# Posisi Timer (Digeser ke kiri sejauh 150 pixel)
TIMER_WIDTH, TIMER_HEIGHT = 200, 60
TIMER_SHIFT_LEFT = 150 # Geser ke kiri sejauh 150 pixel
TIMER_WHITE_X, TIMER_WHITE_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y - TIMER_HEIGHT - 10
TIMER_BLACK_X, TIMER_BLACK_Y = SCREEN_WIDTH - TIMER_WIDTH - 20 - TIMER_SHIFT_LEFT, BOARD_Y + BOARD_SIZE + 10
# Warna
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BROWN = (240, 217, 181)
DARK_BROWN = (181, 136, 99)
RED = (200, 50, 50)
GRAY = (50, 50, 50)
BLUE = (100, 149, 237)
# Font Timer
font = pygame.font.Font(None, 40)
# Timer awal
white_timer = WHITE_TIME
black_timer = BLACK_TIME
turn = "white"
# === FUNGSI GAMBAR PAPAN DENGAN ATURAN PETAK HITAM DI SUDUT ===
def draw_board():
for row in range(9):
for col in range(9):
# Petak e5 (indeks array: 4,4) diwarnai putih
if row == 4 and col == 4:
color = WHITE
else:
# Warna petak papan catur normal
color = DARK_BROWN if (row + col) % 2 == 0 else LIGHT_BROWN
pygame.draw.rect(screen, color,
(BOARD_X + col * TILE_SIZE, BOARD_Y + row * TILE_SIZE, TILE_SIZE, TILE_SIZE))
# === FUNGSI FORMAT TIMER ===
def format_time(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
return f"{hours:02}:{minutes:02}:{seconds:02}"
# === FUNGSI GAMBAR TIMER DALAM KOTAK ===
def draw_timer_box(x, y, time_text, label):
pygame.draw.rect(screen, GRAY, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10)
pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10)
label_text = font.render(label, True, WHITE)
time_display = font.render(time_text, True, WHITE)
screen.blit(label_text, (x + 10, y + 5))
screen.blit(time_display, (x + 10, y + 30))
# === LOOP GAME UTAMA ===
clock = pygame.time.Clock()
last_time = time.time()
running = True
while running:
screen.fill(WHITE)
# Hitung waktu yang berlalu
current_time = time.time()
elapsed = current_time - last_time
if elapsed >= 1:
if turn == "white":
white_timer = max(0, white_timer - 1)
else:
black_timer = max(0, black_timer - 1)
last_time = current_time
# Gambar papan catur dengan aturan petak hitam di sudut
draw_board()
# Gambar timer putih dan hitam dengan posisi yang benar
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")
# Event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
turn = "black" if turn == "white" else "white"
pygame.display.flip()
clock.tick(30)
pygame.quit()
sys.exit()
📌 Perubahan & Peningkatan
✅ Petak e5 berwarna putih
- Ditentukan dengan kondisi
if row == 4 and col == 4
dalam fungsidraw_board()
. - Menggunakan warna WHITE
(255, 255, 255)
.
2. Analisis ISPP (Initialize Starting Positions of The Pieces) Catur_Nine
Dari 7 jenis buah catur_nine di masing-masing warna yaitu pion (pawn), kuda (knight), gajah (bishop), benteng (rook), ratu (queen), raja (king), dan garuda yang akan diletakkan di atas papan catur_nine sebagai posisi awal tentunya masing-masing bidak harus diposisikan di petak yang benar menurut susunan yang diharapkan sehingga dapat merepresentasikan perjalanan kehidupan.
Bila dilihat dari sejarah terciptanya catur 8x8 petak yang konvensional yang berasal dari India, bahwa catur 8x8 petak ini memposisikan semua barisan pion berada di depan sebagai pioner (perintis) gerakan bagi semua perwira yang di belakangnya, setiap pion bernilai 1. Lalu susunan para perwira ada di belakang pion, dan pada bidak perwira putih yang di sebelah kiri raja putih yang tersusun dimulai dari sudut kiri adalah benteng, kuda, gajah, dan ratu, sedangkan yang di sebelah kanan raja putih yang susunan dimulai dari sudut kanan adalah benteng, kuda, dan gajah, sedangkan raja putih berada di antara ratu dan gajah, posisi awal (starting position) demikian melambangkan suatu barisan keberadaan pasukan di dalam sebuah kerajaan (kerajaan catur putih).
Selain melambangkan suatu barisan keberadaan pasukan di dalam sebuah kerajaan. posisi awal (starting position) ini juga dapat mengilustrasikan dua unsur antara spirituil (rohani) dan kedagingan (sekuler) dimana barisan para perwira menyimbolkan berunsur spirituil (rohani/kelas tinggi) berada di bawah (belakang) untuk mengangkat (mengedepankan) barisan para pion yang berunsur kedagingan (sekuler/kelas rendah) agar semuanya siap siaga melakukan tugas dan tanggung jawab masing-masing. Para perwira meski besar namun di belakang, dan para pion meski di depan namun kecil.
Posisi Awal (Starting Position) Raja dan Ratu
Pada Catur konvensional 8x8 petak, raja catur putih menempatkan posisi awal (starting position) ratunya pada posisi di sebelah kiri-nya (bila tampak depan pemain bidak putih, maka ratu ada di sebelah kiri raja putih). Posisi awal bidak raja dan ratu, dan bidak hitam lainnya menyesuaikan pada susunan bidak putih karena bidak putih sebagai penentu.
Sedangkan pada catur_nine 9x9 petak ini, berbeda, catur bidak putih menempatkan posisi awal (starting position) ratu putih pada posisi di sebelah kanan rajanya (bila tampak depan pemain bidak putih, maka ratu putih berada di sebelah kanan raja putih). Sedangkan pada bidak hitam, posisi awal (starting position) raja, ratu, dan bidak hitam lainnya menyesuaikan pada susunan bidak putih karena bidak putih adalah sebagai penentu.
Berikut diberikan gambar posisi awal (starting positiion) bidak raja dan ratu putih serta raja dan ratu hitam di atas papan catur_nine 9x9 petak:
Langkah bidak Kuda dan Gajah
Kode yang dibuat ini sudah sangat baik dan cukup optimal untuk permainan catur 9x9 dengan posisi bidak awal yang unik, termasuk bidak "Garuda". Berikut adalah beberapa catatan perbaikan dan saran untuk meningkatkan performa serta memastikan game berjalan lebih lancar:
Perbaikan dan Peningkatan
-
Validasi Direktori Gambar Bidak:
Jika gambar bidak tidak ditemukan, bisa menampilkan placeholder atau error handling agar tidak terjadi crash.if os.path.exists(path): img = pygame.image.load(path) else: print(f"WARNING: Gambar {path} tidak ditemukan!") continue
-
Optimasi Timer dengan
pygame.time.get_ticks()
Daripada menggunakantime.time()
, lebih baik gunakanpygame.time.get_ticks()
untuk menghitung waktu yang lebih akurat tanpa perlu menggunakantime.sleep()
.last_time = pygame.time.get_ticks()
Lalu di dalam loop:
current_time = pygame.time.get_ticks() elapsed = (current_time - last_time) // 1000 # Konversi ke detik
-
Peningkatan Interaksi Pemain
Kamu bisa menambahkan fitur berikut:- Pemain bisa memilih dan memindahkan bidak.
- Highlight bidak yang bisa dipilih.
- Validasi langkah-langkah yang sah.
-
Menambahkan Efek Suara (Opsional)
Bisa ditambahkan suara ketika pemain menggerakkan bidak atau ketika timer hampir habis. -
Menggunakan Dictionary untuk Bidak Aktif
Saat ini bidak hanya digambar dalam posisi awal, tapi bisa diperbaiki dengan dictionary yang menyimpan posisi terkini setiap bidak. -
Membuat Logika Pergerakan Bidak
Tambahkan fungsi untuk mendeteksi langkah valid dan update posisi bidak setelah bidak dipilih.e Penamaan Variabel Timer: Label timer jangan tertukar antara "WHITE" dan "BLACK".
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE")
Jika penulisan Label Timer salah, maka solusi perbaikannya mengubah baris berikut pada fungsi gambar timer:
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(white_timer), "WHITE")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(black_timer), "BLACK")
Menjadi:
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE")
Penjelasan Perbaikan:
TIMER_WHITE_X, TIMER_WHITE_Y seharusnya menampilkan waktu pemain putih, bukan hitam.
TIMER_BLACK_X, TIMER_BLACK_Y seharusnya menampilkan waktu pemain hitam, bukan putih.
Pengecekan Timer:
- Perubahan giliran bekerja dengan baik?
Setiap klik mouse, giliran berpindah antara "white" dan "black".
Timer pemain yang sedang berjalan berkurang 1 detik setiap detiknya.
- Timer tidak berkurang saat permainan dihentikan?
Saat program keluar (pygame.QUIT), semua proses berhenti tanpa error.
8. Manajemen Waktu (Timer):Saat ini, timer hanya berjalan saat ada perubahan waktu (elapsed >= 1). Sebaiknya gunakan pygame.time.get_ticks() untuk akurasi lebih baik.
9. Direktori Gambar:IMAGE_DIR = "/storage/emulated/0/AppJadi/Catur/Catur_9x9/images" perlu dipastikan benar, karena akses ini bergantung pada sistem operasi yang digunakan.
10. Penanganan Klik Mouse:Saat ini, klik hanya mengganti giliran. Jika ingin memungkinkan interaksi lebih lanjut, Anda bisa menambahkan sistem pemilihan bidak dan gerakan.
11. Optimasi Struktur Kode:Misalnya, memisahkan fungsi untuk menangani logika giliran dan gerakan bidak agar kode lebih rapi.
12. Tambahan (Opsional):
Jika ingin memberikan indikasi visual untuk giliran pemain, bisa menambahkan efek highlight pada timer pemain yang sedang bermain.
Misalnya, menambahkan warna latar berbeda:
def draw_timer_box(x, y, time_text, label, is_turn):
color = RED if is_turn else GRAY # Warna berbeda jika sedang berjalan
pygame.draw.rect(screen, color, (x, y, TIMER_WIDTH, TIMER_HEIGHT), border_radius=10)
pygame.draw.rect(screen, BLUE, (x, y, TIMER_WIDTH, TIMER_HEIGHT), 3, border_radius=10)
label_text = font.render(label, True, WHITE)
time_display = font.render(time_text, True, WHITE)
screen.blit(label_text, (x + 10, y + 5))
screen.blit(time_display, (x + 10, y + 30))
Lalu panggil fungsi ini dengan:
draw_timer_box(TIMER_WHITE_X, TIMER_WHITE_Y, format_time(black_timer), "BLACK", turn == "black")
draw_timer_box(TIMER_BLACK_X, TIMER_BLACK_Y, format_time(white_timer), "WHITE", turn == "white")
Ini akan membuat timer pemain yang sedang berjalan memiliki latar merah sebagai indikator.
Secara keseluruhan, kode ini sudah sangat bagus, bekerja dengan baik, dan siap dikembangkan lebih lanjut. dengan menambahkan fitur tambahan sesuai preferensi atau kebutuhan seperti validasi gerakan, AI lawan, atau fitur lainnya.
Jadi, untuk permainan catur_nine 9x9 petak ini, hanya ada satu starting position paling terbaik, sudah kita peroleh untuk formasi 2 kuda, 1 garuda sebagai pilihan formasi terbaik bagi setiap pemain ketika akan memulai permainan buah catur_nine di atas papan 9x9 petak.
Comments
Post a Comment