You are here

Atividade 1

TankSoar

 

    O TankSoar é semelhante ao jogo Eaters, onde o programa SOAR controlará um tank que move-se num mundo retangular que possui obstáculos. O tank possui mais ações e mais sensores que a criatura eater. Os tanks também interagem, podem atirar um no outro, significando que os programas do TankSoar são muito mais complexos que os do jogo Eaters. A figura, a seguir, exibe uma tela do mapa do TankSoar:

    O mundo do TankSoar consiste de um retângulo de 14x14 células, formando o mapa. O mapa é circundado por um muro de pedras. As divisórias internas são formadas por árvores (Obstacles). Há uma variedade de mapas que podem ser carregados no aplicativo TankSoar, com diferentes tipos de paredes internas. Existem alguns objetos disponíveis (indicados na figura acima) no ambiente do TankSoar. Esses objetos serão detalhados adiante. Cada agente TankSoar controla um tank. O tank move-se uma célula por vez no mapa. Um tank pode realizar algumas ações, pode recolher alguns objetos do mapa (consumindo recursos), e possui sensores para monitorar seu ambiente.

Rodando o TankSoar

    A figura seguinte exibe a tela do programa TankSoar. Para criar um novo tank, basta pressionar o botão New. Em seguida, pressiona-se o botão Soar, na janela aberta, e seleciona-se a produção simple-bot.soar (disponível na pasta /Agents/TankSoar/tutorial/).

    A figura, acima, exibe o tank criado (emitindo sinal de radar). É possível visualizar as informações sensorias captadas pelo radar do tank, na janela Radar. Também é exibida a direção do movimento do tank (Facing: north). A janela Blocked informa as direções possíveis de movimentação do tank, neste caso, as direções leste e sul estão bloqueadas. Pode-se também visualizar outras informações sobre o tank: seu nome (Name), pontuação (Score), mísseis disponíveis (Missiles), saúde (Health), e energia disponível (Energy). Conforme o tank move-se pelo seu ambiente, ele pode recolher objetos. Continuando essa simulação, o tank recolheu alguns mísseis. Os mísseis desaparecem quando são coletados, porém, novos mísseis surgem no mapa durante a simulação. A figura abaixo exibe a tela do SOAR Debugger:

    Pode-se observar que o tank realiza movimentos do tipo move e do tipo turn. Esses são os dois únicos operadores, para mover o tank, sendo selecionados e aplicados nesta simulação. A simulação seguinte, é rodada num mapa contendo dois tanks. Conforme os tanks se movem pelo ambiente, sua energia é decrementada, devido ao uso do radar. Ao passar sobre um objeto do tipo Energy Charger (objeto semelhante a uma bateria), a energia do tank é incrementada. A janela Smell agora exibe alguma informação. Essa janela indica a aproximação de outro tank. Quando um tank detecta a presença de outro tank, conforme figura abaixo, este dispara um míssil na direção do tank detectado.

    A tela seguinte do SOAR Debugger exibe as ações tomadas pelo tank que disparou o míssil. O operador attack foi selecionado, em seguida, foi selecionado o operador fire-missile. Após disparar o míssil, o tank se moveu para o lado, operador slide, e voltou para o seu comportamento de caminhar pelo ambiente, operador wander. O outro tank, aparentemente, não reagiu ao projétil disparado, talvez por não ter percebido a aproximação do tank inimigo.

    Continuando a simulação, ocorreu uma situação ligeiramente diferente da anterior. Os dois tanks ficaram muito próximos, conforme figura abaixo. Ambos entraram no modo chase, para perseguir o adversário, e em seguida, ambos entraram no modo attack, disparando um míssil. Na sequência, o operador retreat foi selecionado, os tanks se moveram e aguardaram algum tempo, e então retornaram ao modo wander. Esses opredores podem ser visualizados nas telas do SOAR Debugger de cada tank (não mostradas aqui). Um dos tanks foi atingido pelo projétil e teve sua saúde (Health) decrementada. Ao passar sobre um objeto do tipo Health Charger (objeto esférico vermelho), a saúde do tank pode ser recuperada. A figura, abaixo, também mostra uma alteração na janela Sound, indicando a presença, muito próxima, do tank inimigo (red) na face norte do tank (black). A janela RWaves também exibe uma informação semelhante, ou seja, a detecção do sinal de radar do tank adversário na face norte. A janela Incoming exibe informações sobre a aproximação de um míssil do adversário.

 

TankSoar: recursos, sensores, ações e objetos do jogo

  Recursos

Health: Cada tank possui um valor máximo de 1000 pontos, para este recurso. O tank morre quando sua saúde cai até 0. Um tank pode ressucitar, numa posição aleatória, com seus valores iniciais de seus recursos (health=1000, energy=1000 , missiles=15). Se um míssil atinge um tank, sem a proteção de seus escudos, sua saúde é decrementada em 400 pontos. A saúde do tank aumenta em 150 pontos quando este passa por um objeto Health Charger.

Energy: Cada tank possui um valor máximo de 1000 pontos, para este recurso. A energia do tank diminui quando ele usa seu radar (proporcional ao alcance do radar) ou quando o tank usa seus escudos (decrementando 20 pontos). A energia do tank é decrementada em 250 pontos quando este está usando seus escudos e é atingido por um míssil. E é aumentada em 250 pontos quando o tank passa sobre um objeto Energy Charger. Se a energia cai até 0, o tank não pode usar seu radar nem seus escudos.

Missiles: Cada tank começa o jogo com 15 mísseis. Ao passar sobre um objeto Pack of Missiles, o suprimento de mísseis do tank aumenta em 7 mísseis. O suprimento é decrementado, em um, cada vez que o tank dispara um míssil.

  Sensores Primários

Blocked sensor: Detecta se as células adjacentes ao tank estão bloqueadas ou livres. Este sensor não diferencia o objeto que bloqueia a célula, ou seja, não mostra se este é um obstáculo ou outro tank.

Incoming sensor: Detecta a aproximação de um míssil de um outro tank. Se houver algum obstáculo entre o tank e o míssil, este sensor não acusará a aproximação do míssil disparado contra o tank.

Radar sensor: Este sensor detecta objetos na frente do tank numa coluna de três células de largura. A distância que o radar alcança depende de sua atual configuração e da distância do objeto mais próximo detectável. Objetos que estejam dentro dessa distância serão detectados pelo radar. O radar também exibe objetos próximos às laterais do tank. Este sensor também exibe a distância do objeto (obstáculo, célula vazia, míssil ou tank) em relação ao tank, inclusive a cor do tank detectado. O radar também exibe informações sobre a detecção de objetos Health Charger, Energy Charger, Packs of Missiles.

RWaves sensor: Este sensor indica a presença de um sinal de radar inimigo. O sensor acusa a direção (backward, forward, left, right) do sinal detectado, indicando para o tank que o tank inimigo detectou sua presença.

Smell sensor: Detecta a aproximação de outro tank, indicando sua distância e cor. Quando houver mais de dois tanks próximos a este, as informações do mais próximo serão exibidas. Este sensor penetra obstáculos, assim, o tank mais próximo nem sempre está ao alcance (pode estar circundado de objetos). Se houver dois tanks mais próximos, um deles será escolhido aleatóriamente. A distância indicada é o número de células, em X e em Y, entre os tanks (distância Manhattan).

Sound sensor: Detecta o tank mais próximo que esteja a até 7 células de distância deste, e que fizeram algum movimento anterior. Tanks que não se moveram não fizeram nenhum ruído e não podem ser detectados. A informação deste sensor indica a direção de movimento mais curta para alcançar o tank detectado. Se houver mais de uma direção, uma direção será escolhida aleatóriamente.

  Sensores Secundários

Clock: Contador global. Começa com valor 1. É incrementado a cada decisão tomada pelo tank.

Direction: Direção na qual o tank se move. Pode ser: norte (north), sul (south), leste (east), oeste (west).

Energy: Energia atual do tank. Caso seja zero, o tank não poderá usar seu radar e nem seus escudos.

Energy recharger: Indica se o tank encontra-se sobre um objeto do tipo Energy Charger.

Health: Saúde atual do tank. Caso atinja o valor zero, o tank morre e ressuscita numa posição qualquer.

Health recharger: Indica se o tank encontra-se sobre um objeto do tipo Health Charger.

Missiles: Número de mísseis atual do tank.

My-color: Cor do tank.

Radar-distance: Último valor de distância medido pelo radar.

Radar-setting: Distância do alcance do radar.

Radar-status: Indica se o radar está ligado.

Random: Número entre 0 e 1. Muda após cada decisão tomada pelo tank.

Resurrected: Indica se o tank foi ressuscitado.

Shield-status: Indica se os escudos estão ligados.

X: Coordenada X do tank no mapa. Entre 1 e 14.

Y: Coordenada Y do tank no mapa. Entre 1 e 14.

  Ações

Move: Move o tank para frente (forward), pra trás (backward), ou para os lados (left, right). Este movimento não pode ser executado junto com o movimento Rotate. Ambos são exclusivos entre si. Se um tank tentar se mover e for bloqueado, ele perde 100 pontos de saúde. Um tank também pode não se mover (wait) ficando parado onde está.

Rotate: Um tank pode girar para direita (right) ou esquerda (left). Este movimento sempre é possível de ser executado pelo tank.

Fire: Um tank pode disparar apenas um míssil por vez. Esta ação pode ser executada junto com qualquer outra ação. O míssil segue a direção para a qual o tank tende a se mover. Cada disparo decrementa o suplimento de mísseis do tank, podendo falhar caso não haja mais mísseis disponíveis.

Radar: O tank pode desligar e ligar seu radar. Se o tank estiver sem energia, esta ação falhará.

Radar Range: O tank pode ajustar o alcance de seu radar, entre 1 e 14. Quanto maior o alcance, mais energia será consumida pelo tank.

Shields: Um tank pode ligar e desligar seus escudos, junto com qualquer outra ação. Ativar os escudos consome 20 pontos de energia. Esta ação falhará se o tank não tiver mais energia.

  Objetos do Jogo

Obstacles: Obstáculos se assemelham a árvores e estão espalhados pelo mapa do jogo. Eles nunca se movem e não podem ser destruídos.

Health Charger: Há apenas um objeto deste tipo por mapa do jogo. Sua posição nunca muda durante o jogo. Cada vez que o tank decide parar sobre este objeto, sua saúde (Health) é incrementada em 150 pontos.

Energy Charger: Há apenas um objeto deste tipo por mapa do jogo. Sua posição nunca muda durante o jogo. Cada vez que o tank decide parar sobre este objeto, sua energia (Energy) é incrementada em 250 pontos.

Packs of Missiles: Estes objetos estão espalhados pelo mapa do jogo, aleatóriamente. Estes objetos nunca mudam de posição, após serem criados. Pacotes de mísseis são criados em posições e tempos aleatórios. Um tank recolhe este objeto ao parar sobre ele; o pacote desaparece e o suplimento de mísseis do tank é incrementado em 7 mísseis.

Tanks: Tanks são controlados por agentes TankSoar. Eles executam várias ações, conforme descrito acima.

Combate entre Tanks

    Um tank pode destruir outro tank atingindo-o com seus mísseis. Os mísseis se movem 1,3 vezes mais rápido que um tank. Se um tank estiver com seus escudos desativados e for atingido por um míssil, sua saúde é decrementada em 400 pontos. Caso seus escudos estejam ativados, o tank não perde saúde, mas, perde 250 pontos de energia ao ser atingido por um míssil. Se o tank estiver parado sobre um objeto Energy Charger ou Health Charger e é atingido por um míssil, o tank morre imediatamente. O tank ganha pontos quando consegue atingir outro tank com seus mísseis. São 2 pontos caso o tank adversário esteja com seus escudos baixados, ou, 3 pontos quando o tank adversário é destruído. Um tank perde 1 ponto quando atingido por um míssil, estando com seus escudos desativados, e 2 pontos cada vez que é destruído. Os tanks tem um número ilimitado de vidas, sendo que o jogo termina quando um tank conseguir 50 pontos.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer