예제 #1
0
    def __init__(self, topic):
        self.orientacao = Vetor(0, 0)
        self.pos = Vetor(0, 0)

        self.lado = 0

        rospy.Subscriber(topic, Pose, self.recebe_dados)
예제 #2
0
def test_abs():
    """
    testa se o operador abs funciona
    """
    v_a = Vetor(3, 4)
    v_b = Vetor(9, 16)
    abs_a = abs(v_a)
    assert abs_a == sqrt(v_a.x**2 + v_a.y**2)
    abs_b = abs(v_b)
    assert abs_b == sqrt(v_b.x**2 + v_b.y**2)
예제 #3
0
def test_eq():
    """
    Testa se igualdade funciona
    """

    v_a = Vetor(1, 2)
    v_b = Vetor(1, 2)
    v_c = Vetor(2, 1)

    assert v_a == v_b
    assert v_b == v_a
    assert v_c != v_a
예제 #4
0
    def __init__(self, ambiente, imagem, posicao=Vetor(0, 0)):
        """
        Neste metodo um objeto circular e criado

        :param ambiente: O ambiente pygame do jogo, que e usado para carregar
                         a imagem
        :param imagem: O caminho da imagem do objeto
        :param posicao: A posicao inicial do objeto
        """

        Objeto.__init__(self, ambiente, imagem, posicao)

        self._raio = self.imagem.get_width() / 2
        self.posicao += Vetor(self._raio, self._raio)
예제 #5
0
def test_add():
    """
    Testa se soma funciona
    """
    v_a = Vetor(1, 2)
    v_b = Vetor(1, 2)
    v_c = Vetor(2, 1)

    v_ab = v_a + v_b
    assert v_ab.x == v_a.x + v_b.x
    assert v_ab.y == v_a.y + v_b.y

    v_abc = v_a + v_b + v_c
    assert v_abc.x == v_a.x + v_b.x + v_c.x
    assert v_abc.y == v_a.y + v_b.y + v_c.y
예제 #6
0
    def integracao(self, tempo):
        '''(Nbody, float) -> None
        Realiza integracao numerica da forca gravitacional em Nbody
        '''
        t = 0
        while t < tempo and self.n > 1:
            for i in range(self.n):
                body = self.bodies[i]

                # somatoria de forcas devido as demais particulas
                f_res = Vetor()
                for j in range(self.n):
                    if i != j:
                        f_res += body.gravity(self.bodies[j])

                # calculando impulso nesse corpo
                dp = f_res.multiply(dt)

                # calculando velocidade atual
                body.p = body.p + dp
                body.v = body.p.multiply(1 / body.m)

                # calculando posicao atual (na pos auxiliar)
                body.r_ = body.r + body.v.multiply(dt)

            # atualiza posicoes das particulas
            for body in self.bodies:
                body.r = body.r_

            # trata as colisoes
            #self.colisoes()

            t += dt
            # atualiza animacao
            self.atualiza_anim(t)
예제 #7
0
파일: nave.py 프로젝트: milenegubetti/SAGU
    def __init__(self, ambiente, cor, posicao, velocidade_maxima, aceleracao,
                 escudo, codigo):
        """
        Neste metodo uma nave e criada

        :param ambiente: O ambiente pygame do jogo, que e usado para carregar
                         a imagem
        :param cor: A cor da nave (numero de 0 a 5)
        :param posicao: A posicao inicial da nave
        :param velocidade_maxima: A velocidade maxima que a nave pode atingir
        :param aceleracao: A aceleracao que a nave possui
        :param escudo: A defesa da nave, que reduz o dano recebido
        """

        ObjetoMovel.__init__(self, ambiente, "nave_" + str(cor), posicao,
                             Vetor(0, 0), 0)
        ObjetoCircular.__init__(self, ambiente, "nave_" + str(cor), posicao)

        self.imagem_inicial = self.imagem

        self.pontos_de_vida = 100

        self.velocidade_maxima = velocidade_maxima
        self.aceleracao = aceleracao
        self.escudo = escudo

        self.codigo = codigo
        self.cor = cor
        self.pode_atirar = True
        self.pode_colidir = True

        self.angulo = 90

        self.lista_tiros = []
예제 #8
0
    def __init__(self, subscriber, publisher_esquerda, publisher_direita):
        Robo.__init__(self, subscriber)

        self.pubL = rospy.Publisher(publisher_esquerda, Float64, queue_size = 100)
        self.pubR = rospy.Publisher(publisher_direita, Float64, queue_size = 100)

        self.vel = 0 #velocidade linear (inicializada como zero)
        self.omega = 0 #velocidade angular (inicializada como zero)

        self.orientacaoDesejada = Vetor(0, 0)
        self.posDesejada = Vetor(0, 0)

        self.orientacaoPrevista = Vetor(0, 0)
        self.posPrevista = Vetor(0, 0)

        self.omegaD = 0 # velocidade angular da roda direita
        self.omegaE = 0 # velocidade angular da roda esquerda
예제 #9
0
 def __init__(self, lbl, r=(0, 0, 0), v=(0, 0, 0), mass=1, color=None):
     '''(Particula, str, 3-tuple, 3-tuple, float) -> None
     O padrão é uma "partícula" na posição origem
     '''
     self.label = lbl
     # vetor posição
     self.r = Vetor(r)
     # vetor velocidade
     self.v = Vetor(v)
     # massa
     self.m = mass
     # vetor momentum
     self.p = self.v.multiply(self.m)
     # vetor posição auxiliar
     self.r_ = Vetor(r)
     # cor
     self.cor = color
예제 #10
0
def test_initialization():
    """
    Testa se o vetor seta as variáveis corretamente
    """

    v = Vetor(1, 2)

    assert v.x == 1
    assert v.y == 2
예제 #11
0
 def mass_center(self):
     '''(Nbody) -> 3-tuple, float
     Retorna a posicao do centro de massa e massa total
     '''
     s, m = Vetor(), 0
     for body in self.bodies:
         s += body.r.multiply(body.m)
         m += body.m
     c = s.multiply(1 / m)
     return c.to_list()
예제 #12
0
    def desenhar(self, tela):
        """
        Este metodo desenha o objeto na tela

        :param tela: A tela onde o objeto sera desenhado
        """
        
        posicao_desenho = self.posicao - Vetor(self._raio, self._raio)

        tela.blit(self.imagem, posicao_desenho.get_tupla())
예제 #13
0
    def __init__(self,
                 ambiente,
                 imagem,
                 posicao=Vetor(0, 0),
                 direcao=Vetor(0, 0),
                 velocidade=0,
                 dano=20):
        """
        Neste metodo um obstaculo e criado

        :param ambiente: O ambiente pygame do jogo, que e usado para carregar
                         a imagem
        :param imagem: O caminho da imagem do obstaculo
        :param posicao: A posicao inicial do obstaculo
        :param direcao: A direcao inicial do obstaculo
        :param velocidade: A velocidade inicial do obstaculo
        """

        ObjetoMovel.__init__(self, ambiente, imagem, posicao, direcao,
                             velocidade)
        ObjetoCircular.__init__(self, ambiente, imagem, posicao)
예제 #14
0
    def __init__(self,
                 ambiente,
                 imagem,
                 posicao=Vetor(0, 0),
                 direcao=Vetor(0, 0),
                 velocidade=0):
        """
        Neste metodo um objeto movel e criado

        :param ambiente: O ambiente pygame do jogo, que e usado para carregar
                         a imagem
        :param imagem: O caminho da imagem do objeto
        :param posicao: A posicao inicial do objeto
        :param direcao: A direcao inicial do objeto
        :param velocidade: A velocidade inicial do objeto
        """

        Objeto.__init__(self, ambiente, imagem, posicao)

        self.direcao = direcao
        self.velocidade = velocidade
예제 #15
0
파일: nave.py 프로젝트: milenegubetti/SAGU
    def desenhar(self, ambiente, tela):
        """
        Este metodo desenha a nave na tela, com a sua posicao e rotacao

        :param ambiente: O ambiente Pygame em que a nave esta
        :param tela: A tela no qual a nave sera desenhada
        """

        self.imagem = ambiente.transform.rotate(self.imagem_inicial,
                                                self.angulo)
        largura, altura = self.imagem.get_size()
        posicao_de_desenho = self.posicao - Vetor(largura / 2, altura / 2)
        tela.blit(self.imagem, posicao_de_desenho.get_tupla())
예제 #16
0
    def __init__(self, ambiente, imagem, posicao=Vetor(0, 0)):
        """
        Neste metodo um objeto e criado

        :param ambiente: O ambiente pygame do jogo, que e usado para carregar
                         a imagem
        :param imagem: O caminho da imagem do objeto
        :param posicao: A posicao inicial do objeto
        """

        self.imagem = ambiente.image.load("Imagens/" + imagem + ".png")

        self.posicao = posicao
예제 #17
0
파일: nave.py 프로젝트: milenegubetti/SAGU
    def movimentar(self, jogo):
        """
        Este metodo faz a nave se movimentar, impede que ela se movimente alem
        de sua velocidade maxima e impede que ela saia da tela

        :param jogo: O jogo no qual a nave esta
        """

        nova_posicao = (self.posicao +
                        (self.direcao * self.velocidade)).get_tupla()
        tamanho = jogo.tela.get_size()

        if self.velocidade >= self.velocidade_maxima:
            self.velocidade = self.velocidade_maxima

        if (nova_posicao[0] - self._raio > 0
                and nova_posicao[0] + self._raio < tamanho[0]
                and nova_posicao[1] - self._raio > 0
                and nova_posicao[1] + self._raio < tamanho[1]):

            self.posicao = Vetor(nova_posicao[0], nova_posicao[1])
예제 #18
0
파일: nave.py 프로젝트: milenegubetti/SAGU
    def tratar_eventos(self, jogo):
        """
        Este metodo trata os eventos de pressionamento de teclas

        :param jogo: O jogo no qual a nave esta
        """

        teclas = jogo.ambiente.key.get_pressed()

        if self.codigo == 0:
            # FAZ A NAVE ATIRAR
            if teclas[jogo.ambiente.K_LSHIFT] and self.pode_atirar:
                direcao = Vetor(math.cos(self.angulo * math.pi / 180),
                                -math.sin(self.angulo * math.pi / 180))

                tiro = Obstaculo(jogo.ambiente, "tiro_" + str(self.cor),
                                 self.posicao + (direcao * self._raio),
                                 direcao, 5, 5)

                self.lista_tiros.append(tiro)

                self.pode_atirar = False
                jogo.ambiente.time.set_timer(jogo.ambiente.USEREVENT + 1, 300)

            # ACELERA A NAVE
            if teclas[jogo.ambiente.K_w]:
                movimento_x = self.aceleracao * math.cos(
                    self.angulo * math.pi / 180)
                movimento_y = (-self.aceleracao) * math.sin(
                    self.angulo * math.pi / 180)
                self.adicionar_movimento(Vetor(movimento_x, movimento_y))

            # FREIA A NAVE
            elif teclas[jogo.ambiente.K_s]:
                movimento_x = (-self.aceleracao / 2) * math.cos(
                    self.angulo * math.pi / 180)
                movimento_y = self.aceleracao / 2 * math.sin(
                    self.angulo * math.pi / 180)
                self.adicionar_movimento(Vetor(movimento_x, movimento_y))

            # GIRA A NAVE NO SENTIDO ANTI-HORARIO
            if teclas[jogo.ambiente.K_a]:
                self.angulo += 2
                if self.angulo >= 360:
                    self.angulo = 0
            # GIRA A NAVE NO SENTIDO HORARIO
            elif teclas[jogo.ambiente.K_d]:
                self.angulo -= 2
                if self.angulo >= 360:
                    self.angulo = 0

        elif self.codigo == 1:
            # FAZ A NAVE ATIRAR
            if teclas[jogo.ambiente.K_RSHIFT] and self.pode_atirar:
                direcao = Vetor(math.cos(self.angulo * math.pi / 180),
                                -math.sin(self.angulo * math.pi / 180))

                tiro = Obstaculo(jogo.ambiente, "tiro_" + str(self.cor),
                                 self.posicao + (direcao * self._raio),
                                 direcao, 5, 5)

                self.lista_tiros.append(tiro)

                self.pode_atirar = False
                jogo.ambiente.time.set_timer(jogo.ambiente.USEREVENT + 2, 300)

            # ACELERA A NAVE
            if teclas[jogo.ambiente.K_UP]:
                movimento_x = self.aceleracao * math.cos(
                    self.angulo * math.pi / 180)
                movimento_y = (-self.aceleracao) * math.sin(
                    self.angulo * math.pi / 180)
                self.adicionar_movimento(Vetor(movimento_x, movimento_y))

            # FREIA A NAVE
            elif teclas[jogo.ambiente.K_DOWN]:
                movimento_x = (-self.aceleracao / 4) * math.cos(
                    self.angulo * math.pi / 180)
                movimento_y = (self.aceleracao / 4) * math.sin(
                    self.angulo * math.pi / 180)
                self.adicionar_movimento(Vetor(movimento_x, movimento_y))

            # GIRA A NAVE NO SENTIDO ANTI-HORARIO
            if teclas[jogo.ambiente.K_LEFT]:
                self.angulo += 2
                if self.angulo >= 360:
                    self.angulo = 0

            # GIRA A NAVE NO SENTIDO HORARIO
            elif teclas[jogo.ambiente.K_RIGHT]:
                self.angulo -= 2
                if self.angulo >= 360:
                    self.angulo = 0
예제 #19
0
 def centro(self):
     x = (self.infD.x + self.supE.x)/2.
     y = (self.infD.y + self.supE.y)/2.
     return Vetor(x, y)
예제 #20
0
 def coordenadas(self, supEx, supEy, infDx, infDy):
     supE = Vetor(supEx, supEy)
     infD = Vetor(infDx, infDy)
     return Regiao(supE, infD)
예제 #21
0
 def __init__(self, topic):
     self.pos = Vetor(0, 0)
     rospy.Subscriber(topic, Pose, self.recebe_dados)
예제 #22
0
 def testa_soma(self):
     v1 = Vetor(5, 1)
     v2 = Vetor(0, 3)
     v = soma_vetor(v1, v2)
     self.assertEqual(v, Vetor(5, 4))
예제 #23
0
    def selecao(self):
        """
        Este metodo controla a selecao de jogadores e naves
        """
        for i in range(2):
            system("clear")
            print("SELEÇÃO")
            print("1 - Criar")
            print("2 - Já tenho")
            opcao = input(": ")

            if opcao == "1":
                print("\nJOGADOR")
                while True:
                    nome = input("Nome: ").upper()

                    if not self.buscar_nome(nome):
                        break
                    else:
                        print("Este jogador já existe.\n")

                print("\nNAVE")
                print(
                    "Você tem 10 pontos para distribuir (entre velocidade máxima, aceleração e escudo)."
                )

                while True:
                    try:
                        velocidade_maxima = int(
                            input("Velocidade máxima (1-5): "))
                        aceleracao = int(input("Aceleração (1-5): "))
                        escudo = int(input("Escudo (0-5): "))
                    except:
                        print("Valor inválido!\n")
                        continue

                    if velocidade_maxima + aceleracao + escudo <= 10:
                        break
                    else:
                        print("Você gastou mais de 10 pontos.\n")

                while True:
                    print("Cor:")
                    print("1 - vermelho")
                    print("2 - amarelo")
                    print("3 - verde")
                    print("4 - azul turquesa")
                    print("5 - azul")
                    print("6 - roxo")

                    try:
                        cor = int(input(": "))
                    except:
                        print("Valor inválido!\n")
                        continue

                    if cor > 0 and cor < 7:
                        break
                    else:
                        print("Cor inexistente.")

                if i == 0:
                    nave = Nave(jogo.ambiente, cor, Vetor(200, 300),
                                velocidade_maxima, aceleracao * 0.5, escudo, 0)
                else:
                    nave = Nave(jogo.ambiente, cor, Vetor(1000, 300),
                                velocidade_maxima, aceleracao * 0.5, escudo, 1)
                self.lista_naves.append(nave)

                self.salvar_configuracao(nome, cor, velocidade_maxima,
                                         aceleracao * 0.5, escudo)

            elif opcao == "2":
                nome = input("Nome: ").upper()

                configuracao = self.ler_configuracao(nome)

                if i == 0:
                    nave = Nave(jogo.ambiente, configuracao[0],
                                Vetor(200, 300), configuracao[1],
                                configuracao[2], configuracao[3], 0)
                else:
                    nave = Nave(jogo.ambiente, configuracao[0],
                                Vetor(1000, 300), configuracao[1],
                                configuracao[2], configuracao[3], 1)
                self.lista_naves.append(nave)

            else:
                print("Opção inválida")
                sys.exit()
예제 #24
0
            self.desenhar()

            self.atualizar_tela()

            clock.tick(60)


if __name__ == "__main__":
    jogo = Jogo()
    """
    nave1 = Nave(jogo.ambiente, 1, Vetor(200, 300), 6, 0.1, 1, 0)
    nave2 = Nave(jogo.ambiente, 2, Vetor(1000, 300), 3, 0.3, 1, 1)
    jogo.adicionar_nave(nave1)
    jogo.adicionar_nave(nave2)
    """
    jogo.selecao()

    asteroide1 = Obstaculo(jogo.ambiente, "asteroide_0", Vetor(600, 200),
                           Vetor(1, 0.35), 2)
    asteroide2 = Obstaculo(jogo.ambiente, "asteroide_0", Vetor(600, 400),
                           Vetor(-1, -0.35), 2)
    asteroide3 = Obstaculo(jogo.ambiente, "asteroide_0", Vetor(600, 300),
                           Vetor(0.0, 0.1), 0.2)
    jogo.adicionar_objeto(asteroide1)
    jogo.adicionar_objeto(asteroide2)
    jogo.adicionar_objeto(asteroide3)

    jogo.criar_tela("Sagu", (1280, 720), "fundo")

    jogo.run()
예제 #25
0
 def testa_subtrai(self):
     v1 = Vetor(5, 1)
     v2 = Vetor(2, 3)
     v = subtrai_vetor(v1, v2)
     self.assertEqual(v, Vetor(3, -2))
예제 #26
0
 def testa_vetor(self):
     v = Vetor(x=1, y=-1)
     self.assertEqual(v.x, 1)
     self.assertEqual(v.y, -1)