FAQ Robocode

10
FAQ ROBOCODE –( PERGUNTAS FREQUENTES) 1. Não consigo instalar o Robocode . Por favor, consulte as instruções em baixar e instalar o site. 2. Eu fiz o download de um robô da Web , mas eu não sei como usá-lo , porque ele não aparecer em qualquer lugar . Por padrão, os robôs são lidos a partir do / Robocode / diretório robôs. Você pode selecionar " Robot - > Import Robot Transferido " para copiar um JAR robô para este diretório a partir de outro local. Além disso, você pode configurar o Robocode para ler os robôs a partir de locais adicionais usando a caixa de diálogo Propriedades. 3. O que eu tenho que fazer para ver o código fonte de um robô? Você pode fazer duas coisas. A primeira opção é abrir a janela do Editor de Robocode e use o comando no menu Arquivo. A segunda opção é abrir o robô de arquivo “. Jar" com um utilitário zip e encontrar o código-fonte não (supondo , é claro , o robô é open source) . 4. Posso jogar Robocode online? Robocode não é um jogo "online", então você não pode , por exemplo, compartilhar uma batalha com seus amigos em tempo real através da Internet. Mas você pode fazer upload de seus bots para lugares como o Google Sites ou repositório Robocode e participar de qualquer das competições existentes, tais como RoboRumble @ Casa, ou organizar um com seus amigos. 5. Tenho visto que muitos robôs são empacotados em arquivos “. Jar" . Como faço para embalar meu robô ? Selecione " Robot - > Pacote robô para carregar " a partir do menu , em seguida, digite os detalhes do seu robô , quando solicitado.

Transcript of FAQ Robocode

Page 1: FAQ Robocode

FAQ ROBOCODE –( PERGUNTAS FREQUENTES)

1. Não consigo instalar o Robocode .

     Por favor, consulte as instruções em baixar e instalar o site.

2. Eu fiz o download de um robô da Web , mas eu não sei como usá-lo , porque ele não aparecer em qualquer lugar .

Por padrão, os robôs são lidos a partir do / Robocode / diretório robôs. Você pode selecionar " Robot - > Import Robot Transferido " para copiar um JAR robô para este diretório a partir de outro local. Além disso, você pode configurar o Robocode para ler os robôs a partir de locais adicionais usando a caixa de diálogo Propriedades.

3. O que eu tenho que fazer para ver o código fonte de um robô?

Você pode fazer duas coisas. A primeira opção é abrir a janela do Editor de Robocode e use o comando no menu Arquivo. A segunda opção é abrir o robô de arquivo “. Jar" com um utilitário zip e encontrar o código-fonte não (supondo , é claro , o robô é open source) .

4. Posso jogar Robocode online?

Robocode não é um jogo "online", então você não pode , por exemplo, compartilhar uma batalha com seus amigos em tempo real através da Internet. Mas você pode fazer upload de seus  bots  para  lugares  como o Google Sites  ou repositório  Robocode e participar de qualquer das competições existentes, tais como RoboRumble @ Casa, ou organizar um com seus amigos.

5. Tenho visto que muitos robôs são empacotados em arquivos “. Jar" . Como faço para embalar meu robô ?

Selecione " Robot - > Pacote robô para carregar " a partir do menu , em seguida, digite os detalhes do seu robô , quando solicitado.

6. Quando eu testar meus robôs, Robocode é lento. Existe uma maneira de executar as batalhas mais rápidas?

Quando você está testando o seu robô , você quer executar muitas batalhas em um curto espaço de tempo . Minimizar a tela principal Robocode para torná-lo executar as batalhas em plena velocidade.

7. Eu recebo este erro ao tentar iniciar Robocode: “JAVA' não é reconhecido como um comando interno ou externo, operável ou arquivo de lote"

Isto é causado por um caminho desconhecido para a sua instalação Java. 

8. Qual é a diferença entre quadros e turno?

Um turno se refere a uma unidade, que também é chamado de volta em Robocode. Durante   um   turno,   você   pode   realizar   uma   ação   como   um   robô,   ou   várias 

Page 2: FAQ Robocode

(independente)   ações   como  um  AdvancedRobot   .  Um  quadro   é   uma   unidade   de tiragem para  a   interface  do  cliente  Robocode.  Se  você  estiver  processando turnos devagar, você vai ter um quadro por   turno. No entanto, se os turnos por segundo, além da capacidade do seu computador para renderizar os frames, você vai perder alguns quadros de animação. Isso não vai afetar o comportamento dos robôs, a menos que você tolamente adicionado código em seu OnPaint ( Graphics2D ) método que altera o comportamento do seu robô. Nesse caso, o robô irá se comportar de maneira diferente, dependendo se ou não o botão Paint foi ativado.

9. Posso disparar balas com potência superior a 3,0 ou inferior a 1,0?

Não e sim. Você não pode disparar balas com potência superior a 3,0 , mas você pode disparar balas com poder tão baixo como 0,1 . Se você chamar uma função de disparo (ou seja,  setFire ()) , com um valor superior a 3,0 , Robocode irá ajustá-lo para 3.0, e se você chamá-lo com uma potência inferior a 0,1 (exceto  0.0 que não vai disparar ) que irá ajustá-lo para 0.1 . Além disso, você pode disparar balas com potência inferior a 0,1 sob uma condição: quando o robô tem menos de 0,1 esquerda energia, caso em que uma bala é disparada, no entanto com muita energia o robô tinha deixado.

10. Qual a velocidade de uma viagem de bala?

Uma bala viaja a uma velocidade entre 11,0 e 19,7, dependendo do poder. O mais poderoso da bala, o mais lento. A fórmula para calcular é velocidade = 20 - (3 * de energia).

11. Será que a velocidade do robô são adicionados à velocidade da bala em fogo?

Não, velocidade da bala não é afetada pela velocidade do robô. É uma espécie de como a velocidade da luz. 

12. Qual é o alcance de uma bala?

     A bala não tem alcance. Isso continua até atingir um robô ou uma parede.

13. Quero disparar uma bala de cada vez, mas eu não posso. Por quê?

Toda vez que você atira, a arma gera um pouco de calor. Você deve esperar até que ela esfrie. Se você der uma ordem de fogo quando sua arma estiver quente, ele não fará nada. O calor gerado por um tiro é 1 + (poder de fogo / 5). A arma esfria a uma taxa de inadimplência de 0,1 por turno (note que você pode mudar este parâmetro quando você executar a batalha, mas ninguém geralmente faz). Isso significa que você pode disparar uma bala de potência 3.0 a cada 16 voltas.

14. Quanto dano que uma bala faz? Como faço para ganhar ou perder energia?

Você perde energia cada vez que você bater em uma parede, você é atingido por uma bala  inimiga,  chocar com um inimigo,  ou você disparar sua arma. A quantidade de energia que você perde por ser atingido é de 4 * Potência bala + 2 * max ( poder bala - 1 , 0). Assim, o valor máximo é de 16,0. Quando atira , você gasta uma quantidade de 

Page 3: FAQ Robocode

energia igual à potência da bala disparada . Quando uma das suas balas atinge um inimigo, você coleta de volta 3 * energia poder bala.  Quando você bate num robô inimigo   ,   cada  robô  tem 0,6  danos.  Se  um Robô avançado  (mas  não um robô ou JuniorRobot )  atinge uma parede ,  vai  demorar max (  abs (velocidade) * 0,5-1  ,  0) danos.

15. Algumas vezes eu recebo desativado. O que acontece?

Você não pode se matar, então quando sua energia cai para zero , porque se você bater em uma parede ou o atirar  ,  o robô   fica desativado. Ele não será capaz de mover-se nem atirar. Se você tiver sorte o suficiente e uma das suas balas no ar atinge um inimigo, você vai ter um pouco de energia para trás e recuperar status desativado.

16. Recebo desativado , mas a minha energia > 0. Por quê?

Existem algumas possíveis causas. Você pode ter chamado a getXXX () função - como getVelocity () - muitas vezes por turno. O limite é de 10 mil getXXX () função chama por turno. Para evitar a desativação, em tais situações, seja loja retornou valores variáveis para uso futuro ou usar um objeto RobotStatus obtidas StatusEvent . Outro caso em que você pode ser desativado é lançar uma exceção, o que pode desativar o robô, mesmo se você pegar a exceção. Além disso, se o seu robô fica preso em um loop infinito (ou muito tempo) e ignora muitas voltas , ele também pode ficar desativado.

17. Qual a velocidade que eu passo ?

Você  pode  mover  a  uma  velocidade  máxima  de  8,0  unidades   /   volta.  Você  pode modificar (para baixo) a sua velocidade máxima usando setMaxVelocity ( ... ) . Note que o bot vai sempre acelerar para alcançar sua velocidade máxima .

18. Qual a velocidade que eu acelerar?

Você acelerar a 1 unidade / volta ,  e você desacelerar no 2 unidades / volta .  Por exemplo, se você está se movendo a uma velocidade de 8,0 e inverter a direção de suas velocidades será [ 6.0, 4.0 , 2.0, 0.0, 1.0, 2.0 , 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] .

19. Qual a velocidade que eu ligo ?

Quanto mais rápido você for, mais lentamente você virar. A fórmula para calcular em graus é 10-0,75 * abs (velocidade) .

20. O que é do tamanho de um robô?

O tamanho de um bot é 36x36 . Note-se, este é ligeiramente menor do que a imagem do robô. Ele é modelado como um quadrado não rotativo, por isso é sempre o mesmo, independentemente do seu título .

Page 4: FAQ Robocode

21. Parece que não segue Robocode física padrão. Se a minha velocidade é 0 e I acelerar (aceleração = 1) minha velocidade final é 1, mas deve ser de 0,5 . O que aconteceu?

Tempo em Robocode , em vez de ser contínuo, está em discretas "tiques" . Primeiro aceleração é calculado, então a velocidade, e , em seguida, a posição . Então se você está parado em uma posição 0 e você acelerar um , sua velocidade próxima vez vai ser um e sua posição também 1 .

22. Como posso detectar quando um inimigo foi demitido?

Não há nenhuma maneira direta para detectar quando um inimigo disparou ,  mas você pode deduzir que , monitorando a queda de energia inimigo. A queda entre 0,1 e 3 normalmente significa que ele disparou uma bala (pode haver outras razões , tais como a baixa hit bala de energia ou um hit parede). Acessos de parede são mais ( ou menos)   ,  bem detectável   .  A  desaceleração > 2  significa  que o  bot  bater  em uma parede (ou outro bot ) . A desaceleração < = 2 pode ser um simples bot bater os freios , ou bater uma parede em velocidade = 2, mas desde que atingiu uma parede em que a velocidade não vai  causar nenhum dano ,  você pode ignorar  isso.  AdvancedRobots tomar abs (velocidade) / 2 - 1 ( Nunca <0) dano ao bater numa parede , por isso, a detecção   (significativas   )   parede   sucessos   e   ajustando   a   queda   inimigo consequentemente, sucessos de parede podem ser filtrados a maior parte do tempo. Este método falha quando o inimigo bate em outro robô .

23. Como posso detectar a posição e direcção de uma bala inimiga ?

Você não pode. Não há nenhuma maneira de saber que , direta ou indiretamente. Mas, claro, você sempre pode adivinhar ...

24. Quão rápido eu posso transformar a minha arma?

     A arma gira em 20 graus por volta.

25. Quão rápido eu posso transformar o meu radar ?

     Acontece de 45 graus por volta.

26. Posso saber o título da arma do inimigo / radar ?

   Não.

27. Posso especificar a posição inicial do meu robô ?

Page 5: FAQ Robocode

    Não. Os robôs são colocados aleatoriamente no campo no início de cada rodada.

28. O que é a diferença entre o setXXX () (por exemplo setFire ()) e o XXX () ( por exemplo, incêndios ()) métodos?

Basicamente, os métodos setXXX () apenas notificar Robocode para tomar alguma ação no final do turno . Os métodos XXX () do tipo terminar o turno quando você chamá-los, e eles bloqueiam o fio de seu robô até a conclusão de comando. A menos que você tenha uma boa razão , você deve quase sempre utilizar a versão setXXX () ao escrever AdvancedRobots .

29. Como posso evitar a minha arma / radar girando quando meu robô fica ?

Você   pode   usar   setAdjustGunForRobotTurn   ()   ,   setAdjustRadarForGunTurn   (),   e setAdjustRadarForRobotTurn   ()   para   controlar   isso.   Se   você   chamar setAdjustGunForRobotTurn   ()   e   setAdjustRadarForGunTurn   ()   ,   você   não   precisa chamar setAdjustRadarForRobotTurn ().

30. Por que existem duas funções para getBearing ( ), por exemplo - uma em radianos e um em graus? Existe algum ganho de desempenho se eu usar radianos em vez de graus ?

Não existe uma verdadeira vantagem de usar um ou o outro . Basta usar o que você preferir. Muitas vezes, as pessoas começam a usar graus ( só porque eles se sentem mais confortáveis com eles ) e mais tarde mudar para radianos ( porque os cálculos são mais fáceis , pois você pode usar o built-in Java funções trigonométricas ) . Apenas lembre-se de usar sempre ou sempre radianos graus; misturá-los não é uma boa idéia.

31. Eu preciso traçar minhas ações bots e variáveis. Vi que todo mundo usa out.println ( "..." ) , mas onde é que impresso ?

Ela imprime no console robô. Quando você executa a batalha, basta clicar no botão do lado direito da tela que mostra o nome do seu robô para abrir seu console.

32. Como você começa o seu radar para manter o foco em um robô que você definiu como seu alvo?

Você acabou de ligar o radar o contrário, quando você digitalizar o bot. Você bloquear o radar, não transformá-lo em 45 graus , mas apenas o arco necessária para manter o foco. Veja a página de radar para alguns códigos de exemplo.

Page 6: FAQ Robocode

33. Como posso saber quantos inimigos estão no campo de batalha?

Você pode usar o método getOthers ()  para saber quantos inimigos vivos estão no campo de batalha.

34. Estou tentando reconhecer um inimigo / companheiro de equipe de seu nome (usando e.getName ()) , mas a condição sempre falha . O que está acontecendo ?

Por  causa  da  maneira  divertida de   interpretar   referências  para  Cordas   (  para  não mencionar  a   falta  de  sobrecarga  de  operador   )  de   Java,  você  não pode usar  uma expressão como if ( e.getName () == testname ) para verificar a igualdade. Você tem que usar o método Equals () , como no caso ( e.getName (). Equals ( testname ) ) .

35. Como faço para manter os dados de volta para volta e batalha para a batalha?

A maneira mais fácil é para salvar os dados entre as rodadas de uma batalha é fazer com que as  variáveis  na  classe  bot  estática.  Porque Robocode usa  um classloader separado para cada robô, as variáveis não entrarão em conflito , mesmo quando você tem mais de uma cópia de um robô em uma batalha . Note que isto irá salvar os dados entre os rounds, não entre batalhas. Para salvar entre as batalhas você terá que salvar em um arquivo. O espaço em disco máximo permitido para os arquivos é 200k . Olhe para a API Robocode para mais detalhes.

36. Eu recebo a seguinte mensagem quando eu executar o meu bot, e eu não sei como resolvê-lo .

SISTEMA: Você fez 10 mil chamadas para métodos getXX sem chamar execute ()

SISTEMA: Robot desativado: muitas chamadas para métodos getXX .

Robocode impede de funções como getX () ou getVelocity () muitas vezes durante um único volta chamada. Então, se você estiver usando-os em um ciclo  longo ,  ele vai aumentar esse erro . Na verdade, 95 % do tempo , esse erro é um sintoma de um loop infinito em seu bot. Se você sabe que tem um ciclo longo , mas finito e você receber esse erro , ou simplesmente atribuir os valores que você deseja usar para a variável ou usar um objeto RobotStatus obtidas StatusEvent .

37. Estou usando bulletObject = setFireBullet (power) para disparar , em seguida, eu quero obter as coordenadas de bala. Mas quando eu tento imprimi-los usando System.out.println ( bulletObject.getX () + bulletObject.getY ()) eu recebo um erro . O que há de errado?

setFireBullet () cria um objeto de bala , mas a bala não é realmente deixar o seu bots arma até a próxima escala , então você não pode fazer getX () ou getY () na bala até 

Page 7: FAQ Robocode

então. Se você alterá-lo para fireBullet () você deve estar OK , porque a função não retornará até que a bala está no ar . Se fireBullet () não irá funcionar para você, você vai ter que inventar outra forma de se certificar de que você não faz getX () e getY () em balas até a virada depois de incêndio. Por exemplo , você pode armazenar balas em um ArrayList, e imprimir suas coordenadas antes de disparar em seu loop principal , de modo que um determinado bala será adicionado ao vetor em um turno , mas não vai ser  acessada até a próxima vez quando seu  loop principal  começa de novo.  Como alternativa, o bot pode tentar prever / simular a sua própria localização na próxima escala , para saber onde a bala vai ser criado.

38. Eu quero reverter minha direção quando o meu movimento está prestes a terminar . Eu uso algo como if ( getDistanceRemaining () < mínimo) , mas o bot se comporta de uma maneira estranha .

O método getDistanceRemaining () ( e ,  em geral,  todos os métodos que retornam estantes movimentos do corpo , arma, ou radar ) pode retornar um valor positivo ou negativo   ,   dependendo   da   direção   do   seu   movimento   .   Use   if   (   Math.abs ( getGetDistanceRemaining () ) < mínimo) em seu lugar.