Neve; python chess.py
Forrás1;
class Piece:
def __init__(self, color):
self.color = color
class Pawn(Piece):
def valid_moves(self, position):
# Itt egyszerűsítjük a bábuk mozgását
direction = 1 if self.color == "white" else -1
return [(position[0] + direction, position[1])]
class Rook(Piece):
def valid_moves(self, position):
return [(position[0] + i, position[1]) for i in range(-7, 8) if i != 0] + \
[(position[0], position[1] + i) for i in range(-7, 8) if i != 0]
class Board:
def __init__(self):
self.board = self.initialize_board()
def initialize_board(self):
board = [[None for _ in range(8)] for _ in range(8)]
# Helyezzük el a bábukat (csak példaként az első sorban)
board[0][0] = Rook("white")
board[0][1] = Pawn("white")
# További bábuk elhelyezése...
return board
def display(self):
for row in self.board:
row_display = []
for piece in row:
if piece is None:
row_display.append(".")
else:
row_display.append("P" if isinstance(piece, Pawn) else "R")
print(" ".join(row_display))
def main():
board = Board()
board.display()
while True:
move = input("Add meg a bábú mozgását (formátum: 'x y'): ")
x, y = map(int, move.split())
# Itt a bábuk mozgatásának logikáját implementálhatjuk
# Ellenőrizzük, hogy a mozgás érvényes-e, stb.
if __name__ == "__main__":
main()
vagy grafikusan
Készíthetünk egy alapvető grafikus sakkprogramot Python-ban a Pygame könyvtár segítségével. A program tartalmazza a sakktábla kirajzolását, a bábuk kezdeti elhelyezését, valamint a bábuk mozgatásának alapvető logikáját. Itt egy egyszerű példa:
Először is, győződj meg róla, hogy a Pygame telepítve van.
Ezt a következő paranccsal teheted meg: pip install pygame
Forrás2;
import pygame
import sys
# Alap konfigurációk
WIDTH, HEIGHT = 800, 800
SQUARE_SIZE = HEIGHT // 8
FPS = 60
# Színek
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# Bábuk
PIECES = {
'b': '♟', 'w': '♙',
'r': '♖', 'n': '♘', 'b': '♗', 'q': '♕', 'k': '♔',
}
# Sakktábla inicializálása
class Chessboard:
def __init__(self):
self.board = self.create_board()
def create_board(self):
# 8x8-as tábla létrehozása
board = [['' for _ in range(8)] for _ in range(8)]
# A bábuk elhelyezése
board[0] = ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r']
board[1] = ['p'] * 8
board[6] = ['P'] * 8
board[7] = ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']
return board
def draw(self, screen):
for y in range(8):
for x in range(8):
color = WHITE if (x + y) % 2 == 0 else BLACK
pygame.draw.rect(screen, color, (x * SQUARE_SIZE, y * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE))
piece = self.board[y][x]
if piece:
font = pygame.font.Font(None, 74)
text = font.render(PIECES[piece.lower()], True, WHITE if piece.isupper() else BLACK)
screen.blit(text, (x * SQUARE_SIZE + 15, y * SQUARE_SIZE + 5))
# Főfuggetlen program
def main():
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Sakk')
clock = pygame.time.Clock()
chessboard = Chessboard()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill(BLACK)
chessboard.draw(screen)
pygame.display.flip()
clock.tick(FPS)
if __name__ == '__main__':
main()
Hogyan fut le;
Könyvtárak: A program importálja a pygame és sys könyvtárakat.
Beállítások: A sakktábla méretét, a négyzetek méretét és a frames per second (FPS) beállítást definiáltuk.
Színek: Definiáltuk a fekete és fehér szín értékeit.
Bábuk: A bábukat Unicode karakterek segítségével reprezentáljuk.
Sakktábla osztály: Az osztály létrehozza a sakktáblát, elhelyezi a bábukat, és rajzolja a táblát.
Fő program: Inicializálja a Pygame könyvtárat, létrehozza a sakktáblát, és megkezdi az eseménykezelést és a frissítést.
Futtatás
A fenti kódot egy .py kiterjesztésű fájlba (pl. chess.py) másolva, majd a terminálban futtatva indíthatod a sakkprogramot:
A Forrás2-nek a kódja biztosan hibás!
VálaszTörlésOlyan PIECES objektum kulcsra hivatkozik, ami nem is létezik. Továbbá szükséges felvenni kisbetűvel az összes bábút (a fehéreket) és nagybetűvel a feketéket. Aztán meg a kijelzéssel is baj van, mert az alap fontkészlet nem tudja a speciális UTF8 karaktereket megjeleníteni. Fontkészletet kell cserélni, pl. "segoeuisymbol"-ra. És További kijelzési hiba, hogy a fekete betűk/karakterek nem fognak látszódni a fekete mezőn ill. a fehérek a fehéren. Kijelzéskor ellenőrizni kell, hogy milyen karakter színe és milyen a mező színe és ha egyezik, akkor cserélni kell a karakter színét. A javítások így néznek ki:
# Bábuk : (p)awn/(P)AWN, (r)ook/(R)OOK, k(n)ight/K(N)IGHT, (b)ishop/(B)ISHOP, (q)ueen/(Q)UEEN, (k)ing/(K)ING
PIECES = {
'p': '♙', 'r': '♖', 'n': '♘', 'b': '♗', 'q': '♕', 'k': '♔',
'P': '♟', 'R': '♜', 'N': '♞', 'B': '♝', 'Q': '♛', 'K': '♚',
}
# A bábuk elhelyezése
board[0] = ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r']
board[1] = ['p'] * 8
board[6] = ['P'] * 8
board[7] = ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']
if piece:
#font = pygame.font.Font(None, 74)
font = pygame.font.SysFont("segoeuisymbol", 74)
if(color == WHITE and piece.isupper()):
piece = piece.lower()
if(color == BLACK and piece.islower()):
piece = piece.upper()
text = font.render(PIECES[piece.lower()], True, WHITE if piece.isupper() else BLACK)
screen.blit(text, (x * SQUARE_SIZE + 15, y * SQUARE_SIZE + 5))
Formázott forrás megosztva itt: https://www.pythonmorsels.com/p/38pgc/
Ha esetleg a fenti kód lejárna 6 nap után, akkor itt továbbra is elérhető: https://files.catbox.moe/xx8wsy.py
VálaszTörlés