Quick copy-paste summary (core dino.js)
// Minimal core (put into dino.js after including the engine)
const display = new Display();
display.start(480,270);
let s = 0;
let hs = Number(localStorage.getItem('hs')) || 0;
const score = new Component("25px","Cambria Math","red",10,40,"text");
const hst = new Component("20px","Consolas","black",240,40,"text");
display.add(score); display.add(hst);
const dino = new Component(37.5,75,"img/dino.png",0,display.canvas.height-100,"image");
dino.physics = true; dino.gravity = 1;
display.add(dino);
const obt = new Component(75/4,75/2,"img/obt.png",display.canvas.width,display.canvas.height-75/2,"image");
obt.speedX = -1; display.add(obt);
setInterval(()=> s += 1, 1000);
function jump(){
if(dino.y >= display.canvas.height - dino.height){
dino.gravity = -8;
setTimeout(()=> dino.gravity = 1, 180);
}
}
window.addEventListener('keydown', e => { if(e.key === ' ') jump(); });
function update(){
score.text = `Score : ${s}`; hst.text = `Highscore : ${hs}`;
if(dino.y >= display.canvas.height - dino.height){ dino.y = display.canvas.height - dino.height; dino.gravitySpeed = 0; }
if(obt.x <= -obt.width) obt.x = display.canvas.width;
if(dino.crashWith(obt)){ alert('You lose'); s = 0; obt.x = display.canvas.width; }
if(s > hs){ hs = s; localStorage.setItem('hs', hs); }
}