Skip to content

Commit

Permalink
Фикс спотыкания о шлейф
Browse files Browse the repository at this point in the history
  • Loading branch information
Kislenko Maksim committed Jul 25, 2019
1 parent 3d5337c commit e7a05f3
Showing 1 changed file with 34 additions and 1 deletion.
35 changes: 34 additions & 1 deletion paperio/local_runner/game_objects/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
class Player:
speed = SPEED
direction = None
prev_direction = None

def __init__(self, id, x, y, name, color, client):
self.id = id
Expand All @@ -27,6 +28,8 @@ def __init__(self, id, x, y, name, color, client):
self.is_disconnected = False

def change_direction(self, command):
self.prev_direction = self.direction

if command == UP and self.direction != DOWN:
self.direction = UP

Expand Down Expand Up @@ -157,8 +160,38 @@ def get_direction_line(self):
if self.direction == RIGHT:
return self._get_line(WIDTH, 0)

def diff_position(self, direction, x, y, val):
if direction == UP:
return x, y - val

if direction == DOWN:
return x, y + val

if direction == LEFT:
return x + val, y

if direction == RIGHT:
return x - val, y

def get_position(self):
if self.direction is None:
return self.x, self.y

x, y = self.x, self.y
while not ((x - round(WIDTH / 2)) % WIDTH == 0 and (y - round(WIDTH / 2)) % WIDTH == 0):
x, y = self.diff_position(self.direction, x, y, self.speed)

return (x, y), (x, y) != (self.x, self.y)

def get_prev_position(self):
if self.prev_direction is None:
return self.x, self.y
return self.diff_position(self.prev_direction, self.x, self.y, WIDTH)

def is_ate(self, players_to_captured):
for p, captured in players_to_captured.items():
if self != p and (self.x, self.y) in captured:
position, is_move = self.get_position()
if self != p and position in captured and \
(is_move or self.get_prev_position() in captured):
return True
return False

1 comment on commit e7a05f3

@Pro100AlexHell
Copy link

@Pro100AlexHell Pro100AlexHell commented on e7a05f3 Jul 28, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Скажите пожалуйста, что этот фикс должен делать, т.е expected?
не очень выразительно, из кода я вытащил следующее:

  • если я двигаюсь по направлению к ячейке, но не ровно в центре стоию, то ячейка откуда (p.s. именно откуда, а не куда) я двигаюсь проверяется и если она захвачена оказалась на этот тик (врагом) - я погибаю, т.е. укусить шлейф пытался и помер
    .. разьве не это фиксилось? или это вводилось чтобы кусание - было опасным - этим фиксом?
  • если я стою в центре ячейки: проверяется и моя текущая и моя предыдущая целая (где я был в центре), и если они обе захватились - погибаю..

т.е вроде логичней что если я врезался в чужой хвост - погибает тот, в чей хвост я врезался

но если я врезался в чужую территорию (которая только что захватилась) - почему я погибаю?

вроде связано - там обсуждали
#289

p.s. а еще
def diff_position(self, direction, x, y, val):
и
((x - round(WIDTH / 2)) % WIDTH == 0 and (y - round(WIDTH / 2)) % WIDTH == 0):
есть копипаст

Please sign in to comment.