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); } }