Spaces:
Sleeping
Sleeping
import chess | |
import chess.svg | |
import time | |
class Game: | |
def __init__(self): | |
# Initialize the chess board | |
self.board = chess.Board() | |
self.sequence = [] | |
self.counter = 0 | |
def call_gemma(self): | |
template = "Instruction:\n{instruction}\n\nResponse:\n{response}" | |
prompt = template.format( | |
instruction=f"Predict the next chess move in the sequence {str(self.sequence)}", | |
response="",) | |
# output = gemma_lm.generate(prompt, max_length=max_output_len) | |
# gemma_move = output.split(' ')[-1].strip("'") | |
gemma_move = 'e5' | |
if self.make_move(gemma_move): | |
print(f'Gemma plays {self.sequence[-1]}! (Current Sequence: {self.sequence} {len(self.sequence)})') | |
self.counter = 0 | |
return self.display_board() | |
elif self.counter < 10: | |
self.counter += 1 | |
print(self.counter) | |
self.call_gemma() | |
else: | |
print("Gemma quit...") | |
return None | |
def gemma_moves(self): | |
print(f"Gemma is thinking...(Current Sequence: {self.sequence} {len(self.sequence)})") | |
time.sleep(3) | |
return self.call_gemma() | |
def player_moves(self, move): | |
return self.make_move(move) | |
# Function to display the board | |
def display_board(self): | |
# clear_output(wait=True) | |
# display(SVG(chess.svg.board(board=self.board))) | |
board_svg = chess.svg.board(board=self.board) | |
# return svg2png(bytestring=board_svg) | |
return board_svg | |
# Function to make a move | |
def make_move(self, move): | |
try: | |
update = self.board.parse_san(move) | |
self.board.push(update) | |
# self.display_board() | |
self.sequence.append(move) | |
return self.display_board() | |
except: | |
print(f"Invalid move '{move}'. Use algebraic notation (e.g., 'e4', 'Nf3', 'Bxc4') or ask Gemma for help.") | |
return None | |
def reset_board(self): | |
self.board = chess.Board() | |
# self.board.reset | |
return self.display_board() | |
def generate_moves(self, move): | |
yield self.player_moves(move) | |
yield self.gemma_moves() | |
def main(): | |
end_game = False # Change this to False | |
play_match = Game() | |
play_match.display_board() | |
while end_game is False: | |
move = input("Your move (or 'No' to end game):") | |
if 'No' in move: | |
del play_match | |
end_game = True | |
else: | |
play_match.player_moves(move) | |
if __name__ == '__main__': | |
main() |