From 428ba19a1984f385f5fc55201734a150f59dafcb Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Sun, 25 Oct 2020 02:21:55 +0100 Subject: [PATCH] Add map terrain. --- new2/plomrogue/game.py | 4 +++- new2/plomrogue/mapping.py | 12 ++++++++++++ new2/rogue_chat.html | 23 ++++++++++++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/new2/plomrogue/game.py b/new2/plomrogue/game.py index a8fc4ed..e8c85da 100755 --- a/new2/plomrogue/game.py +++ b/new2/plomrogue/game.py @@ -4,7 +4,7 @@ from plomrogue.commands import cmd_ALL, cmd_LOGIN, cmd_QUERY from plomrogue.io import GameIO from plomrogue.misc import quote from plomrogue.things import Thing, ThingPlayer -from plomrogue.mapping import YX, MapGeometrySquare +from plomrogue.mapping import YX, MapGeometrySquare, Map @@ -44,6 +44,7 @@ class Game(GameBase): self.thing_type = Thing self.thing_types = {'player': ThingPlayer} self.sessions = {} + self.map = Map(self.map_geometry.size) def get_string_options(self, string_option_type): if string_option_type == 'direction': @@ -59,6 +60,7 @@ class Game(GameBase): self.io.send('TURN ' + str(self.turn)) for t in self.things: send_thing(t) + self.io.send('MAP %s %s' % (self.map_geometry.size, quote(self.map.terrain))) self.io.send('GAME_STATE_COMPLETE') def run_tick(self): diff --git a/new2/plomrogue/mapping.py b/new2/plomrogue/mapping.py index 585000a..0a96058 100644 --- a/new2/plomrogue/mapping.py +++ b/new2/plomrogue/mapping.py @@ -54,3 +54,15 @@ class MapGeometrySquare(MapGeometryWithLeftRightMoves): def move_DOWN(self, start_pos): return YX(start_pos.y + 1, start_pos.x) + + + +class Map(): + + def __init__(self, map_size): + self.size = map_size + self.terrain = '.' * self.size_i + + @property + def size_i(self): + return self.size.y * self.size.x diff --git a/new2/rogue_chat.html b/new2/rogue_chat.html index cefc451..f1146cb 100644 --- a/new2/rogue_chat.html +++ b/new2/rogue_chat.html @@ -78,7 +78,7 @@ let parser = { } return tokens; }, - parse_position(position_string) { + parse_yx(position_string) { let coordinate_strings = position_string.split(',') let position = [0, 0]; position[0] = coordinate_strings[0].slice(2); @@ -101,6 +101,18 @@ let tui = { }, draw_map: function() { terminal.drawBox(0, 0, terminal.rows, terminal.cols / 2); + let map_line = ""; + let y = 0; + for (let i = 0, x = 0; i < game.map.length; i++, x++) { + if (x >= game.map_size[1]) { + terminal.write(y, 0, map_line); + map_line = ""; + x = 0; + y += 1; + }; + map_line += game.map[i]; + } + terminal.write(y, 0, map_line); for (const t in game.things) { terminal.write(game.things[t][0], game.things[t][1], '@'); } @@ -124,7 +136,9 @@ let tui = { let game = { things: {}, - tick: 0 + tick: 0, + map: "", + map_size: [1,1] } let chat = { @@ -177,7 +191,10 @@ websocket.onmessage = function (event) { game.things = {} game.tick = parseInt(tokens[1]); } else if (tokens[0] === 'THING_POS') { - game.things[tokens[1]] = parser.parse_position(tokens[2]); + game.things[tokens[1]] = parser.parse_yx(tokens[2]); + } else if (tokens[0] === 'MAP') { + game.map_size = parser.parse_yx(tokens[1]); + game.map = tokens[2] } else if (tokens[0] === 'GAME_STATE_COMPLETE') { tui.draw_tick_line(); tui.draw_map(); -- 2.30.2