Skip to content
This repository has been archived by the owner on Nov 30, 2020. It is now read-only.

Commit

Permalink
Add socket client example and fix enemy-fall-of-the-map bug
Browse files Browse the repository at this point in the history
  • Loading branch information
McSinyx committed Mar 20, 2018
1 parent 2bd7352 commit bbc98be
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 3 deletions.
2 changes: 1 addition & 1 deletion brutalmaze/game.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion brutalmaze/maze.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,8 +323,8 @@ def update(self, fps):
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)

Expand Down
40 changes: 40 additions & 0 deletions client-examples/hit-and-run.py
Original file line number Diff line number Diff line change
@@ -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()
2 changes: 1 addition & 1 deletion wiki
Submodule wiki updated from f511cf to 159642

0 comments on commit bbc98be

Please sign in to comment.