Javascript, HTML, CSS Code
Copy
<html>
<head>
<script type="text/javascript"> window.addEventListener('error', function(event) { var message = JSON.parse(JSON.stringify(event.message)); var source = event.filename; var lineno = event.lineno; var colno = event.colno; var error = event.error; window.parent.postMessage({ type: 'iframeError', details: { message: message, source: source, lineno: lineno, colno: colno, error: error ? error.stack : '' } }, '*'); }); window.addEventListener('unhandledrejection', function(event) { window.parent.postMessage({ type: 'iframePromiseRejection', details: { reason: event.reason } }, '*'); }); </script>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Cup and Ball Game 🎉</title>
<meta name="description" content="A fun version of the classic cup and ball game using HTML canvas. Playable on both desktop with a mouse and on mobile with touch.">
<meta name="keywords" content="Cup and ball game, HTML canvas, desktop, mobile, touch, mouse, fun">
<link href="https://fonts.googleapis.com/css?family=Pacifico|Lobster" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- Built-In Functions for Apps -->
<script type="text/javascript">
var localStoragePrefix = "ct-168119096974895";
var lastSave = 0;
function saveLocal(data) {
if (Date.now() - lastSave < 1000) {
return;
}
let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict";
cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString();
document.cookie = cookie;
lastSave = Date.now();
}
function loadLocal() {
var cookiePrefix = localStoragePrefix + "=";
var cookieStart = document.cookie.indexOf(cookiePrefix);
if (cookieStart > -1) {
let cookieEnd = document.cookie.indexOf(";", cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd);
return JSON.parse(cookieData);
}
}
</script>
<script type="text/javascript">
let canvas, ctx;
let cup, ball;
let isDragging = false;
let gameStarted = false;
function init() {
canvas = document.getElementById('gameCanvas');
ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
cup = {
x: canvas.width / 2 - 50,
y: canvas.height - 150,
width: 100,
height: 100
};
ball = {
x: canvas.width / 2,
y: canvas.height - 200,
radius: 20
};
canvas.addEventListener('mousedown', startDrag);
canvas.addEventListener('mousemove', drag);
canvas.addEventListener('mouseup', endDrag);
canvas.addEventListener('touchstart', startTouchDrag);
canvas.addEventListener('touchmove', touchDrag);
canvas.addEventListener('touchend', endTouchDrag);
draw();
}
function startDrag(e) {
if (checkCollision(e.clientX, e.clientY)) {
isDragging = true;
}
}
function drag(e) {
if (isDragging) {
cup.x = e.clientX - cup.width / 2;
cup.y = e.clientY - cup.height / 2;
draw();
}
}
function endDrag() {
isDragging = false;
}
function startTouchDrag(e) {
const touch = e.touches[0];
if (checkCollision(touch.clientX, touch.clientY)) {
isDragging = true;
}
e.preventDefault();
}
function touchDrag(e) {
const touch = e.touches[0];
if (isDragging) {
cup.x = touch.clientX - cup.width / 2;
cup.y = touch.clientY - cup.height / 2;
draw();
}
}
function endTouchDrag() {
isDragging = false;
}
function checkCollision(x, y) {
return x > cup.x && x < cup.x + cup.width && y > cup.y && y < cup.y + cup.height;
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Draw cup
ctx.fillStyle = 'orange';
ctx.fillRect(cup.x, cup.y, cup.width, cup.height);
// Draw ball
ctx.fillStyle = 'blue';
ctx.beginPath();
ctx.arc(ball.x, ball.y, ball.radius, 0, 2 * Math.PI);
ctx.fill();
// Draw text
ctx.fillStyle = '#000';
ctx.font = '24px Pacifico, cursive';
ctx.fillText('🎉 Cup and Ball Game 🎉', 10, 30);
}
window.addEventListener('load', init);
</script>
<style>
body {
margin: 0;
font-family: 'Lobster', cursive;
background: linear-gradient(120deg, #f6d365 0%, #fda085 100%);
overflow: hidden;
}
#gameCanvas {
display: block;
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/224/">
<meta charset="utf-8">
</head>
<body>
<div id="main-container" class="container">
<canvas id="gameCanvas"></canvas>
</div>
<script type="text/javascript"> var localStoragePrefix = "ct-{{ cachebreaker }}"; var lastSave = 0; function saveLocal(data) { if (Date.now() - lastSave < 1000) { return; } let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict"; cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString(); document.cookie = cookie; lastSave = Date.now(); } function loadLocal() { var cookiePrefix = localStoragePrefix + "="; var cookieStart = document.cookie.indexOf(cookiePrefix); if (cookieStart > -1) { let cookieEnd = document.cookie.indexOf(";", cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd); return JSON.parse(cookieData); } } </script>
<script type="text/javascript"> window.addEventListener('load', function() { var observer = new MutationObserver(function() { window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); observer.observe(document.body, {attributes: true, childList: true, subtree: true}); window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); </script>
</body>
</html>