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>Grid-Based World Adventure</title>
<meta name="description" content="A small grid-based world adventure where the player moves around using arrow keys.">
<meta name="keywords" content="grid, world, adventure, game, arrow keys">
<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-168144609916302";
var lastSave = 0;
// save to localstorage
function saveLocal(data) {
if (Date.now() - lastSave < 1000) {
return;
}
// save to cookie
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();
}
// load from localstorage
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">
// App Javascript Goes Here
var canvas, ctx, tileSize, playerX, playerY, playerImg, tRexX, tRexY, tRexEmoji, carEmoji, cars, money, timer, intervalId, highScore;
function init() {
canvas = document.getElementById("gameCanvas");
ctx = canvas.getContext("2d");
tileSize = 50;
playerX = 2;
playerY = 2;
tRexX = 7;
tRexY = 7;
money = 0;
timer = 120;
cars = [];
tRexEmoji = "🦖";
carEmoji = "🚗";
playerImg = new Image();
playerImg.src = "https://www.nicepng.com/png/full/145-1455269_nick-head-cutout-i-nicolas-cage.png";
var loadedData = loadLocal();
if (loadedData && loadedData.highScore) {
highScore = loadedData.highScore;
} else {
highScore = 0;
}
document.getElementById("highScore").innerText = highScore;
window.addEventListener("keydown", function(e) {
e.preventDefault();
switch (e.key) {
case "ArrowUp": movePlayer(0, -1); break;
case "ArrowDown": movePlayer(0, 1); break;
case "ArrowLeft": movePlayer(-1, 0); break;
case "ArrowRight": movePlayer(1, 0); break;
}
});
intervalId = setInterval(function() {
updateWorld();
}, 1000);
}
function updateWorld() {
timer--;
document.getElementById("timer").innerText = timer;
if (timer <= 0) {
resetGame();
}
moveTrex();
if (playerX === tRexX && playerY === tRexY) {
resetGame();
}
drawWorld();
}
function resetGame() {
if (money > highScore) {
highScore = money;
document.getElementById("highScore").innerText = highScore;
saveLocal({ highScore: highScore });
}
clearInterval(intervalId);
playerX = 2;
playerY = 2;
tRexX = 7;
tRexY = 7;
money = 0;
document.getElementById("money").innerText = money;
timer = 120;
cars = [];
intervalId = setInterval(function() {
updateWorld();
}, 1000);
}
function drawWorld() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "#8ED6FF";
ctx.fillRect(0, 0, canvas.width, canvas.height);
drawGrid();
drawPlayer();
drawTrex();
drawCars();
}
function drawGrid() {
ctx.strokeStyle = "#000";
ctx.lineWidth = 1;
for (var x = 0; x <= canvas.width; x += tileSize) {
ctx.beginPath();
ctx.moveTo(x, 0);
ctx.lineTo(x, canvas.height);
ctx.stroke();
}
for (var y = 0; y <= canvas.height; y += tileSize) {
ctx.beginPath();
ctx.moveTo(0, y);
ctx.lineTo(canvas.width, y);
ctx.stroke();
}
}
function drawPlayer() {
ctx.drawImage(playerImg, playerX * tileSize, playerY * tileSize, tileSize, tileSize);
}
function drawTrex() {
ctx.font = tileSize + "px Arial";
ctx.fillText(tRexEmoji, tRexX * tileSize, (tRexY + 1) * tileSize);
}
function drawCars() {
for (var i = 0; i < cars.length; i++) {
ctx.font = tileSize + "px Arial";
ctx.fillText(carEmoji, cars[i].x * tileSize, (cars[i].y + 1) * tileSize);
}
}
function movePlayer(dx, dy) {
playerX += dx;
playerY += dy;
if (playerX < 0) playerX = 0;
if (playerY < 0) playerY = 0;
if (playerX >= 10) playerX = 9;
if (playerY >= 10) playerY = 9;
checkCarPickup();
spawnCar();
drawWorld();
}
function moveTrex() {
if (tRexX < playerX) tRexX++;
if (tRexX > playerX) tRexX--;
if (tRexY < playerY) tRexY++;
if (tRexY > playerY) tRexY--;
}
function spawnCar() {
if (Math.random() < 0.1) {
var carX = Math.floor(Math.random() * 10);
var carY = Math.floor(Math.random() * 10);
cars.push({x: carX, y: carY});
}
}
function checkCarPickup() {
for (var i = 0; i < cars.length; i++) {
if (cars[i].x == playerX && cars[i].y == playerY) {
cars.splice(i, 1);
i--;
money += 1000;
document.getElementById("money").innerText = money;
}
}
}
</script>
<style>
/* App CSS Goes Here */
body {
font-family: 'Roboto', sans-serif;
background-color: #f8f9fa;
}
#gameCanvas {
border: 2px solid #333;
}
#main-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
flex-direction: column;
}
#info {
display: flex;
justify-content: space-between;
width: 500px;
margin-bottom: 20px;
}
#timer, #money, #highScore {
font-size: 24px;
font-weight: bold;
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/397/">
<meta charset="utf-8">
</head>
<body onload="init()">
<div id="main-container" class="container">
<!-- App HTML Goes Here -->
<div id="info">
<div id="timer">120</div>
<div id="money">0 💰</div>
<div id="highScore">0 🏆</div>
</div>
<canvas id="gameCanvas" width="500" height="500"></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>