Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pelita for Excel #466

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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)