Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pelita/scripts/pelita_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ def geometry_string(s):
viewer_opt = parser.add_mutually_exclusive_group()
viewer_opt.add_argument('--ascii', action='store_const', const='ascii',
dest='viewer', help='use the ASCII viewer')
viewer_opt.add_argument('--excel', action='store_const', const='excel',
dest='excel', help='use the Excel viewer')
viewer_opt.add_argument('--null', action='store_const', const='null',
dest='viewer', help='use the /dev/null viewer')
viewer_opt.add_argument('--progress', action='store_const', const='progress',
Expand Down Expand Up @@ -370,6 +372,8 @@ def main():
viewers = []
if dump:
viewers.append(pelita.viewer.DumpingViewer(open(dump, "w")))
if args.viewer == 'excel':
viewers.append(pelita.viewer.ExcelViewer())
if args.viewer == 'ascii':
viewers.append(pelita.viewer.AsciiViewer())
if args.viewer == 'progress':
Expand Down
50 changes: 50 additions & 0 deletions pelita/viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,53 @@ def observe(self, universe, game_state):
"game_state": game_state}}
self._send(message)


import xlsxwriter

class ExcelViewer(AbstractViewer):
""" A viewer which dumps to a given stream.
"""
def __init__(self):

# Create a workbook and add a worksheet.
self.workbook = xlsxwriter.Workbook('Pelita.xlsx')
self.blue_col = '#5e9ed9'
self.red_col = '#eb5a5a'
self.blue_wall_format = self.workbook.add_format({'bg_color': self.blue_col, 'pattern': 14, 'fg_color': 'white'})
self.red_wall_format = self.workbook.add_format({'bg_color': self.red_col, 'pattern': 14, 'fg_color': 'white'})

self.food_col = '#f796d5'
self.food_format = self.workbook.add_format({'font_color': self.food_col, 'align': 'center', 'valign': 'vcenter'})


self.blue_format = self.workbook.add_format({'font_color': self.blue_col, 'align': 'center', 'valign': 'vcenter'})
self.red_format = self.workbook.add_format({'font_color': self.red_col, 'align': 'center', 'valign': 'vcenter'})

def _send(self, universe):
worksheet = self.workbook.add_worksheet()

worksheet.set_column('A:ZZ', 2)

for (c, r), wall in universe.maze.items():
if wall:
if c < universe.maze.width // 2:
worksheet.write(r, c, ' ', self.blue_wall_format)
else:
worksheet.write(r, c, ' ', self.red_wall_format)

for (c, r) in universe.food:
worksheet.write(r, c, '●', self.food_format)

for bot in universe.bots:
c, r = bot.current_pos
format = self.blue_format if bot.index % 2 == 0 else self.red_format
bot_icon = 'ᗣ' if bot.is_destroyer else 'ᗧ'
worksheet.write(r, c, bot_icon, format)


def set_initial(self, universe):
self._send(universe)

def observe(self, universe, game_state):
self._send(universe)