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>Rainbow Snake Game 🌈🐍</title>
<meta name="description" content="Play the classic snake game with a colorful rainbow twist!">
<meta name="keywords" content="snake, game, rainbow, colors, HTML5">
<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">
<script type="text/javascript">
var localStoragePrefix = "ct-168306718412555";
var lastSave = 0;
// save to localstorage
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();
}
// 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, blockSize = 20, snake, apple, score, gameInterval, colors;
function init() {
canvas = document.getElementById("snakeCanvas");
ctx = canvas.getContext("2d");
snake = new Snake();
apple = new Apple();
score = 0;
colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
gameInterval = setInterval(updateGame, 200);
}
function startGame() {
init();
document.getElementById("startButton").disabled = true;
}
function Snake() {
this.body = [{ x: 5, y: 5 }];
this.direction = "right";
this.draw = function () {
for (var i = 0; i < this.body.length; i++) {
ctx.fillStyle = colors[i % colors.length];
ctx.fillRect(this.body[i].x * blockSize, this.body[i].y * blockSize, blockSize, blockSize);
}
}
this.update = function () {
var newX = this.body[0].x;
var newY = this.body[0].y;
switch (this.direction) {
case "right":
newX++;
break;
case "left":
newX--;
break;
case "up":
newY--;
break;
case "down":
newY++;
break;
}
this.body.splice(0, 0, { x: newX, y: newY });
if (newX === apple.position.x && newY === apple.position.y) {
score++;
apple.respawn();
updateScore();
} else {
this.body.pop();
}
}
this.checkCollision = function () {
for (var i = 1; i < this.body.length; i++) {
if (this.body[i].x === this.body[0].x && this.body[i].y === this.body[0].y) {
return true;
}
}
return this.body[0].x < 0 || this.body[0].x >= canvas.width / blockSize || this.body[0].y < 0 || this.body[0].y >= canvas.height / blockSize;
}
}
function Apple() {
this.position = { x: 10, y: 10 };
this.draw = function () {
ctx.fillStyle = 'white';
ctx.fillRect(this.position.x * blockSize, this.position.y * blockSize, blockSize, blockSize);
}
this.respawn = function () {
this.position = {
x: Math.floor(Math.random() * (canvas.width / blockSize)),
y: Math.floor(Math.random() * (canvas.height / blockSize))
}
}
}
function updateGame() {
if (snake.checkCollision()) {
clearInterval(gameInterval);
alert("Game Over! Your score: " + score);
document.getElementById("startButton").disabled = false;
} else {
ctx.clearRect(0, 0, canvas.width, canvas.height);
snake.update();
snake.draw();
apple.draw();
}
}
function updateScore() {
document.getElementById("score").innerHTML = "Score: " + score;
}
document.addEventListener('keydown', function (e) {
switch (e.key) {
case "ArrowUp":
if (snake.direction !== "down") {
snake.direction = "up";
}
break;
case "ArrowDown":
if (snake.direction !== "up") {
snake.direction = "down";
}
break;
case "ArrowLeft":
if (snake.direction !== "right") {
snake.direction = "left";
}
break;
case "ArrowRight":
if (snake.direction !== "left") {
snake.direction = "right";
}
break;
}
});
</script>
<style>
/* App CSS Goes Here */
body {
background: linear-gradient(45deg, red, orange, yellow, green, blue, indigo, violet);
background-size: 600% 100%;
animation: rainbowBg 10s linear infinite;
}
#snakeCanvas {
background-color: rgba(0, 0, 0, 0.5);
display: block;
margin: 50px auto;
}
.score-board {
text-align: center;
color: white;
font-size: 24px;
margin-bottom: 10px;
}
.start-button {
display: block;
margin: 10px auto;
}
@keyframes rainbowBg {
0% {background-position: 0% 50%;}
50% {background-position: 100% 50%;}
100% {background-position: 0% 50%;}
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/584/">
<meta charset="utf-8">
</head>
<body>
<div id="main-container" class="container">
<!-- App HTML Goes Here -->
<div class="score-board" id="score">Score: 0</div>
<button class="btn btn-primary start-button" id="startButton" onclick="startGame()">Start Game</button>
<canvas id="snakeCanvas" width="400" height="400"></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>