MC336/MC346 - Paradigmas de Programação

Turmas AB - Segundo Semestre de 2012

Voltar à pagina inicial da disciplina

Space Football


O Jogo

Em comemoração ao bicentenário da primeira missão tripulada à Lua, a plataforma espacial Maracanã II, localizada na órbita de Marte, sediou o primeiro campeonato de Space Football. O esporte substituiu o futebol (e o futebol americano) que foram banidos da Terra no final do século XXI.

Devido ao grande sucesso do primeiro campeonato de Space Football, serão realizados nesse ano dois campeonato simultâneos, um deles em Marte (na plataforma Maracanã II) e outro em Vênus (na recém inaugurada plataforma especial Itaqueirão II).

Porém, para aumentar a competitividade dos jogos, as regras do esporte foram levemente alteradas.

O Space Football é disputado por dois times de robôs gigantes, de armaduras brancas e pretas. Cada robô ocupa uma posição de um campo de batalha quadriculado, formado por n+2 linhas (numeradas de 0 a n+1) e n colunas (numeradas de 1 a n). Cada time possui inicialmente o mesmo número de robôs (entre n e 2n), colocados de forma aleatória nos campos de cada time. O campo do time branco corresponde às linhas 1 a (n-1)/2 (arredondado para baixo) e o campo do time preto corresponde às linhas (n+1)/2 + 1 (arredondado para cima) a n.

Uma bola é iniciada com um robô, escolhido aleatóriamente.

As posições do campo de batalha são identificadas usando o formato (linha, coluna). Cada time numera as posições do campo de batalha a partir da posição (0,1) que corresponde ao canto inferior esquerdo.

A primeira e a última linha do campo (numeradas como 0 e n+1, respectivamente) representam as áreas de gol (equivalente as end zones, do extinto futebol americano).

Vence o jogo o time que conseguir carregar a bola até a área de gol do jogador adversário (goal victory) ou conseguir destruir todos os robôs adversários (destruction victory).

Os times se revezam na realização de jogadas, sendo que cada time realiza uma única jogada de cada vez. Uma jogada pode ser um movimento, um ataque ou um passe.

Um robô sempre move em direção ao gol adversário, jamais retrocedendo ou se movimentando para os lados.

Um robô pode se movimentar para uma posição livre (sem robôs) imediatamente à sua frente ou para as diagonais. Se o robô estiver sem a bola, poderá se mover também para as posições imediatamente a frente das posições citadas, caso elas estejam livres.

Um robô sem a bola, ao ocupar a posição onde se encontra a bola, passa a deter sua posse e a carrega-a consigo, a menos que seja destruído por um robô adversário ou decida passar a bola para outro robô.

Um robô pode destruir (e remover do campo de batalha) um robô adversário que esteja em uma das diagonais a sua frente (a uma posição de distância), ocupando assim a posição onde o robô adversário estava. Caso o robô destruído tivesse posse da bola, esta passará a ser da posse do atacante.

Um robô sem a bola pode também executar um ataque suicida, que consiste em atacar um robô adversário que se encontra em uma das posições imediatamente a frente às diagonais do atacante ou 2 casas a frente do atacante. Neste caso, os robôs atacante e atacado serão destruídos (e removidos do campo de batalha). Caso o robô atacado tivesse a posse da bola, esta continuará na mesma posição, mas não estará na posse de nenhum jogador.

O robô que carrega a bola pode passar a bola para outro robô do mesmo time que esteja localizado em qualquer posição à sua frente (inclusive nas diagonais), a uma posição de distância.

Caso um robô alcance a área de gol do jogador adversário, mas não esteja de posse da bola, ele será destruído e removido de campo.

As figuras abaixo ilustram as regras básicas de movimentação, ataque e passe.

Figura 1: Possível configuração inicial do campo de batalha e numeração das posições.
Figura 2: Exemplos de movimentos válidos para robôs brancos sem bola. A seta azul indica os movimentos para posições livres, a seta vermelha para ataques válidos e a seta laranja para ataques suicidas válidos.
Figura 3: Exemplos de movimentos válidos para um robô branco com bola. A seta azul indica os movimentos para posições livres e a seta amarela para passes válidos.
Figura 4: Exemplos de movimentos válidos para um robô branco com a bola. A seta azul indica os movimentos para posições livres e a seta vermelha para ataques válidos.

Para ajudar o desenvolvimento das estratégias, foi desenvolvido um Campo de Batalha Interativo (online / download).


O Campeonato

Introdução

Cada aluno será reponsável pela implementação de um jogador de Space Football. A competição ocorrerá da seguinte forma. Escolhe-se aleatoriamente uma configuração inicial para o tabuleiro de todas as partidas da competição. Depois, para cada par de alunos, serão realizadas duas partidas:

  1. Jogador 1 com o time branco x Jogador 2 com o time preto
  2. Jogador 1 com o time preto x Jogador 2 com o time branco

O jogador desenvolvido pelo aluno não só precisará implementar código referente ao time branco, pois, nas partidas em que o aluno jogar com o time preto, a infra-estrutura do campeonato fará as conversões necessárias.

Configuração Inicial do Campo de Batalha

A configuração inicial do campo de batalha seguirá as seguintes regras:

  1. O número de colunas (n) será escolhido de maneira aleatória e uniforme no intervalo entre 5 a 12 (inclusive).
  2. O número de robôs de cada equipe será sorteado entre n e 2n.
  3. Os robôs brancos serão distribuídos aleatoriamente entre as linhas 1 a (n-1)/2 (arredondado para baixo).
  4. Os robôs pretos serão distribuídos aleatoriamente entre as linhas (n+1)/2 + 1 (arredondado para cima) a n.
  5. A bola será iniciada com um jogador, selecionado aleatoriamente.

Pontuação nos Campeonatos

Alguns conceitos são necessários para entender a pontuação no campeonato.

A pontuação no campeonato será calculada da forma mostrada a seguir.

  1. Para cada partida, o vencedor recebe três pontos (em caso de goal victory ou se o adversário for desclassificado por jogada inválida) ou dois pontos (em caso de destruction victory) e o perdedor recebe zero pontos.
  2. Os jogadores são separados em dois grupos:
    • Grupo A: Jogadores com pelo menos 90% de partidas válidas
    • Grupo B: Jogadores com menos de 90% de partidas válidas
  3. Em relação aos jogados do Grupo A, a nota final do campeonato será atribuída da seguinte forma:
    1. O jogador com maior pontuação receberá nota 10.
    2. O jogador com menor pontuação receberá nota 5.
    3. As notas dos demais jogadores serão calculadas proporcionalmente à pontuação obtida em relação aos jogadores do Grupo A com maior e menor pontuação no campeonato.
  4. Os jogadores do Grupo B receberão nota de acordo com a fórmula: 5,0*PV, onde PV é o percentual de partidas válidas realizadas pelo jogador no campeonato.

Nota Final do Aluno

As notas finais de cada projeto de implementação serão calculadas através da média de todos os campeonatos realizados durante o período do campeonato oficial (veja página inicial da disciplina para detalhes sobre as datas dos campeonatos).

O cálculo da média será efetuado da seguinte forma:

  1. Seja C o número de campeonatos realizados no período.
  2. Seja Si a pontuação normalizada de um dado jogador no campeonato i. A pontuação normalizada é dada pela nota no campeonato dividida por 10.
  3. Para cada aluno soma-se a sua pontuação normalizada em todos os campeonatos. O valor do somatório será a pontuação total normalizada do aluno (P).
  4. Seja Max a maior pontuação normalizada total existente (e equivalente a nota 10).
  5. Seja Min = C/2 o score mínimo para um aluno obter nota 5.
  6. A nota final (N) de cada jogador é obtida da seguinte forma:
    1. Se a pontuação normalizada total for menor que Min:
      • N = (P/Min) * 5
    2. Se a pontuação normalizada total for maior ou igual a Min:
      • N = (((P - Min)/(Max - Min)) * 5) + 5

Para submeter um jogador ou acompanhar os resultados dos campeonatos, alunos de MC336 (turmas B e #) devem ir para para Marte. Alunos de MC346 (turma A) devem ir para para Vênus.