diff options
author | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2018-03-20 14:17:17 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2018-03-20 14:17:17 +0700 |
commit | bbc98be3176c848af49f95a80f8abee1f8516fa8 (patch) | |
tree | 21e78aad160e5b21ce8ad416413af44e03db8836 | |
parent | 2bd7352aec15bd7af5373db6ed0a2ba03d31b185 (diff) | |
download | brutalmaze-bbc98be3176c848af49f95a80f8abee1f8516fa8.tar.gz |
Add socket client example and fix enemy-fall-of-the-map bug 0.6.4
-rw-r--r-- | brutalmaze/game.py | 2 | ||||
-rw-r--r-- | brutalmaze/maze.py | 2 | ||||
-rwxr-xr-x | client-examples/hit-and-run.py | 40 | ||||
m--------- | wiki | 0 |
4 files changed, 42 insertions, 2 deletions
diff --git a/brutalmaze/game.py b/brutalmaze/game.py index b78e375..cbe5e6c 100644 --- a/brutalmaze/game.py +++ b/brutalmaze/game.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Brutal Maze. If not, see <https://www.gnu.org/licenses/>. -__version__ = '0.6.3' +__version__ = '0.6.4' import re from argparse import ArgumentParser, FileType, RawTextHelpFormatter diff --git a/brutalmaze/maze.py b/brutalmaze/maze.py index 0516cb5..665d9c3 100644 --- a/brutalmaze/maze.py +++ b/brutalmaze/maze.py @@ -323,8 +323,8 @@ class Maze: self.next_move -= 1000.0 / self.fps self.next_slashfx -= 1000.0 / self.fps + self.rotate() if dx or dy: - self.rotate() for enemy in self.enemies: enemy.wake() for bullet in self.bullets: bullet.place(dx, dy) diff --git a/client-examples/hit-and-run.py b/client-examples/hit-and-run.py new file mode 100755 index 0000000..b93e149 --- /dev/null +++ b/client-examples/hit-and-run.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +from math import inf, atan2, degrees +from socket import socket +from random import randint + +clientsocket = socket() +clientsocket.connect(('localhost', 8089)) +while True: + length = clientsocket.recv(7).decode() + if length in ('', '0000000'): break # connection closed or game over + l = clientsocket.recv(int(length)).decode().split() + data = iter(l) + nh, ne, nb, score = (int(next(data)) for _ in range(4)) + maze = [[bool(int(i)) for i in next(data)] for _ in range(nh)] + hp = (lambda c: 0 if c == 48 else 123 - c)(ord(next(data))) + hx, hy, ha = (int(next(data)) for _ in range(3)) + attackable, mobility = (bool(int(next(data))) for _ in range(2)) + + shortest = angle = inf + for _ in range(ne): + p = (lambda c: 0 if c == 48 else 3 - (c-97)%3)(ord(next(data))) + x, y, a = (int(next(data)) for _ in range(3)) + d = ((x - hx)**2 + (y - hy)**2)**0.5 + if d < shortest: + shortest = d + b = degrees(atan2(y - hy, x - hx)) + angle = round(b + 360 if b < 0 else b) + # calculate to dodge from bullets is a bit too much for an example + + move = 4 if ne and hp > 2 else 0 + if angle == inf: + angle, attack = ha, 0 + elif not attackable: + attack = 0 + elif shortest < 160 or hp < 3: + move, angle, attack = 8, ha, 2 + else: + attack = 1 + clientsocket.send('{} {} {}'.format(move, angle, attack).encode()) +clientsocket.close() diff --git a/wiki b/wiki -Subproject f511cfe847445be2bbe0ff917431005e1391478 +Subproject 1596422a049bb2e8c3e76048ca15710bd5ae6fc |