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
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
| Comando | O 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()
|
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.
| Comando | O 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")
|
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
| Comando | O 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ô.
| Comando | O 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
| Formato | Abertura | Alcance | Quando 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.
| Comando | O 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"])
|
Apesar do nome, essa lista inclui o seu próprio robô. Se você quer saber quantos adversários restam, tem que subtrair um:
adversarios = len(self.getEnemiesLeft()) - 1
if adversarios == 1:
self.rPrint("So sobrou um. Hora de atacar.")
Gerais
| Comando | O 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(). |
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.