Sistemas reativos interagem continuamente e em tempo real com o ambiente sob os quais estão inseridos. Eles representam um campo amplo de aplicações e plataformas: de jogos eletrônicos em desktops, passando por apps em celulares, até a emergente internet das coisas em sistemas embarcados.
Neste curso iremos abordar os sistemas reativos sob diversos aspectos de software, tais como modelos de concorrência, linguagens de programação, técnicas de programação, e aplicações em múltiplas plataformas de hardware.
Ementa: Sistemas Reativos, Modelos de Concorrência Síncrono e Assíncrono, Programação Orientada a Eventos, Callbacks e o Padrão Observer, Máquinas de Estado, Co-rotinas, Programação Reativa Funcional, Programação Reativa Estruturada, Jogos, Arduino, Redes de Sensores sem Fio, Projetos.
-
Adrianno e Giancarlo
- Descrição: O projeto consiste na criação de um pequeno jogo top down de ação que consistirá em um cenário com obstáculos estáticos (alinhados a uma grade) e um jogador que poderá se movimentar horizontalmente e verticalmente no plano de forma livre usando as teclas do teclado. Espalhados pelo cenário estarão vários inimigos que tentarão alcançar o jogador, andando lentamente. Para isso, usaremos um algoritmo de pathfinding a ser decidido (provavelmente derivado de A*) que iremos adaptar para não comprometer a reatividade do jogo. O jogador também será capaz de eliminar os inimigos atirando projéteis que irão na direção do cursor do mouse, ao clicar na tela.
- Repositório: GitHub
- Vídeo: YouTube
-
Lucas e Rafael
- Descrição: O objetivo do projeto é de fornecer controle para a área do conjunto de salas na 6023-F, na UERJ (Universidade do Estado do Rio de Janeiro). Tem como objetivo facilitar o acesso de todas as Pessoas as salas 6023-F. Enquanto todos que estão presentes no Banco de Dados tem acesso a sala, somente o Professor consegue adicionar ou remover Pessoas do Banco de Dados, dando a essas permissão de entrada na sala ou removendo-as da lista de acesso.
- Repositório: GitHub
- Vídeo: YouTube
-
Camila e Renato
- Descrição: O Beach Raid é um jogo baseado em um famoso jogo de Atari dos anos 80, o River Raid. O jogo consiste em uma nave com combustível e munição infinitos que sobrevoa um deserto e precisa evitar ser atingida por seus inimigos (tanque de guerra, torre de guerra e helicóptero), que podem matá-la com tiros ou por colisão. O objetivo do jogo é sobreviver o máximo de tempo possível, havendo um record para cada nível de dificuldade (fácil, médio, difícil). A nave pode ser controlada via teclado ou pelo controlador Arduino.
- Repositório: GitHub
- Vídeo: YouTube
-
Matheus e Rodrigo
- Descrição: Fazer um jogo de labirinto no computador, que fosse controlado pelo arduino e tivesse um elemento de interatividade com o ambiente.
- Repositório: GitHub
- Vídeo: GoogleDrive
-
Anny e Leonardo
-
Gustavo e Luiz Henrique
-
Daniel e Diego
-
Rodrigo
-
Antônio
-
Carlos e Vitória
-
José
- Descrição: O projeto é um jogo de plataforma 2D no estilo survival, baseado em pontos. O jogador deve matar os monstros que aparecem na tela e evitar que eles o matem. O jogador pode pular, andar, atirar (apenas parado), recarregar e trocar de armas. A pontuação sobe para cada monstro morto. Depois de mortos eles tem chances de deixar cair munição. Os monstros seguem o jogador apenas pelo eixo x e dão dano ao enconstá-lo. Ao Receber dano o jogador é também empurrado para trás. Cada tiro acertado paralisa os monstros por um tempo, use isso a seu favor!
- Repositório: GitHub
- Vídeo: YouTube
-
Igor e Tiago
- Descrição: Projeto baseado no jogo “Frogger” em que foi utilizado o arduino como controle para o jogo. O joystick realiza a movimentação enquanto um botão se encarrega dos disparos do personagem. O objetivo do jogo é atravessar três sequências de obstáculos sem ser atingido por nenhum deles. O jogador tem direito a disparar sua arma três vezes para auxiliar na travessia. Ao concluir o objetivo o próximo nível é liberado.
- Repositório: GitHub
- Vídeo: YouTube
-
Lucas e Yago
-
Bruno e Guilherme
- Descrição: Jogo em SDL que aguarda interação com o usuário através de mensagem codificada em código morse pelo arduino.
- Repositório: GitHub
- Vídeo: ??
- Adrianno Sampaio, Giancarlo França, Yago Tomé
- Descrição: O projeto consiste na criação de um carro de duas rodas com direção automatizada com base em dados obtidos através de quatro sensores de distância: um frontal, no centro; dois para visão periférica, a ~45° para cada um dos lados; e um na parte traseira. O carro seguirá em frente sempre que possível, utilizando os sensores de visão periférica para auxiliar no julgamento do melhor sentido para rotacionar caso seja detectado algum obstáculo. Se ambos os sensores laterais sinalizarem uma colisão iminente ao mesmo tempo (em um intervalo de X ms), o carro se movimentará em ré até que seja possível rotacionar para um dos lados. Se o sensor de distância traseiro detectar um obstáculo próximo durante o movimento em ré, o carro irá parar e acionar uma buzina para sinalizar que está preso.
- Repositório: GitHub
- Vídeo: YouTube
-
Camila e Renato
- Descrição: O sistema de controle de acesso consiste em uma trava eletrônica, representada por um micro servo motor, que é destravada quando o usuário digita a senha correta. O sistema conta ainda com sinais sonoros e visuais que indicam ao usuário se a senha digitada está correta ou não.
- Repositório: GitHub
- Vídeo: YouTube
-
Igor e Tiago
- Descrição: O projeto consiste na utilização de um sensor de distância que medirá o quão próximo um objeto se aproxima dele e a utilização de alguns LEDs. Conforme algum objeto se aproxime do sensor, os LEDs irão piscar juntos com a buzina que emitirá um som (apito) que passará a fazer barulho em intervalos cada vez menores de acordo com a proximidade do objeto.
- Repositório: GitHub
- Vídeo: GitHub
-
José Matheus, Matheus Stutzel, Rodrigo Braga
- Descrição: Programar uma versão do jogo Timberman do Android no arduino.
- Repositório: GitHub
- Vídeo: GoogleDrive
-
Gustavo, Lucas, Luiz Henrique
-
Lucas e Rafael
- Descrição: O projeto do relógio Multifuncional dispõe de diversas modalidades. São eles: Relógio, Alarme, Timer e Cronômetro. O Relógio mostra as horas. O Alarme é para que dispare uma buzina quando o horário definido pelo usuário coincide com a hora do Relógio. O Timer é um tempo determinado pelo usuário que decresce até chegar a zero, disparando uma buzina. O Cronômetro é para medir o tempo que se passa. Apesar de ser possível visualizar apenas um módulo de cada vez, vale a pena frisar que os módulos podem funcionar simultaneamente.
- Repositório: GitHub
- Vídeo: GitHub