<!doctype html>
<html>
<head>
<style>
body {
height: 100%;
}
#background {
background-image: url("universe.jpg");
width: 100%;
height: 100%;
position: absolute;
left: 0px;
top: 0px;
display: block;
}
#ball {
position: absolute;
width: 30px;
height: 30px;
background-image: -webkit-radial-gradient(
74% 40%, circle cover, rgba(171, 166, 14, 1),
rgba(255, 0, 0, 1) 76%);
border-radius: 15px;
display: none;
}
@-webkit-keyframes rotate_kf {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
#score {
float: right;
}
#blackhole {
position: absolute;
width: 60px;
height: 60px;
top: 370px;
left: 370px;
background-image: url('bhole.png');
-webkit-animation: rotate_kf 5s linear 0 infinite normal;
}
#restart {
background-color: yellow;
padding: 5px;
}
@-webkit-keyframes pulse_kf {
from {
font-size: 60px;
}
to {
font-size: 80px;
}
}
#gameover {
position: absolute;
top: 50%;
width: 100%;
text-align: center;
color: yellow;
-webkit-text-stroke: 1px #00ff00;
font-size: 40px;
display: none;
-webkit-animation: pulse_kf 1s linear 0 infinite alternate;
}
</style>
<script>
var ball = null;
var interval_handler = null;
var gameover = null;
var dir_up = 0.0;
var dir_down = 0.0;
var dir_left = 0.0;
var dir_right = 0.0;
var dirX = 0.0;
var dirY = 0.0;
var posX = 50.0;
var posY = 50.0;
var holeX = 400.0;
var holeY = 400.0;
var saveX = null;
var saveY = null;
var angX = null;
var angY = null;
var points = 0.0;
function start() {
ball = document.getElementById('ball');
draw_ball();
ball.style.left = "50px";
ball.style.top = "50px";
blackhole = document.getElementById('blackhole');
blackhole.style.left = holeX - 30 + "px";
blackhole.style.top = holeY - 30 + "px";
gameover = document.getElementById('gameover');
gameover.style.display = "none";
score = document.getElementById('score');
dirX = 0.0;
dirY = 0.0;
posX = 50.0;
posY = 50.0;
interval_handler = setTimeout(animate, 20);
ball.style.display = "block";
saveX = null;
saveY = null;
points = 0.0;
}
function draw_ball() {
ball.style.left = posX - 15 + "px";
ball.style.top = posY - 15 + "px";
score.innerHTML = Math.floor(100000 * points) + " points";
}
function animate() {
dirX += (dir_right - dir_left) - (angX / 100);
dirY += (dir_up - dir_down) + (angY / 100);
ACMAX = 5;
if (dirX > ACMAX) dirX = ACMAX;
if (dirX < -ACMAX) dirX = -ACMAX;
if (dirY > ACMAX) dirY = ACMAX;
if (dirY < -ACMAX) dirY = -ACMAX;
dfX = (holeX - posX);
dfY = (holeY - posY);
d2 = dfX * dfX + dfY * dfY;
d1 = Math.sqrt(d2) + 61;
dfX /= d1;
dfY /= d1;
K = 0.0000077;
dfX /= K * d2;
dfY /= K * d2;
posX += dirX + dfX;
posY += dirY + dfY;
add_points = 1 / d2;
if (add_points > 100) add_points = 100;
points += add_points;
draw_ball();
if (d1 < 100) {
do_gameover();
} else {
interval_handler = setTimeout(animate, 20);
}
}
function stop() {
clearTimeout(interval_handler);
}
function do_gameover() {
stop();
ball.style.display = "none";
gameover.style.display = "block";
}
function restart() {
stop();
start();
}
function tilt(axes) {
if (saveX == null) {
saveX = axes[0];
saveY = axes[1];
}
angX = axes[0] - saveX;
angY = axes[1] - saveY;
}
function keydown_handler(e) {
if (e.keyCode == 65) {
dir_left = 1.0;
}
if (e.keyCode == 68) {
dir_right = 1.0;
}
if (e.keyCode == 83) {
dir_up = 1.0;
}
if (e.keyCode == 87) {
dir_down = 1.0;
}
return true;
}
function keyup_handler(e) {
if (e.keyCode == 65) {
dir_left = 0.0;
}
if (e.keyCode == 68) {
dir_right = 0.0;
}
if (e.keyCode == 83) {
dir_up = 0.0;
}
if (e.keyCode == 87) {
dir_down = 0.0;
}
return true;
}
if (window.DeviceOrientationEvent) {
window.addEventListener('deviceorientation', function(event) {
tilt([event.beta, event.gamma]);
}, true);
} else if (window.DeviceMotionEvent) {
window.addEventListener('devicemotion', function(event) {
tilt([event.acceleration.x * 2, event.acceleration.y * 2]);
}, true);
} else {
window.addEventListener('MozOrientation', function(orientation) {
tilt([orientation.x * 50, orientation.y * 50]);
}, true);
}
document.onkeydown = keydown_handler;
document.onkeyup = keyup_handler;
</script>
</head>
<body onorientationchange = "update()">
<div id="background">
<div id="restart" onclick="restart()">Start
<div id="score">0 points</div>
</div>
<div id="blackhole"></div>
</div>
<div id="ball"></div>
<div id="gameover">Game Over</div>
</body>
</html>