home
·
contact
·
privacy
projects
/
plomrogue2-experiments
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Redo map system, add map visibility infrastructure.
[plomrogue2-experiments]
/
server_
/
game.py
diff --git
a/server_/game.py
b/server_/game.py
index 878917fbda7711a741c53a981737be741942ffda..4f31dc1fb5ff397665fa3b71143f4961d92085cb 100644
(file)
--- a/
server_/game.py
+++ b/
server_/game.py
@@
-19,11
+19,19
@@
def move_pos(direction, pos_yx):
pos_yx[1] -= 1
pos_yx[1] -= 1
+class Map(game_common.Map):
+
+ def get_line(self, y):
+ width = self.size[1]
+ return self.terrain[y * width:(y + 1) * width]
+
+
class World(game_common.World):
def __init__(self):
super().__init__()
self.Thing = Thing # use local Thing class instead of game_common's
class World(game_common.World):
def __init__(self):
super().__init__()
self.Thing = Thing # use local Thing class instead of game_common's
+ self.map_ = Map() # use extended child class
self.player_id = 0
def proceed_to_next_player_turn(self):
self.player_id = 0
def proceed_to_next_player_turn(self):
@@
-72,13
+80,16
@@
class Task:
test_pos = self.thing.position[:]
move_pos(direction, test_pos)
if test_pos[0] < 0 or test_pos[1] < 0 or \
test_pos = self.thing.position[:]
move_pos(direction, test_pos)
if test_pos[0] < 0 or test_pos[1] < 0 or \
- test_pos[0] >= self.thing.world.map_size[0] or \
- test_pos[1] >= self.thing.world.map_size[1]:
+ test_pos[0] >= self.thing.world.map_
.
size[0] or \
+ test_pos[1] >= self.thing.world.map_
.
size[1]:
raise GameError('would move outside map bounds')
raise GameError('would move outside map bounds')
- pos_i = test_pos[0] * self.thing.world.map_size[1] + test_pos[1]
- map_tile = self.thing.world.
terrain_map
[pos_i]
+ pos_i = test_pos[0] * self.thing.world.map_
.
size[1] + test_pos[1]
+ map_tile = self.thing.world.
map_.terrain
[pos_i]
if map_tile != '.':
raise GameError('would move into illegal terrain')
if map_tile != '.':
raise GameError('would move into illegal terrain')
+ for t in self.thing.world.things:
+ if t.position == test_pos:
+ raise GameError('would move into other thing')
class Thing(game_common.Thing):
class Thing(game_common.Thing):
@@
-133,6
+144,9
@@
class Thing(game_common.Thing):
if is_AI and self.task is None:
self.decide_task()
if is_AI and self.task is None:
self.decide_task()
+ def get_visible_map(self):
+ return Map(self.world.map_.size, self.world.map_.terrain)
+
class Commander():
class Commander():
@@
-150,16
+164,20
@@
class Commander():
self.world.get_player().set_task('wait')
self.proceed()
self.world.get_player().set_task('wait')
self.proceed()
- def cmd_GET_
TURN
(self, connection_id):
- """Send
world.turn
to caller."""
- self.send_
to(connection_id, str(self.world.turn)
)
+ def cmd_GET_
GAMESTATE
(self, connection_id):
+ """Send
game state j
to caller."""
+ self.send_
gamestate(connection_id
)
def cmd_ECHO(self, msg, connection_id):
"""Send msg to caller."""
def cmd_ECHO(self, msg, connection_id):
"""Send msg to caller."""
- self.send
_to(connection_id, msg
)
+ self.send
(msg, connection_id
)
cmd_ECHO.argtypes = 'string'
def cmd_ALL(self, msg, connection_id):
"""Send msg to all clients."""
cmd_ECHO.argtypes = 'string'
def cmd_ALL(self, msg, connection_id):
"""Send msg to all clients."""
- self.send
_all
(msg)
+ self.send(msg)
cmd_ALL.argtypes = 'string'
cmd_ALL.argtypes = 'string'
+
+ def cmd_TERRAIN_LINE(self, y, terrain_line):
+ self.world.map_.set_line(y, terrain_line)
+ cmd_TERRAIN_LINE.argtypes = 'int:nonneg string'