--------
import matplotlib.pyplot as plt
import numpy as np
# A 3D vizualizáció beállítása
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
ax.set_box_aspect([1, 1, 0.4]) # Laposabbá teszi a táblát
# --- 1. SAKKTÁBLA LÉTREHOZÁSA ---
board_size = 8
x = np.arange(board_size)
y = np.arange(board_size)
xx, yy = np.meshgrid(x, y)
# Sakktábla mintázat (fekete-fehér)
colors = np.where((xx + yy) % 2 == 0, 'w', 'k')
# Mezők lerakása 3D-ben
for i in range(board_size):
for j in range(board_size):
color = 'gray' if colors[i, j] == 'w' else 'saddlebrown' # Világos/sötét mezők
ax.bar3d(i, j, 0, 1, 1, 0.1, color=color, edgecolor='black')
# --- 2. BÁBUK DEFINIÁLÁSA ---
def draw_piece(ax, x_pos, y_pos, piece_type, color):
z_base = 0.1 # A bábú alja a tábla tetején van
# Bástya (henger)
if piece_type == 'Rook':
height = 0.5
ax.bar3d(x_pos + 0.2, y_pos + 0.2, z_base, 0.6, 0.6, height, color=color)
# Huszár (gúla / henger kombináció stilizálva)
elif piece_type == 'Knight':
height = 0.5
x_c, y_c = x_pos + 0.5, y_pos + 0.5
ax.plot([x_c], [y_c], [z_base + height], marker='^', markersize=25, color=color)
ax.bar3d(x_pos + 0.3, y_pos + 0.3, z_base, 0.4, 0.4, height, color=color)
# Futó (kúp / gömb)
elif piece_type == 'Bishop':
height = 0.6
ax.bar3d(x_pos + 0.3, y_pos + 0.3, z_base, 0.4, 0.4, height, color=color)
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x_sphere = 0.2 * np.cos(u) * np.sin(v) + x_pos + 0.5
y_sphere = 0.2 * np.sin(u) * np.sin(v) + y_pos + 0.5
z_sphere = 0.2 * np.cos(v) + z_base + height
ax.plot_surface(x_sphere, y_sphere, z_sphere, color=color)
# Vezér (korona vagy magas henger)
elif piece_type == 'Queen':
height = 0.8
ax.bar3d(x_pos + 0.25, y_pos + 0.25, z_base, 0.5, 0.5, height, color=color)
# Király (kereszt vagy magas henger)
elif piece_type == 'King':
height = 0.9
ax.bar3d(x_pos + 0.25, y_pos + 0.25, z_base, 0.5, 0.5, height, color=color)
# Gyalog (kisebb henger + gömb)
elif piece_type == 'Pawn':
height = 0.4
ax.bar3d(x_pos + 0.3, y_pos + 0.3, z_base, 0.4, 0.4, height, color=color)
# Gömb a gyalog tetejére
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x_sphere = 0.2 * np.cos(u) * np.sin(v) + x_pos + 0.5
y_sphere = 0.2 * np.sin(u) * np.sin(v) + y_pos + 0.5
z_sphere = 0.2 * np.cos(v) + z_base + height
ax.plot_surface(x_sphere, y_sphere, z_sphere, color=color)
# --- 3. BÁBUK FELHELYEZÉSE (Kezdőállás) ---
# Sötét bábuk (feketék)
black_color = 'darkslategray'
white_color = 'whitesmoke'
# Gyalogok elhelyezése
for i in range(8):
draw_piece(ax, i, 1, 'Pawn', black_color)
draw_piece(ax, i, 6, 'Pawn', white_color)
# Tisztek elhelyezése
pieces_order = ['Rook', 'Knight', 'Bishop', 'Queen', 'King', 'Bishop', 'Knight', 'Rook']
for i, piece in enumerate(pieces_order):
draw_piece(ax, i, 0, piece, black_color)
draw_piece(ax, i, 7, piece, white_color)
# --- 4. GRAFIKA MEGJELENÍTÉSE ---
ax.set_xlabel('X tengely')
ax.set_ylabel('Y tengely')
ax.set_zlabel('Z tengely')
ax.set_xlim(-1, 9)
ax.set_ylim(-1, 9)
ax.set_zlim(0, 2)
plt.title("3D Sakktábla Pythonban")
plt.show()
------------
futtatás; https://onecompiler.com/pygame#draft-j95w
Nincsenek megjegyzések:
Megjegyzés küldése