<!DOCTYPE html>
<html>
<head>
<title>Basic Doodle Jump HTML Game</title>
<meta charset="UTF-8">
<style>
html, body {
height: 100%;
margin: 0;
}
body {
display: flex;
align-items: center;
justify-content: center;
}
canvas {
border: 1px solid black;
display: none; /* Hidden by default */
background: linear-gradient(to bottom, #87CEEB, #f0f8ff); /* Sky-like gradient */
}
/* Game Over and Play Screens Style */
#game-over, #play-screen {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(0, 0, 0, 0.8);
color: white;
padding: 20px;
text-align: center;
border-radius: 10px;
}
#game-over {
display: none; /* Hidden by default */
}
</style>
</head>
<body>
<canvas width="375" height="667" id="game"></canvas>
<!-- Play Screen -->
<div id="play-screen">
<h1>Doodle Jump</h1>
<button id="play">Play</button>
</div>
<!-- Game Over Screen -->
<div id="game-over">
<h1>Game Over</h1>
<p>Your score is: <span id="score"></span></p>
<button id="restart">Restart</button>
</div>
<script>
const canvas = document.getElementById('game');
const context = canvas.getContext('2d');
// width and height of each platform and where platforms start
const platformWidth = 65;
const platformHeight = 20;
const platformStart = canvas.height - 50;
// player physics
const gravity = 0.33;
const drag = 0.3;
const bounceVelocity = -12.5;
// minimum and maximum vertical space between each platform
let minPlatformSpace = 15;
let maxPlatformSpace = 20;
// variables to store game state
let platforms = [];
let doodle = {};
let playerDir = 0;
let keydown = false;
let prevDoodleY = 0;
let gameOver = false; // Track game over state
let score = 0; // Initialize score
const gameOverScreen = document.getElementById('game-over');
const playScreen = document.getElementById('play-screen');
const scoreDisplay = document.getElementById('score');
const playButton = document.getElementById('play');
const restartButton = document.getElementById('restart');
// Function to reset the game state
function resetGame() {
// Reset doodle and platforms
platforms = [{
x: canvas.width / 2 - platformWidth / 2,
y: platformStart
}];
doodle = {
width: 40,
height: 60,
x: canvas.width / 2 - 20,
y: platformStart - 60,
dx: 0,
dy: 0
};
// Refill the screen with platforms
let y = platformStart;
while (y > 0) {
y -= platformHeight + random(minPlatformSpace, maxPlatformSpace);
let x = random(25, canvas.width - 25 - platformWidth);
platforms.push({ x, y });
}
// Reset game variables
playerDir = 0;
keydown = false;
prevDoodleY = doodle.y;
gameOver = false;
score = 0;
}
// Get a random number between the min (inclusive) and max (exclusive)
function random(min, max) {
return Math.random() * (max - min) + min;
}
// Game loop
function loop() {
if (!gameOver) {
requestAnimationFrame(loop);
context.clearRect(0, 0, canvas.width, canvas.height);
// Apply gravity to doodle
doodle.dy += gravity;
if (doodle.y < canvas.height / 2 && doodle.dy < 0) {
platforms.forEach(function(platform) {
platform.y += -doodle.dy;
});
while (platforms[platforms.length - 1].y > 0) {
platforms.push({
x: random(25, canvas.width - 25 - platformWidth),
y: platforms[platforms.length - 1].y - (platformHeight + random(minPlatformSpace, maxPlatformSpace))
});
minPlatformSpace += 0.5;
maxPlatformSpace += 0.5;
maxPlatformSpace = Math.min(maxPlatformSpace, canvas.height / 2);
}
} else {
doodle.y += doodle.dy;
}
if (!keydown) {
if (playerDir < 0) {
doodle.dx += drag;
if (doodle.dx > 0) {
doodle.dx = 0;
playerDir = 0;
}
} else if (playerDir > 0) {
doodle.dx -= drag;
if (doodle.dx < 0) {
doodle.dx = 0;
playerDir = 0;
}
}
}
doodle.x += doodle.dx;
if (doodle.x + doodle.width < 0) {
doodle.x = canvas.width;
} else if (doodle.x > canvas.width) {
doodle.x = -doodle.width;
}
context.fillStyle = 'green';
platforms.forEach(function(platform) {
drawPlatform(platform.x, platform.y);
if (
doodle.dy > 0 &&
prevDoodleY + doodle.height <= platform.y &&
doodle.x < platform.x + platformWidth &&
doodle.x + doodle.width > platform.x &&
doodle.y < platform.y + platformHeight &&
doodle.y + doodle.height > platform.y
) {
doodle.y = platform.y - doodle.height;
doodle.dy = bounceVelocity;
}
});
// Draw doodle with gradient
drawDoodle(doodle.x, doodle.y, doodle.width, doodle.height);
prevDoodleY = doodle.y;
// Check for game over condition
if (doodle.y > canvas.height) {
gameOver = true;
scoreDisplay.textContent = score; // Display score
gameOverScreen.style.display = 'block'; // Show game over screen
}
score = Math.floor(doodle.y / 10); // Update score
platforms = platforms.filter(function(platform) {
return platform.y < canvas.height;
});
}
}
// Draw the doodle with a gradient fill
function drawDoodle(x, y, width, height) {
const gradient = context.createLinearGradient(x, y, x, y + height);
gradient.addColorStop(0, 'yellow');
gradient.addColorStop(1, 'orange');
context.fillStyle = gradient;
// Draw the doodle as a simple circle
context.beginPath();
context.arc(x + width / 2, y + height / 2, width / 2, 0, Math.PI * 2);
context.fill();
// Add a simple shadow
context.shadowColor = 'rgba(0,0,0,0.5)';
context.shadowBlur = 15;
context.shadowOffsetX = 3;
context.shadowOffsetY = 3;
}
// Draw platforms with a shadow and round edges
function drawPlatform(x, y) {
context.fillStyle = 'green';
context.shadowColor = 'rgba(0, 0, 0, 0.2)';
context.shadowBlur = 10;
context.shadowOffsetX = 2;
context.shadowOffsetY = 2;
// Draw rounded platforms
context.beginPath();
context.roundRect(x, y, platformWidth, platformHeight, 10); // Rounded corners
context.fill();
}
// Listen to keyboard events to move doodle
document.addEventListener('keydown', function(e) {
if (gameOver) return; // Do nothing if game is over
if (e.which === 37) {
keydown = true;
playerDir = -1;
doodle.dx = -3;
} else if (e.which === 39) {
keydown = true;
playerDir = 1;
doodle.dx = 3;
}
});
document.addEventListener('keyup', function(e) {
keydown = false;
});
// Play button to start the game
playButton.addEventListener('click', function() {
playScreen.style.display = 'none'; // Hide the play screen
canvas.style.display = 'block'; // Show the canvas
resetGame(); // Reset game state
requestAnimationFrame(loop); // Start the game loop
});
// Restart the game
restartButton.addEventListener('click', function() {
gameOverScreen.style.display = 'none'; // Hide game over screen
resetGame(); // Reset the game state
requestAnimationFrame(loop); // Restart the game loop
});
// Add support for roundRect
CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {
if (w < 2 * r) r = w / 2;
if (h < 2 * r) r = h / 2;
this.beginPath();
this.moveTo(x + r, y);
this.arcTo(x + w, y, x + w, y + h, r);
this.arcTo(x + w, y + h, x, y + h, r);
this.arcTo(x, y + h, x, y, r);
this.arcTo(x, y, x + w, y, r);
this.closePath();
return this;
}
</script>
</body>
</html>
Write, Run & Share HTML code online using OneCompiler's HTML online Code editor for free. It's one of the robust, feature-rich online Code editor for HTML language, running on the latest version HTML5. Getting started with the OneCompiler's HTML compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as HTML. You can also specify the stylesheet information in styles.css tab and scripts information in scripts.js tab and start coding.
HTML(Hyper Text Markup language) is the standard markup language for Web pages, was created by Berners-Lee in the year 1991. Almost every web page over internet might be using HTML.
<!DOCTYPE html><html> and ends with </html><h1> to <h6> where <h1> is the highest important heading and <h6> is the least important sub-heading.<p>..</p> tag.<a> tag.
<a href="https://onecompiler.com/html">HTML online compiler</a>
<img> tag, where src attribute consists of image name.<button>..</button> tag<ul> for unordered/bullet list and <ol> for ordered/number list, and the list items are defined in <li>.<a href="https://onecompiler.com/html">HTML online compiler</a>
CSS(cascading style sheets) describes how HTML elements will look on the web page like color, font-style, font-size, background color etc.
Below is a sample style sheet which displays heading in green and in Candara font with padding space of 25px.
body{
padding: 25px;
}
.title {
color: #228B22;
font-family: Candara;
}
<table> tag.<tr> tag<th> tag<td> tag<caption> tag<script> is the tag used to write scripts in HTML<script src="script.js"></script>