Skip to content

Commit

Permalink
Adicionado agentes inteligentes ao projeto dino ia (Agentes feitos po…
Browse files Browse the repository at this point in the history
…r José Gabriel)
  • Loading branch information
Ricardo committed Jul 20, 2024
1 parent 6727890 commit 15aaaf2
Show file tree
Hide file tree
Showing 5 changed files with 306 additions and 16 deletions.
Binary file added projetos/projeto-dino-ia/DinoSimples.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions projetos/projeto-dino-ia/dino.css
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,43 @@ h1 {
object-fit: cover;
object-position: bottom;
user-select: none;
/* position: absolute; */
transform: translate(0px, 205px);
}

#dinoAS {
width: 45px;
height: 45px;
background-color: transparent;
object-fit: cover;
object-position: bottom;
user-select: none;
/* filter: invert(48%) sepia(13%) saturate(3207%) hue-rotate(130deg) brightness(95%) contrast(80%); */
position: absolute;
transform: rotate(180deg) scaleX(-1);
}

.cacto {
background-color: transparent;
width: 20px;
height: 30px;
/* position: absolute; */
}
.cactoAS {
background-color: transparent;
width: 20px;
height: 30px;
/* position: absolute; */
}

#pontos {
text-align: center;
font-size: large;
background-color: transparent;
}
#pontosAS {
text-align: center;
font-size: large;
background-color: transparent;
color: red;
}
5 changes: 4 additions & 1 deletion projetos/projeto-dino-ia/dino.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@
<title>Dino</title>
<link rel="stylesheet" href="./dino.css">
<script src="./dino.js" defer></script>
<script src="./dinoAgenteSimples.js" defer></script>
</head>
<body>
<h1>Dino (Enter para iniciar e Seta para cima para pular)</h1>
<h3 id="pontos"><b>PONTUAÇÂO: 0</b></h3>
<h3 id="pontosAS"><b>PONTUAÇÂO (Agente Simples): 0</b></h3>
<h3 id="pontos"><b>PONTUAÇÂO (Agente Modelo): 0</b></h3>
<div id="container">
<div id="jogo">
<div id="dinoAS"><img src="./DinoSimples.png" width="45px" height="45px"></div>
<div id="dino"><img src="./DinoJump.png" width="45px" height="45px"></div>
</div>
</div>
Expand Down
88 changes: 73 additions & 15 deletions projetos/projeto-dino-ia/dino.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
(function() {
let jogo = document.getElementById("jogo");
let dino = document.getElementById("dino");
let pontos = document.getElementById('pontos');
Expand All @@ -6,6 +7,8 @@ let jogoAtivo = false;
let pontuacao = 0;
let dinoPosY = jogo.offsetHeight - dino.clientHeight;
let dinoPosX = 0;
let velocidadeCacto = 3; // Velocidade inicial dos cactos
let intervaloCactos = 1000; // Intervalo inicial para criar cactos

// Move o dino para baixo
dino.style.transform = `translate(${dinoPosX}px, ${dinoPosY}px)`;
Expand Down Expand Up @@ -51,33 +54,38 @@ function criarCactus() {
return { element: cactoDiv, position: posicaoInicial };
}


function moverCactus() {
let cactos = [];
let ultimoTempo = 0;

function criarCactos() {
const intervaloCactos = setInterval(() => {
if (!jogoAtivo) return;
let tempoAtual = Date.now();
if (tempoAtual - ultimoTempo >= intervaloCactos) {
let cacto = criarCactus();
cactos.push(cacto);
if (!jogoAtivo) {
clearInterval(intervaloCactos);
}
}, 1000);
ultimoTempo = tempoAtual;
}
requestAnimationFrame(criarCactos);
}
criarCactos();

function animar() {
if (jogoAtivo) {
for (let index = 0; index < cactos.length; index++) {
let cacto = cactos[index];
cacto.position -= 3; // Velocidade dos cactos
cacto.position -= velocidadeCacto; // Velocidade dos cactos
cacto.element.style.transform = `translate(${cacto.position}px, ${jogo.offsetHeight - dino.offsetHeight - 30}px)`;
if (cacto.position <= -20) {
if (cacto.position <= 0) {
jogo.removeChild(cacto.element);
cactos.splice(index, 1);
index--;
pontuacao++;
pontos.innerText = `PONTUAÇÂO: ${pontuacao}`;
pontos.innerText = `PONTUAÇÃO (Agente Modelo): ${pontuacao}`;

if (pontuacao % 10 === 0) {
velocidadeCacto += 0.5; // Aumenta a velocidade dos cactos a cada 10 pontos
intervaloCactos = Math.max(200, intervaloCactos - 50); // Diminui o intervalo de criação dos cactos, até um mínimo de 200ms
}
}
if (colisao(dino, cacto.element)) {
clearInterval(timer);
Expand All @@ -94,6 +102,7 @@ function moverCactus() {
requestAnimationFrame(animar);
}
}
criarCactos();
animar();
}

Expand All @@ -119,22 +128,66 @@ function limparTela() {
function reiniciarJogo() {
limparTela();
jogoAtivo = true;
velocidadeCacto = 3; // Reseta a velocidade dos cactos
intervaloCactos = 1000; // Reseta o intervalo de criação dos cactos
moverCactus();
timer = 0;
pontos.innerText = `PONTUAÇÂO: 0`;
pontos.innerText = `PONTUAÇÃO (Agente Modelo): 0`;
pontos.style.color = 'black';
pontos.style.backgroundColor = 'transparent';

// // Posiciona o dinossauro no início do jogo
// Posiciona o dinossauro no início do jogo
dinoPosY = jogo.offsetHeight - dino.clientHeight;
// dinoPosX = 0;
dinoPosX = 0;

// Atualiza a posição do dinossauro
dino.style.transform = `translateY(${dinoPosY}px)`;
dino.style.transform = `translate(${dinoPosX}px, ${dinoPosY}px)`;

window.addEventListener("keydown", (e) => {if (e.code == 'Enter' && !jogoAtivo) {reiniciarJogo();}});
}

function iniciarAgente(sensor) {
agente_timer = setInterval(() => {
if(sensor()) {
acionador();
}
if (!jogoAtivo) {
clearInterval(agente_timer);
}
}, 50);
}

// Agente Reativo Simples
function agenteSimples() {
iniciarAgente(sensorAS);
}

// Agente Reativo Baseado em Modelo
function agenteModelo() {
iniciarAgente(sensorAM);
}

function sensorAS() {
let dinoRect = dino.getBoundingClientRect();
let cacto = document.getElementsByClassName('cacto')[0];
let cactoRect = cacto.getBoundingClientRect();

return (dinoRect.right + 20) >= cactoRect.left;
}

function sensorAM(){
let dinoRect = dino.getBoundingClientRect();
let cacto = document.getElementsByClassName('cacto')[0];
let cactoRect = cacto.getBoundingClientRect();
let estado = velocidadeCacto;
let modelo = (estado - 3) * 12;

return (dinoRect.right + 20 + modelo) >= cactoRect.left;
}

function acionador(){
window.dispatchEvent(new KeyboardEvent('keydown', {code: 'ArrowUp'}));
}

// Eventos
window.addEventListener("keydown", (e) => {
Expand All @@ -143,4 +196,9 @@ window.addEventListener("keydown", (e) => {
}
});

window.addEventListener("keydown", (e) => {if (e.code == 'Enter' && !jogoAtivo) {reiniciarJogo();}});
window.addEventListener("keydown", (e) => {if (e.code == 'Enter' && !jogoAtivo) {
reiniciarJogo();
// agenteSimples();
agenteModelo();
}});
})();
Loading

0 comments on commit 15aaaf2

Please sign in to comment.