// Get the canvas and context
const canvas = document.getElementById('game');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.style.backgroundColor = '#f0f0f0';
const ctx = canvas.getContext('2d');
(function(){
// Define game colors
const COLORS = {
player: '#2d2d2d',
particles: '#2d2d2d',
objects: '#2d2d2d',
terrain: '#2d2d2d'
};
// Define game physics
const physics = {
gravity: 1,
jumpForce: 0.5
};
// Define player properties
const player = {
x: 200,
y: 0,
vx: 0,
vy: 10,
vm: 32,
jumpForce: physics.gravity + physics.jumpForce,
onGround: false,
width: 20,
height: 20,
distanceTraveled: 0
};
// Define terrain properties
const terrain = {
start: { x: 0, y: canvas.height - 40 },
end: { x: canvas.width, y: canvas.height },
height: 8
};
// Define game objects
const objects = [];
// Update game state
function update() {
// Update player
player.x += player.vx;
player.y += player.vy;
// Check collision with terrain
if (player.y + player.height >= terrain.start.y) {
player.y = terrain.start.y - player.height;
player.vy = 0;
player.onGround = true;
} else {
player.onGround = false;
}
// Update objects
for (let object of objects) {
object.y += physics.gravity;
}
}
// Render game state
function draw() {
// Clear canvas
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Draw player
ctx.fillStyle = COLORS.player;
ctx.fillRect(player.x, player.y, player.width, player.height);
// Draw terrain
ctx.fillStyle = COLORS.terrain;
ctx.fillRect(terrain.start.x, terrain.start.y, terrain.end.x - terrain.start.x, terrain.height);
// Draw objects
for (let object of objects) {
ctx.fillStyle = COLORS.objects;
ctx.fillRect(object.x, object.y, object.width, object.height);
}
}
// Handle keydown event
document.addEventListener('keydown', function(event) {
if (event.code === 'Space' || event.code === 'ArrowUp') {
if (player.onGround) {
player.vy = -player.jumpForce;
player.onGround = false;
}
}
});
// Game loop
function gameLoop() {
update();
draw();
// Request next frame
requestAnimationFrame(gameLoop);
}
// Start game loop
gameLoop();
})();