aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2018-03-20 14:17:17 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2018-03-20 14:17:17 +0700
commitbbc98be3176c848af49f95a80f8abee1f8516fa8 (patch)
tree21e78aad160e5b21ce8ad416413af44e03db8836
parent2bd7352aec15bd7af5373db6ed0a2ba03d31b185 (diff)
downloadbrutalmaze-bbc98be3176c848af49f95a80f8abee1f8516fa8.tar.gz
Add socket client example and fix enemy-fall-of-the-map bug0.6.4
-rw-r--r--brutalmaze/game.py2
-rw-r--r--brutalmaze/maze.py2
-rwxr-xr-xclient-examples/hit-and-run.py40
m---------wiki0
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