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>Second Grade Digraph Sort Game</title>
<meta name="description" content="A fun and interactive digraph sort game for second grade students.">
<meta name="keywords" content="digraph, sort game, second grade, education, learning">
<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-168127473049452";
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
$(document).ready(function () {
initGame();
});
function initGame() {
var digraphs = ['sh', 'ch', 'th', 'wh'];
var words = ['ship', 'chat', 'thumb', 'when', 'shark', 'chase', 'thin', 'whale', 'sheep', 'chair', 'them', 'wheel'];
var selectedWords = [];
// Shuffle array
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
words = shuffle(words);
for (var i = 0; i < 4; i++) {
$("#word-container").append('<div class="col-md-3 word" data-digraph="' + digraphs[i] + '">' + words[i] + '</div>');
}
$(".word").draggable({ revert: "invalid" });
$(".digraph-container").droppable({
accept: ".word",
drop: function (event, ui) {
var droppedWord = ui.draggable;
var digraph = $(this).data('digraph');
if (droppedWord.data('digraph') === digraph) {
droppedWord.appendTo(this).css({ position: 'relative', top: 0, left: 0 });
droppedWord.draggable('disable');
selectedWords.push(droppedWord.text());
checkComplete();
} else {
droppedWord.animate({ top: 0, left: 0 }, 500);
}
}
});
function checkComplete() {
if (selectedWords.length === 4) {
$("#message").html("🎉 Great job! You sorted all the words correctly! 🎉");
setTimeout(function () {
initGame();
}, 3000);
}
}
}
</script>
<style>
/* App CSS Goes Here */
body {
background: linear-gradient(45deg, #FFC312, #EE5A24, #00A6FB, #9980FA);
background-size: 400% 400%;
animation: gradient 15s ease infinite;
font-family: 'Comic Neue', sans-serif;
}
@keyframes gradient {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.container {
text-align: center;
color: white;
}
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
}
.word {
background-color: white;
color: black;
padding: 10px;
margin: 5px;
border-radius: 5px;
cursor: move;
}
.digraph-container {
background-color: rgba(255, 255, 255, 0.2);
padding: 20px;
min-height: 100px;
border-radius: 10px;
margin-bottom: 1rem;
}
#message {
font-size: 1.5rem;
margin-top: 1rem;
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/309/">
<meta charset="utf-8">
</head>
<body>
<div id="main-container" class="container">
<!-- App HTML Goes Here -->
<h1>🔤 Second Grade Digraph Sort Game 🔤</h1>
<div class="row" id="word-container"></div>
<div class="row">
<div class="col-md-3 digraph-container" data-digraph="sh">
<h2>sh</h2>
</div>
<div class="col-md-3 digraph-container" data-digraph="ch">
<h2>ch</h2>
</div>
<div class="col-md-3 digraph-container" data-digraph="th">
<h2>th</h2>
</div>
<div class="col-md-3 digraph-container" data-digraph="wh">
<h2>wh</h2>
</div>
</div>
<div id="message"></div>
</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>