<commit_before><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Breakout</title>
<style type="text/css">
canvas {
	border: 2px solid #000000;
}
</style>
</head>
<body onload="init()">
	<canvas id="canvas" width="800" height="600">Navegador não compatível com HTML5 Canvas</canvas>
	<script type="text/javascript">
		var canvas, ctx, // variaveis principais
		barraW, barraH, // largura e altura do jogador
		barraPosX, barraPosY, // posição do jogador
		barraVel, // velocidade da barra
		teclaEsq, teclaDir; // status das teclas
		function init() {
			canvas = document.getElementById("canvas");
			ctx = canvas.getContext("2d");

			barraW = 100;
			barraH = 30;
			barraPosX = (canvas.width - barraW) / 2;
			barraPosY = canvas.height - barraH;
			barraVel = 30;

			teclaEsq = false;
			teclaDir = false;

			document.addEventListener('keyup', function(e) {
				if (e.keyCode == 37) {
					teclaDir = true;
				} else if (e.keyCode == 39) {
					teclaEsq = true;
				}
			}, false);

			document.addEventListener('keydown', function(e) {
				if (e.keyCode == 37) {
					teclaDir = false;
				} else if (e.keyCode == 39) {
					teclaEsq = false;
				}
			}, false);

			setInterval(gameLoop, 30);
		}

		function gameLoop() {
			atualizaMovimento();

			ctx.clearRect(0, 0, canvas.width, canvas.height); // limpando o canvas

			desenhaJogador();
			desenhaBarras();
		}

		function atualizaMovimento() {
			// movimento do jogador
			if (teclaEsq != teclaDir) {
				if (teclaEsq) {
					// console.log("esq");
					if (barraPosX > 0) {
						barraPosX -= barraVel;
					}
				} else {
					// console.log("dir");
					if (barraPosX < (canvas.width - barraW)) {
						barraPosX += barraVel;
					}
				}
			}
		}

		function desenhaJogador() {
			ctx.fillStyle = "green";
			ctx.fillRect(barraPosX, barraPosY, barraW, barraH);
		}

		function desenhaBarras() {
			for (var i = 0; i < 8; i++) {
				for (var j = 0; j < 5; j++) {
					ctx.beginPath();
					ctx.rect(i * barraW, j * barraH, barraW, barraH);
					ctx.fillStyle = "blue";
					ctx.fill();
					ctx.lineWidth = 1;
					ctx.strokeStyle = "black";
					ctx.stroke();
				}
			}
		}
	</script>
</body><commit_msg>colisão básica<commit_after><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Breakout</title>
<style type="text/css">
canvas {
	border: 2px solid #000000;
}
</style>
</head>
<body onload="init()">
	<canvas id="canvas" width="800" height="600">Navegador não compatível com HTML5 Canvas</canvas>
	<script type="text/javascript">
		var canvas, ctx, // variaveis principais
		barraW, barraH, // largura e altura do jogador
		barraPosX, barraPosY, // posição do jogador
		barraVel, // velocidade da barra
		bolaPosX, bolaPosY, bolaRaio, bolaAngulo, bolaVel, bolaSubindo, // propriedades das bola
		teclaEsq, teclaDir; // status das teclas
		function init() {
			canvas = document.getElementById("canvas");
			ctx = canvas.getContext("2d");

			barraW = 100;
			barraH = 30;
			barraPosX = (canvas.width - barraW) / 2;
			barraPosY = canvas.height - barraH;
			barraVel = 30;

			bolaPosX = canvas.width / 2;
			bolaPosY = canvas.height / 2;
			bolaRaio = 10;
			bolaAngulo = 0;
			bolaVel = 20;
			bolaSubindo = false;

			teclaEsq = false;
			teclaDir = false;

			document.addEventListener('keyup', function(e) {
				if (e.keyCode == 37) {
					teclaDir = true;
				} else if (e.keyCode == 39) {
					teclaEsq = true;
				}
			}, false);

			document.addEventListener('keydown', function(e) {
				if (e.keyCode == 37) {
					teclaDir = false;
				} else if (e.keyCode == 39) {
					teclaEsq = false;
				}
			}, false);

			document.addEventListener('mousemove', function(e) {
				var mousePos = getMousePos(canvas, e);
				barraPosX = mousePos.x - (barraW / 2);
			}, false);

			setInterval(gameLoop, 30);
		}

		function getMousePos(canvas, e) {
			var rect = canvas.getBoundingClientRect();
			return {
				x : e.clientX - rect.left,
				y : e.clientY - rect.top
			};
		}

		function gameLoop() {
			atualizaMovimento();

			ctx.clearRect(0, 0, canvas.width, canvas.height); // limpando o canvas

			desenhaBola();
			desenhaJogador();
			desenhaAlvos();
		}

		function atualizaMovimento() {
			if (teclaEsq != teclaDir) {
				if (teclaEsq) {
					// console.log("esq");
					if (barraPosX > 0) {
						barraPosX -= barraVel;
					}
					if (barraPosX < 0) {
						barraPosX = 0;
					}
				} else {
					// console.log("dir");
					if (barraPosX < canvas.width - barraW) {
						barraPosX += barraVel;
					}
					if (barraPosX > canvas.width - barraW) {
						barraPosX = canvas.width - barraW;
					}
				}
			}
			
			if(bolaPosY + bolaRaio > barraPosY) {
				if(bolaPosX + bolaRaio > barraPosX && bolaPosX - bolaRaio < barraPosX + barraW) {
					bolaSubindo = true;
				}
			} else if(encostouEmAlgumAlvo()) {
				bolaSubindo = false;
			}
			
			if(bolaPosX - bolaRaio <= 0 || bolaPosX + bolaRaio > canvas.width) {
				bolaAngulo = bolaAngulo * (-1); // inverte o eixo
			}
			bolaPosX += bolaAngulo;
			
			if(bolaSubindo) {
				bolaPosY -= bolaVel;
			} else {
				bolaPosY += bolaVel;
			}
			
		}
		
		function encostouEmAlgumAlvo() {
			for(var i = 0; i < 8; i++) {
				for(var j = 0; j < 5; j++) {
					if(bolaPosY - bolaRaio < (j * barraH) + barraH) {
						console.log("acertou!");
						return true;
					}
				}
			}
			return false;
		}

		function desenhaJogador() {
			ctx.fillStyle = "green";
			ctx.fillRect(barraPosX, barraPosY, barraW, barraH);
		}

		function desenhaBola() {
			ctx.fillStyle = "red";
			ctx.beginPath();
			ctx.arc(bolaPosX, bolaPosY, bolaRaio, 0, Math.PI * 2, true);
			ctx.closePath();
			ctx.fill();
		}

		function desenhaAlvos() {
			for (var i = 0; i < 8; i++) {
				for (var j = 0; j < 5; j++) {
					ctx.beginPath();
					ctx.rect(i * barraW, j * barraH, barraW, barraH);
					ctx.fillStyle = "blue";
					ctx.fill();
					ctx.lineWidth = 1;
					ctx.strokeStyle = "black";
					ctx.stroke();
				}
			}
		}
	</script>
</body>
{'fraction_non_alphanumeric': 0.15320287673524, 'fraction_numerical': 0.017059708981435023, 'mean_word_length': 2.6132930513595167, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 39, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3497347', 'n_tokens_mistral': 2980, 'n_tokens_neox': 2333, 'n_words': 501}