-
Notifications
You must be signed in to change notification settings - Fork 1
/
tank.py
49 lines (42 loc) · 2.29 KB
/
tank.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import numpy as np
from PyQt5.QtCore import QTimer
class MovableObject:
REALISTIC_MOVES_TIMEOUT = 500
REALISTIC_MOVES_ON = True
position = np.array([0, 0]) # pozycja czolgu na mapie
oldPos = np.array([0, 0])
rotation = 1 # ktory ruch mozna wykonac znajdujacy sie w available 0-5
motionCounter = 0 #wykorzystywany dla pocisku, za pierwszym ruchem nie można czyścić płytki(pozycja czołgu)
blockMotion = False #pozwala na bardziej rzeczywiste ruchy tzn. ograniczone czasowo
availableMoveForEven = np.array(
[[-1, -1], [0, -2], [0, -1], [0, 1], [0, 2], [-1, 1]]) # dla przystych kolumn w tablicy
availableMoveForOdd = np.array([[0, -1], [0, -2], [1, -1], [1, 1], [0, 2], [0, 1]])
health = 100
realisticMovesTimer = QTimer()
def __init__(self,health,realisticMovesOn):
self.health = health
if realisticMovesOn:
self.realisticMovesTimer.timeout.connect(self.realisticMoves)
self.realisticMovesTimer.start(self.REALISTIC_MOVES_TIMEOUT)
self.REALISTIC_MOVES_ON = realisticMovesOn
def rotate(self, value): # value 1 prawo, -1 lewo
if self.health > 0:
if not self.blockMotion:
self.rotation += value
if (self.rotation < 0): self.rotation = 5 # przekrecenie na drugą stronę
self.rotation %= 6
if self.REALISTIC_MOVES_ON: self.blockMotion = True
def move(self, direction): # direction 1-przód, -1 tył
if self.health > 0:
if not self.blockMotion:
if direction == -1:
self.rotate(3) # rotacja w przeciwna strone gdy cofanie
self.blockMotion = False #odblokowanie możliwości natychmiastowego skrętu, zablokowana po pierwszym skrecie
if self.position[1] % 2 == 0: # dla parzystych wierszy
self.position = np.add(self.position, self.availableMoveForEven[self.rotation])
else:
self.position = np.add(self.position, self.availableMoveForOdd[self.rotation])
if direction == -1: self.rotate(3) # przywrócenie poczatkowego ustawienia dla cofania
if self.REALISTIC_MOVES_ON: self.blockMotion = True
def realisticMoves(self):
self.blockMotion = False