Skip to content

Commit

Permalink
desenhar jogador
Browse files Browse the repository at this point in the history
  • Loading branch information
georgesms committed Feb 19, 2024
1 parent 176444f commit 00968f4
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 12 deletions.
39 changes: 32 additions & 7 deletions edupils/desafios/labirinto.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,13 @@ class JogadorOrientado(Jogador):
'esquerda': '<'
}

ORIENTACAO_PARA_GRAUS = {
'cima': 90,
'direita': 0,
'baixo': 270,
'esquerda': 180
}

def __init__(self, labirinto):
super().__init__(labirinto)
self.orientacao = "baixo"
Expand All @@ -206,17 +213,18 @@ def virar(self, direcao):

self.orientacao = Jogador.DIRECORES_INV[self.vetor]
self.representacao = JogadorOrientado.OPCOES_REPRESENTACAO[self.orientacao]
self.mostrar()

def mover(self):
def mover(self, passos=1):
dH, dW = self.vetor
nova_posicao = (self.posicao[0] + dH, self.posicao[1] + dW)

if not self.labirinto.eh_parede(nova_posicao):
self.posicao = nova_posicao
self.historico.append(self.posicao)
return True
return False
for p in range(passos):
if not self.labirinto.eh_parede(nova_posicao):
self.posicao = nova_posicao
self.historico.append(self.posicao)
self.mostrar()


def redondezas_livres(self):
redondezas = []
Expand All @@ -231,6 +239,23 @@ def redondezas_livres(self):
if not self.labirinto.eh_parede((h-dH, w-dW)):
redondezas.append("trás")
return redondezas

def mostrar(
self,
camada=constantes.NOME_PAINEL_FRENTE,
largura_do_tile=25,
):
desenho.apagar_painel(camada)
h, w = self.posicao
desenho.desenhar_triangulo(
x_baricentro=w * largura_do_tile + largura_do_tile/2,
y_baricentro=h * largura_do_tile + largura_do_tile/2,
raio_circunscrito=(largura_do_tile-5) /2,
cor=constantes.COR_PRIMARIA,
id_canvas=camada,
angulo=self.ORIENTACAO_PARA_GRAUS(self.orientacao),
)


def criar_labirinto_e_jogador():
lab = Labirinto(10,10)
Expand Down
8 changes: 4 additions & 4 deletions edupils/desenho/desenho.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ def desenhar_triangulo(x_baricentro, y_baricentro, raio_circunscrito, cor, id_ca
largura_base = raio_circunscrito * proporcao_base
altura = math.sqrt( raio_circunscrito ** 2 - (largura_base / 2) ** 2)

# Calcula os vértices do triângulo antes da rotação
# Calcula os vértices do triângulo antes da rotação, PADRÃO APONTADO PARA DIREITA
vertices = [
(x_baricentro - largura_base / 2, y_baricentro + altura), # Vértice inferior esquerdo
(x_baricentro, y_baricentro - raio_circunscrito), # Vértice superior
(x_baricentro + largura_base / 2, y_baricentro + altura) # Vértice inferior direito
(x_baricentro - altura , y_baricentro + (largura_base / 2)), # Vértice inferior esquerdo
(x_baricentro + raio_circunscrito, y_baricentro), # Vértice superior
(x_baricentro - altura , y_baricentro - (largura_base / 2)) # Vértice inferior direito
]

# Rotaciona os vértices
Expand Down
Empty file added edupils/fisica2d/__init__.py
Empty file.
65 changes: 65 additions & 0 deletions edupils/fisica2d/motor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
class Força:
def __init__(self, x, y):
self.x = x
self.y = y

class Objeto:
def __init__(self, x, y, theta, vx, vy, massa):
self.x = x
self.y = y
self.theta = theta
self.vx = vx
self.vy = vy
self.massa = massa
self.forças = []

def adiciona_força(self, força):
self.forças.append(força)

def aceleração_resultante(self):
ax = sum(força.x for força in self.forças) / self.massa
ay = sum(força.y for força in self.forças) / self.massa
return ax, ay

def atualiza_estado(self, dt):
ax, ay = self.aceleração_resultante()
self.vx += ax * dt
self.vy += ay * dt
self.x += self.vx * dt
self.y += self.vy * dt
# Resetar as forças após a atualização
self.forças = []

class Círculo(Objeto):
def __init__(self, x, y, theta, vx, vy, massa, raio):
super().__init__(x, y, theta, vx, vy, massa)
self.raio = raio

def detecção_de_colisão(self):
pass # Implementar lógica de detecção de colisão

def baricentro(self):
return self.x, self.y

class Retângulo(Objeto):
def __init__(self, x, y, theta, vx, vy, massa, largura, altura):
super().__init__(x, y, theta, vx, vy, massa)
self.largura = largura
self.altura = altura

def detecção_de_colisão(self):
pass # Implementar lógica de detecção de colisão

def baricentro(self):
return self.x + self.largura / 2, self.y + self.altura / 2

class Polyline(Objeto):
def __init__(self, x, y, theta, vx, vy, massa, pontos):
super().__init__(x, y, theta, vx, vy, massa)
self.pontos = pontos # Lista de tuplas (x, y) representando os vértices

def detecção_de_colisão(self):
pass # Implementar lógica de detecção de colisão

def baricentro(self):
pass # Implementar cálculo de baricentro
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

setup(
name='edupils',
version='0.1.9',
version='0.1.10',
author='Georges Spyrides',
author_email='georgesmss@gmail.com',
packages=find_packages(),
Expand Down

0 comments on commit 00968f4

Please sign in to comment.