Skip to content

Commit

Permalink
alpha check-in of GUI for load game
Browse files Browse the repository at this point in the history
  • Loading branch information
bcorfman committed Oct 24, 2022
1 parent 72de3a3 commit ce01c0e
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 77 deletions.
4 changes: 4 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[flake8]
exclude =
__pypackages__
.pytest_cache
.github
.venv
.vscode
65 changes: 35 additions & 30 deletions game/gamemanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
from tkinter.filedialog import askopenfilename, asksaveasfilename
from tkinter.messagebox import askyesnocancel, showerror
from util.globalconst import BLACK, WHITE, TITLE, VERSION, KING, MAN, PROGRAM_TITLE, TRAINING_DIR
from util.globalconst import square_map, keymap
from util.globalconst import keymap
from game.checkers import Checkers
from gui.boardview import BoardView
from gui.filelist import FileList
from gui.playercontroller import PlayerController
from gui.alphabetacontroller import AlphaBetaController
from parsing.gamepersist import SavedGame
from parsing.
from parsing.PDN import PDNReader


class GameManager(object):
Expand All @@ -34,11 +35,11 @@ def set_controllers(self):
if self.num_players == 0:
self.controller1 = AlphaBetaController(model=self.model,
view=self.view,
searchtime=think_time,
searchtime=self.think_time,
end_turn_event=self.turn_finished)
self.controller2 = AlphaBetaController(model=self.model,
view=self.view,
searchtime=think_time,
searchtime=self.think_time,
end_turn_event=self.turn_finished)
elif self.num_players == 1:
# assumption here is that Black is the player
Expand All @@ -47,7 +48,7 @@ def set_controllers(self):
end_turn_event=self.turn_finished)
self.controller2 = AlphaBetaController(model=self.model,
view=self.view,
searchtime=think_time,
searchtime=self.think_time,
end_turn_event=self.turn_finished)
# swap controllers if White is selected as the player
if self.player_color == WHITE:
Expand Down Expand Up @@ -101,31 +102,35 @@ def load_game(self, filename):
self._stop_updates()
try:
reader = PDNReader.from_file(filename)
# saved_game = SavedGame()
# saved_game.read(filename)
self.model.curr_state.clear()
self.model.curr_state.to_move = saved_game.to_move
self.num_players = saved_game.num_players
game_list = reader.get_game_list()
if len(game_list) > 1:
FileList(self._root, game_list)
else:
game = reader.read_game(0)
print(game)
# self.model.curr_state.clear()
# self.model.curr_state.to_move = saved_game.to_move
# self.num_players = saved_game.num_players
# this section will work
squares = self.model.curr_state.squares
for i in saved_game.black_men:
squares[square_map[i]] = BLACK | MAN
for i in saved_game.black_kings:
squares[square_map[i]] = BLACK | KING
for i in saved_game.white_men:
squares[square_map[i]] = WHITE | MAN
for i in saved_game.white_kings:
squares[square_map[i]] = WHITE | KING
self.model.curr_state.reset_undo()
self.model.curr_state.redo_list = saved_game.moves
self.model.curr_state.update_piece_count()
self.view.reset_view(self.model)
self.view.serializer.restore(saved_game.description)
self.view.curr_annotation = self.view.get_annotation()
self.view.flip_board(saved_game.flip_board)
self.view.update_statusbar()
self.parent.set_title_bar_filename(filename)
self.filename = filename
# squares = self.model.curr_state.squares
# for i in saved_game.black_men:
# squares[square_map[i]] = BLACK | MAN
# for i in saved_game.black_kings:
# squares[square_map[i]] = BLACK | KING
# for i in saved_game.white_men:
# squares[square_map[i]] = WHITE | MAN
# for i in saved_game.white_kings:
# squares[square_map[i]] = WHITE | KING
# self.model.curr_state.reset_undo()
# self.model.curr_state.redo_list = saved_game.moves
# self.model.curr_state.update_piece_count()
# self.view.reset_view(self.model)
# self.view.serializer.restore(saved_game.description)
# self.view.curr_annotation = self.view.get_annotation()
# self.view.flip_board(saved_game.flip_board)
# self.view.update_statusbar()
# self.parent.set_title_bar_filename(filename)
# self.filename = filename
except IOError as err:
showerror(PROGRAM_TITLE, 'Invalid file. ' + str(err))

Expand Down Expand Up @@ -185,7 +190,7 @@ def _write_file(self, filename):
saved_game.white_men.append(keymap[i])
elif sq == WHITE | KING:
saved_game.white_kings.append(keymap[i])
saved_game.description = self.view.serializer.dump()
# saved_game.description = self.view.serializer.dump()
saved_game.moves = self.model.curr_state.redo_list
saved_game.flip_board = self.view.flip_view
saved_game.write(filename)
Expand Down
26 changes: 13 additions & 13 deletions gui/aboutbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,49 @@


class AboutBox(Dialog):
def __init__(self, parent):
Dialog.__init__(self, parent)
def __init__(self, parent, title):
Dialog.__init__(self, parent, title)
self.canvas = None
self.button = None
self.blank = None

def body(self, master):
self.canvas = Canvas(self, width=300, height=275)
self.canvas = Canvas(self, width=300, height=275, bg='light gray')
self.canvas.pack(side=TOP, fill=BOTH, expand=0)
self.canvas.create_text(152, 47, text='Raven', fill='black',
font=('Helvetica', 36))
self.canvas.create_text(150, 45, text='Raven', fill='white',
font=('Helvetica', 36))
self.canvas.create_text(150, 85, text='Version ' + VERSION,
fill='black',
font=('Helvetica', 12))
font=('Helvetica', 14))
self.canvas.create_text(150, 115, text='An open source checkers program',
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 130, text='by Brandon Corfman',
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 160, text='Evaluation function translated from',
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 175, text="Martin Fierz's Simple Checkers",
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 205, text="Alpha-beta search code written by",
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 220, text="Peter Norvig for the AIMA project;",
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 235, text="adopted for checkers usage",
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
self.canvas.create_text(150, 250, text="by Brandon Corfman",
fill='black',
font=('Helvetica', 10))
font=('Helvetica', 12))
return self.canvas

def cancel(self, event=None):
def cancel(self, _=None):
self.destroy()

def buttonbox(self):
Expand Down
2 changes: 1 addition & 1 deletion gui/boardview.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ def notify(self, move):

def get_annotation(self):
# return self.serializer.dump()
pass
return ""

def erase_checker(self, index):
self.canvas.delete('c'+str(index))
Expand Down
44 changes: 44 additions & 0 deletions gui/filelist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from tkinter import Button, Frame, Listbox, Variable, TOP
from tkinter.simpledialog import Dialog
from gui.autoscrollbar import AutoScrollbar


class FileList(Dialog):
def __init__(self, parent, game_titles):
self._master = parent
self.filelist = None
self.scrollbar = None
self.ok_button = None
self.blank = None
self.result = False
self._titles = tuple(item.name for item in game_titles)
Dialog.__init__(self, self._master, "Select game title")

def body(self, master):
var = Variable(value=self._titles)
panel = Frame(self, borderwidth=1, relief='sunken')
self.scrollbar = AutoScrollbar(self, container=panel,
row=1, column=1, sticky='ns')
self.filelist = Listbox(self, width=40, height=20, listvariable=var, yscrollcommand=self.scrollbar.set)
self.filelist.pack(side=TOP)
self.scrollbar.config(command=self.filelist.yview)
panel.pack(side='top', fill='both', expand=True)
self.filelist.grid(in_=panel, row=1, column=0, sticky='nsew')
panel.grid_rowconfigure(1, weight=1)
panel.grid_columnconfigure(0, weight=1)

def apply(self):
self.result = True

def cancel(self, _=None):
if self._master is not None:
self._master.focus_set()
self.destroy()

def buttonbox(self):
self.ok_button = Button(self, text='OK', width=5, command=self.apply)
self.ok_button.pack(side="left")
cancel_button = Button(self, text='Cancel', width=5, command=self.cancel)
cancel_button.pack(side="right")
self.bind("<Return>", lambda event: self.apply())
self.bind("<Escape>", lambda event: self.cancel())
13 changes: 10 additions & 3 deletions gui/prefdlg.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ def __init__(self, parent, title, font, size):
self.result = False
self.font = font
self.size = size
self._npFrame = None
self._fontFrame = None
self._fontLabel = None
self._fontCombo = None
self._sizeCombo = None
self._sizeFrame = None
self._sizeLabel = None
self.parent = None
Dialog.__init__(self, parent, title)

def body(self, master):
Expand All @@ -24,8 +32,7 @@ def body(self, master):
self._sizeFrame = Frame(self._npFrame, borderwidth=0)
self._sizeLabel = Label(self._sizeFrame, text='Size:', width=5)
self._sizeLabel.pack(side=LEFT, padx=3)
self._sizeCombo = Combobox(self._sizeFrame, values=range(8, 15),
state='readonly')
self._sizeCombo = Combobox(self._sizeFrame, values=list(range(8, 15)), state='readonly')
self._sizeCombo.pack(side=RIGHT, fill=X)
self._fontFrame.pack()
self._sizeFrame.pack()
Expand All @@ -38,7 +45,7 @@ def apply(self):
self.size = self._sizeCombo.get()
self.result = True

def cancel(self, event=None):
def cancel(self, _=None):
if self.parent is not None:
self.parent.focus_set()
self.destroy()
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def create_game_menu(self):
game.add_separator()
game.add_command(label='Exit', underline=0,
command=self._on_close)
self.menu_bar.add_cascade(label='_Game', menu=game)
self.menu_bar.add_cascade(label='Game', menu=game)

def create_options_menu(self):
options = Menu(self.menu_bar, tearoff=0)
Expand Down
Loading

0 comments on commit ce01c0e

Please sign in to comment.