Referência

Tudo que o robô sabe fazer

Esta é a lista completa dos comandos disponíveis. Todos são usados com self. na frente, dentro do seu robô. Deixe esta página aberta numa aba enquanto programa.

Atalhos: Movimentação · Rotação · Arma · Radar · Informação · Gerais

Antes de começar

Distâncias são em pixels e ângulos em graus. Na bússola do jogo, 0 aponta para baixo e o ângulo cresce no sentido horário (a página de física tem o desenho). Comandos que enfileiram ação (andar, girar, atirar) acontecem ao mesmo tempo até você chamar stop().

Movimentação

ComandoO que faz
move(distancia) Anda para a frente a distância indicada, em pixels. Valor negativo anda de ré.
self.move(100) · self.move(-50)
turn(angulo) Gira o corpo do tanque. Positivo gira no sentido horário, negativo no anti-horário. O corpo carrega a arma e o radar junto se eles estiverem travados nele.
self.turn(90) · self.turn(-45)
stop() Fecha o bloco de comandos atual. Tudo que veio antes acontece junto; o que vier depois só começa quando o bloco anterior terminar.
self.move(80)
self.stop()
self.turn(90)
pause(quadros) Deixa o robô parado pelo número de quadros indicado.
self.pause(10)
reset() Joga fora todos os comandos que ainda estavam na fila e faz o run() recomeçar do zero. Use quando algo mudou e o plano antigo não vale mais, por exemplo ao bater na parede ou ao levar um tiro.
self.reset()
Cuidado com o pause()

Ficar parado conta contra você: a arena pune robôs inativos tirando vida, e essas punições entram no desempate. Use pause() em pausas curtas, nunca como estratégia.

Rotação

O corpo, a arma e o radar giram de forma independente. Dá para andar para a esquerda, mirar para a direita e varrer o radar para trás, tudo ao mesmo tempo.

ComandoO que faz
turn(angulo) Gira o corpo do tanque.
gunTurn(angulo) Gira a arma, sem mexer no corpo.
self.gunTurn(10)
radarTurn(angulo) Gira o radar, sem mexer no corpo nem na arma.
self.radarTurn(15)
lockGun(parte) Faz a arma acompanhar o corpo automaticamente. Valores: "base" (acompanha o corpo) ou "free" (independente, o padrão).
self.lockGun("base")
lockRadar(parte) Faz o radar acompanhar outra parte. Valores: "gun" (acompanha a arma), "base" (acompanha o corpo) ou "free" (independente, o padrão).
self.lockRadar("gun")
Truque que vale ouro

self.lockRadar("gun") no init() faz o radar apontar sempre para onde a arma está apontando. Assim, tudo que o radar enxerga já está na mira: basta atirar, sem precisar calcular nada. É a forma mais barata de ter um robô que acerta.

Arma

ComandoO que faz
fire(potencia) Dispara. A potência vai de 0.5 a 10 (valores fora disso são ajustados para o limite mais próximo). Quanto maior a potência, maior o dano, e maior também o custo de energia. Veja as contas na página de física.
self.fire(3)
gunTurn(angulo) Gira a arma para mirar.
getGunHeading() Devolve para que ângulo a arma está apontando.
angulo = self.getGunHeading()
setGunColor(r, g, b) Cor do cano da arma. Três números de 0 a 255.
self.setGunColor(255, 255, 255)
setBulletsColor(r, g, b) Cor dos tiros.
self.setBulletsColor(255, 204, 77)

Radar

O radar não enxerga a arena toda: ele enxerga um cone à frente. Quando um inimigo entra nesse cone, o jogo chama o onTargetSpotted() do seu robô.

ComandoO que faz
radarTurn(angulo) Gira o radar.
setRadarField(forma) Muda o formato do campo de visão. As quatro opções estão logo abaixo.
self.setRadarField("thin")
lockRadar(parte) Trava o radar no corpo ("base") ou na arma ("gun").
radarVisible(mostrar) Desenha o campo de visão na tela. True mostra, False esconde. Ligue enquanto testa, porque ajuda muito a entender o que o robô enxerga.
self.radarVisible(True)
getRadarHeading() Devolve para que ângulo o radar está apontando.
setRadarColor(r, g, b) Cor do radar.

Os quatro formatos de radar

FormatoAberturaAlcanceQuando usar
"normal" cone médio longo O padrão. Equilibrado, serve para quase tudo.
"thin" cone estreito o maior de todos Franco-atirador. Enxerga o outro lado da arena, mas só bem na linha de frente. Combina com lockRadar("gun").
"large" cone bem aberto curto Varre muita área perto do robô. Bom para não ser pego de surpresa.
"round" círculo, 360° curto Enxerga em todas as direções ao redor do robô, mas só bem de perto. Bom para brigas coladas.

Informação

Estes comandos não fazem nada acontecer: eles apenas respondem alguma coisa. Use o resultado para decidir o que fazer.

ComandoO que devolve
getPosition() Onde o robô está. Use .x() e .y() para pegar os números.
posicao = self.getPosition()
x = posicao.x()
getMapSize() O tamanho da arena. Use .width() e .height().
arena = self.getMapSize()
largura = arena.width()
getHeading() Para que ângulo o corpo está apontando.
getGunHeading() Para que ângulo a arma está apontando.
getRadarHeading() Para que ângulo o radar está apontando.
getHealth() Quanta vida o robô ainda tem, de 0 a 100.
if self.getHealth() < 30:
getKills() Quantos adversários o robô já eliminou nesta partida.
getEnemiesLeft() Uma lista com os robôs ainda vivos. Cada item tem ["id"] e ["name"].
vivos = self.getEnemiesLeft()
for robo in vivos:
    self.rPrint(robo["name"])
Pegadinha do getEnemiesLeft()

Apesar do nome, essa lista inclui o seu próprio robô. Se você quer saber quantos adversários restam, tem que subtrair um:

contando adversários de verdade
adversarios = len(self.getEnemiesLeft()) - 1

if adversarios == 1:
    self.rPrint("So sobrou um. Hora de atacar.")

Gerais

ComandoO que faz
setColor(r, g, b) Cor do corpo do tanque. Três números de 0 a 255: vermelho, verde e azul.
self.setColor(66, 185, 193)
rPrint(mensagem) Escreve uma mensagem no painel do robô. Para ler, clique no nome do robô no painel da direita durante a partida. É a principal ferramenta para descobrir por que o robô está fazendo bobagem.
self.rPrint("virei para " + str(angulo))
stop() Fecha o bloco de comandos atual.
reset() Descarta a fila de comandos e reinicia o run().
Juntando texto com números no rPrint()

Para colocar um número no meio de um texto, é preciso convertê-lo com str(). "vida: " + self.getHealth() dá erro; "vida: " + str(self.getHealth()) funciona.