{"id":60,"date":"2026-02-08T15:35:32","date_gmt":"2026-02-08T15:35:32","guid":{"rendered":"https:\/\/modularmath.org\/?page_id=60"},"modified":"2026-02-08T18:15:53","modified_gmt":"2026-02-08T18:15:53","slug":"games","status":"publish","type":"page","link":"https:\/\/modularmath.org\/?page_id=60","title":{"rendered":"Games"},"content":{"rendered":"\n<div style=\"text-align:center; background:#000; color:white; padding:20px; font-family:sans-serif;\">\n  <h2>Modular Starflower: <code>x \u21a6 k\u00b7x mod n<\/code><\/h2>\n  <input type=\"range\" id=\"slider\" min=\"2\" max=\"200\" value=\"100\" style=\"width: 80%;\">\n  <p style=\"margin:10px 0;\">Modulus <span id=\"modN\">100<\/span> \u00d7 Multiplier 2<\/p>\n  <svg id=\"modStar\" viewBox=\"0 0 600 600\" style=\"width:100%; max-width:600px; height:auto;\"><\/svg>\n<\/div>\n\n<script>\nconst svg = document.getElementById(\"modStar\");\nconst slider = document.getElementById(\"slider\");\nconst modNText = document.getElementById(\"modN\");\nconst width = 600, height = 600, r = 280, cx = width\/2, cy = height\/2;\nconst multiplier = 2;\n\nfunction drawModStar(n) {\n  svg.innerHTML = '';\n  const pts = [];\n\n  for (let i = 0; i < n; i++) {\n    const angle = (2 * Math.PI * i \/ n) - Math.PI \/ 2;\n    const x = cx + r * Math.cos(angle);\n    const y = cy + r * Math.sin(angle);\n    pts.push({x, y});\n  }\n\n  for (let i = 0; i < n; i++) {\n    const a = pts[i];\n    const b = pts[(i * multiplier) % n];\n    const line = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"line\");\n    line.setAttribute(\"x1\", a.x);\n    line.setAttribute(\"y1\", a.y);\n    line.setAttribute(\"x2\", b.x);\n    line.setAttribute(\"y2\", b.y);\n    line.setAttribute(\"stroke\", `hsl(${i * 360 \/ n}, 100%, 60%)`);\n    line.setAttribute(\"stroke-width\", \"1\");\n    svg.appendChild(line);\n  }\n}\n\nslider.addEventListener(\"input\", () => {\n  modNText.textContent = slider.value;\n  drawModStar(parseInt(slider.value));\n});\n\ndrawModStar(parseInt(slider.value));\n<\/script>\n\n\n\n<div style=\"max-width:335px; margin:20px auto; padding:15px; background: radial-gradient(circle at top, #1a1a1a 0%, #000 100%), repeating-linear-gradient(45deg, #0a0a0a 0px, #0a0a0a 5px, #111 5px, #111 10px); border-radius:12px; box-shadow: 0 0 12px #00ffe733; color:#fff; text-align:center; font-family:'Segoe UI', sans-serif;\">\n\n  <h3 style=\"font-size:1.2rem; margin-bottom:10px;\">Modular Clock Race<\/h3>\n  <p style=\"font-size:0.9rem; margin-bottom:10px;\">Spot the glow when clocks resonate.<\/p>\n\n  <canvas id=\"clockCanvas\" width=\"300\" height=\"320\" style=\"background:#111; border:2px solid #333; border-radius:10px; width:100%; height:auto; display:block; margin: 0 auto 10px;\"><\/canvas>\n\n  <label for=\"stepType\" style=\"font-size:0.85rem;\">Step Type:<\/label><br>\n  <select id=\"stepType\" style=\"margin-top:5px; font-size:0.85rem; padding:4px 8px; border-radius:4px;\">\n    <option value=\"add\">+1<\/option>\n    <option value=\"mul\">\u00d72<\/option>\n    <option value=\"square\">x\u00b2<\/option>\n  <\/select>\n<\/div>\n\n<audio id=\"pingSound\" preload=\"auto\">\n  <source src=\"https:\/\/freesound.org\/data\/previews\/341\/341695_5260877-lq.mp3\" type=\"audio\/mpeg\">\n<\/audio>\n\n<script>\nconst canvas = document.getElementById(\"clockCanvas\");\nconst ctx = canvas.getContext(\"2d\");\nconst stepType = document.getElementById(\"stepType\");\nconst ping = document.getElementById(\"pingSound\");\n\nconst moduli = [5, 7, 9];\nconst radius = 40;\nconst centers = [\n  { x: 150, y: 60 },\n  { x: 80, y: 220 },\n  { x: 220, y: 220 }\n];\nconst colors = [\"#00ffe7\", \"#ff66cc\", \"#ffcc00\"];\nlet state = moduli.map(() => 0);\n\nfunction modStep(val, mod, type) {\n  if (type === 'add') return (val + 1) % mod;\n  if (type === 'mul') return (val * 2) % mod;\n  if (type === 'square') return (val * val) % mod;\n  return val;\n}\n\nfunction drawClock(cx, cy, mod, val, strokeColor, glowLevel) {\n  ctx.beginPath();\n  ctx.arc(cx, cy, radius, 0, 2 * Math.PI);\n  ctx.strokeStyle = strokeColor;\n  ctx.lineWidth = 2;\n  ctx.stroke();\n\n  for (let i = 0; i < mod; i++) {\n    const angle = (2 * Math.PI * i \/ mod) - Math.PI \/ 2;\n    const x = cx + radius * Math.cos(angle);\n    const y = cy + radius * Math.sin(angle);\n    ctx.fillStyle = \"#aaa\";\n    ctx.beginPath();\n    ctx.arc(x, y, 3, 0, 2 * Math.PI);\n    ctx.fill();\n  }\n\n  const handAngle = (2 * Math.PI * val \/ mod) - Math.PI \/ 2;\n  const hx = cx + radius * 0.85 * Math.cos(handAngle);\n  const hy = cy + radius * 0.85 * Math.sin(handAngle);\n\n  ctx.strokeStyle = \"#fff\";\n  ctx.lineWidth = 2;\n  ctx.beginPath();\n  ctx.moveTo(cx, cy);\n  ctx.lineTo(hx, hy);\n  ctx.stroke();\n\n  \/\/ \ud83c\udf1f Glow Aura by Resonance Level\n  if (glowLevel > 0) {\n    ctx.beginPath();\n    ctx.arc(cx, cy, radius + 6, 0, 2 * Math.PI);\n    ctx.strokeStyle = glowLevel === 2 ? \"#00ffff\" : \"#ff00aa\";\n    ctx.lineWidth = 2;\n    ctx.shadowColor = glowLevel === 2 ? \"#33ffff\" : \"#ff33aa\";\n    ctx.shadowBlur = 14;\n    ctx.stroke();\n    ctx.shadowBlur = 0;\n  }\n\n  ctx.fillStyle = \"#ccc\";\n  ctx.font = \"10px monospace\";\n  ctx.textAlign = \"center\";\n  ctx.fillText(\"mod \" + mod, cx, cy + radius + 12);\n}\n\nfunction countResonances(values) {\n  const counts = {};\n  values.forEach(v => counts[v] = (counts[v] || 0) + 1);\n  return Math.max(...Object.values(counts));\n}\n\nfunction animate() {\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  const type = stepType.value;\n\n  const current = state.map((val, i) => val % moduli[i]);\n  const maxShared = countResonances(current); \/\/ 1, 2, or 3 equal values\n\n  if (maxShared === 3 && ping) ping.play();\n\n  moduli.forEach((mod, i) => {\n    drawClock(\n      centers[i].x,\n      centers[i].y,\n      mod,\n      state[i],\n      colors[i],\n      current.filter(x => x === current[i]).length >= 2 ? maxShared : 0\n    );\n    state[i] = modStep(state[i], mod, type);\n  });\n}\n\nsetInterval(animate, 1000);\n<\/script>\n\n\n\n<!-- \ud83e\udde0 Modular Math Memory Game (Mobile First) -->\n<section style=\"font-family: 'Segoe UI', sans-serif; background: radial-gradient(circle at center, #111, #000); color: #fff; padding: 40px 10px; text-align: center;\">\n  <h2 style=\"font-size: 2rem; color: #00ffe7; margin-bottom: 20px;\">\ud83e\udde0 Mod Memory<\/h2>\n  <p style=\"color: #ccc; margin-bottom: 30px;\">Match each modular math term with its definition!<\/p>\n\n  <div id=\"game-board\" style=\"display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; max-width: 360px; margin: 0 auto;\"><\/div>\n\n  <p id=\"status\" style=\"margin-top: 20px; font-size: 1.2rem; color: #ffd700;\"><\/p>\n<\/section>\n\n<style>\n  .card {\n    background: linear-gradient(135deg, #1a1a1a, #222);\n    border: 2px solid #00ffe7;\n    color: transparent;\n    padding: 20px;\n    border-radius: 12px;\n    cursor: pointer;\n    font-size: 0.95rem;\n    min-height: 70px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    transition: transform 0.2s ease, background 0.3s ease, color 0.3s ease;\n    box-shadow: 0 0 8px #00ffe744, inset 0 0 4px #00ffe722;\n    user-select: none;\n  }\n\n  .card:hover {\n    transform: scale(1.04);\n  }\n\n  .card.flipped {\n    background: #00ffe7;\n    color: #111;\n    font-weight: bold;\n    box-shadow: 0 0 12px #00ffe7cc;\n  }\n\n  .card.matched {\n    background: #333;\n    border-color: #0f0;\n    color: #0f0;\n    box-shadow: none;\n  }\n<\/style>\n\n<script>\n  const terms = [\n    { term: \"Totient\", def: \"Counts integers coprime to n\" },\n    { term: \"Modulus\", def: \"Defines the loop for mod math\" },\n    { term: \"Residue\", def: \"The remainder after division\" },\n    { term: \"Order\", def: \"Times needed to return to identity\" },\n    { term: \"Class\", def: \"Group with same remainder mod n\" },\n    { term: \"Winding Number\", def: \"How often a path circles a point\" },\n  ];\n\n  const cards = [...terms.map(t => ({ type: 'term', text: t.term })), ...terms.map(t => ({ type: 'def', text: t.def }))].sort(() => Math.random() - 0.5);\n\n  const board = document.getElementById('game-board');\n  const status = document.getElementById('status');\n  let firstCard = null;\n  let secondCard = null;\n  let lock = false;\n  let matched = 0;\n\n  cards.forEach((card, i) => {\n    const div = document.createElement('div');\n    div.className = 'card';\n    div.dataset.index = i;\n    div.dataset.text = card.text;\n    div.dataset.type = card.type;\n    div.innerText = card.text;\n    div.style.color = 'transparent';\n    div.addEventListener('click', () => handleFlip(div));\n    board.appendChild(div);\n  });\n\n  function handleFlip(card) {\n    if (lock || card.classList.contains('matched') || card === firstCard) return;\n\n    card.classList.add('flipped');\n    card.style.color = '#111';\n\n    if (!firstCard) {\n      firstCard = card;\n    } else {\n      secondCard = card;\n      lock = true;\n\n      const match = isMatch(firstCard, secondCard);\n      if (match) {\n        firstCard.classList.add('matched');\n        secondCard.classList.add('matched');\n        matched += 1;\n        status.innerText = `\u2705 Match found! Total: ${matched}`;\n        resetTurn();\n        if (matched === terms.length) {\n          status.innerText = \"\ud83c\udf89 All matched! You\u2019ve mastered modular memory!\";\n        }\n      } else {\n        setTimeout(() => {\n          firstCard.classList.remove('flipped');\n          secondCard.classList.remove('flipped');\n          firstCard.style.color = 'transparent';\n          secondCard.style.color = 'transparent';\n          status.innerText = \"\u274c Try again.\";\n          resetTurn();\n        }, 1000);\n      }\n    }\n  }\n\n  function isMatch(c1, c2) {\n    if (c1.dataset.type === c2.dataset.type) return false;\n    const term = c1.dataset.type === 'term' ? c1.dataset.text : c2.dataset.text;\n    const def = c1.dataset.type === 'def' ? c1.dataset.text : c2.dataset.text;\n    return terms.some(t => t.term === term && t.def === def);\n  }\n\n  function resetTurn() {\n    firstCard = null;\n    secondCard = null;\n    lock = false;\n  }\n<\/script>\n\n\n\n\n<div style=\"font-family: 'Segoe UI', sans-serif; color: #fff; background: #000; padding: 20px; text-align: center;\">\n\n  <!-- \ud83d\udd22 Modular Sudoku -->\n  <section style=\"margin-bottom: 40px;\">\n    <h2 style=\"color: #00ffe7; margin-bottom: 10px;\">\ud83d\udd22 Modular Sudoku<\/h2>\n    <p style=\"margin-top: 0;\">Solve the grid so each row and column contains exactly one of each residue <strong>mod 4<\/strong> (0, 1, 2, 3).<\/p>\n\n    <div id=\"sudoku\" style=\"display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; width: 90vw; max-width: 240px; margin: 0;\"><\/div>\n\n    <button onclick=\"checkSudoku()\" style=\"margin-top: 12px; padding: 8px 12px; background: #00ffe7; border: none; border-radius: 6px; color: #000; font-weight: bold;\">\n      \u2714\ufe0f Check\n    <\/button>\n\n    <p id=\"feedback\" style=\"margin-top: 10px;\"><\/p>\n  <\/section>\n\n  <!-- \ud83c\udfaf Modular Capture Grid -->\n  <section style=\"background: radial-gradient(circle at top, #0ff 0%, #000 100%); padding: 20px; border-radius: 12px; max-width: 380px; margin: 0 auto;\">\n    <h2 style=\"color: #76ff03;\">\ud83c\udfaf Modular Capture Grid<\/h2>\n    <p><strong>Instructions:<\/strong><br>Tap all numbers that leave a remainder of <strong><span id=\"residueValue\"><\/span><\/strong> when divided by <strong><span id=\"modValue\"><\/span><\/strong>.<\/p>\n\n    <div class=\"grid\" id=\"grid\" style=\"display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; margin: 16px auto;\"><\/div>\n\n    <div style=\"font-size: 1rem;\">\n      Captured: <strong id=\"capturedCount\">0<\/strong> \/ <strong id=\"totalTarget\">?<\/strong>\n    <\/div>\n    <p class=\"complete\" id=\"completeMessage\" style=\"margin-top: 10px; font-weight: bold; color: #00ffe7;\"><\/p>\n  <\/section>\n\n  <style>\n    input[type=\"text\"] {\n      width: 48px;\n      height: 48px;\n      text-align: center;\n      font-size: 1.2rem;\n      border-radius: 6px;\n      border: 2px solid #00ffe7;\n      background: #111;\n      color: #fff;\n    }\n    .tile {\n      background: #222;\n      border-radius: 8px;\n      padding: 14px 0;\n      font-size: 1.1rem;\n      font-weight: bold;\n      cursor: pointer;\n      transition: all 0.3s ease;\n      color: #fff;\n    }\n    .tile:hover {\n      background: #00ffe7;\n      color: #000;\n    }\n    .captured {\n      background: #76ff03 !important;\n      color: #000 !important;\n      box-shadow: 0 0 8px #76ff03;\n    }\n    .wrong {\n      background: #ff0040 !important;\n      color: #fff !important;\n      animation: shake 0.2s 2;\n    }\n    @keyframes shake {\n      0% { transform: translateX(0); }\n      25% { transform: translateX(-4px); }\n      50% { transform: translateX(4px); }\n      75% { transform: translateX(-2px); }\n      100% { transform: translateX(0); }\n    }\n  <\/style>\n\n  <script>\n    \/\/ \ud83c\udfaf Modular Capture Grid Logic\n    const mod = 4;\n    document.getElementById(\"modValue\").textContent = mod;\n\n    const numberSet = new Set();\n    while (numberSet.size < 30) {\n      numberSet.add(Math.floor(Math.random() * 61));\n    }\n    const numbers = [...numberSet];\n\n    const grid = document.getElementById(\"grid\");\n    const capturedCount = document.getElementById(\"capturedCount\");\n    const residueValue = document.getElementById(\"residueValue\");\n    const totalTarget = document.getElementById(\"totalTarget\");\n    const completeMessage = document.getElementById(\"completeMessage\");\n\n    const targetResidue = numbers[0] % mod;\n    residueValue.textContent = targetResidue;\n\n    const totalCorrect = numbers.filter(n => n % mod === targetResidue).length;\n    totalTarget.textContent = totalCorrect;\n\n    let count = 0;\n\n    numbers.forEach(num => {\n      const tile = document.createElement(\"div\");\n      tile.className = \"tile\";\n      tile.textContent = num;\n\n      tile.onclick = () => {\n        if (tile.classList.contains(\"captured\") || tile.classList.contains(\"wrong\")) return;\n\n        if (num % mod === targetResidue) {\n          tile.classList.add(\"captured\");\n          count++;\n          capturedCount.textContent = count;\n          if (count === totalCorrect) {\n            completeMessage.textContent = \"\ud83c\udf89 You captured them all! Great job!\";\n          }\n        } else {\n          tile.classList.add(\"wrong\");\n          setTimeout(() => tile.classList.remove(\"wrong\"), 600);\n        }\n      };\n\n      grid.appendChild(tile);\n    });\n\n    \/\/ \ud83d\udd22 Modular Sudoku Logic\n    const sudoku = document.getElementById('sudoku');\n    const feedback = document.getElementById('feedback');\n    const size = 4;\n\n    function createSudokuGrid() {\n      sudoku.innerHTML = '';\n      for (let i = 0; i < size * size; i++) {\n        const cell = document.createElement('input');\n        cell.type = 'text';\n        cell.inputMode = 'numeric';\n        cell.maxLength = 1;\n        cell.pattern = '[0-3]';\n        sudoku.appendChild(cell);\n      }\n    }\n\n    function checkSudoku() {\n      const cells = sudoku.querySelectorAll('input');\n      const values = Array.from(cells).map(cell => parseInt(cell.value));\n      let valid = true;\n\n      for (let r = 0; r < size; r++) {\n        const row = values.slice(r * size, (r + 1) * size);\n        const set = new Set(row);\n        if (set.size !== size || row.some(v => isNaN(v) || v < 0 || v >= mod)) {\n          valid = false;\n          break;\n        }\n      }\n\n      for (let c = 0; c < size; c++) {\n        const col = Array(size).fill(0).map((_, r) => values[r * size + c]);\n        const set = new Set(col);\n        if (set.size !== size || col.some(v => isNaN(v) || v < 0 || v >= mod)) {\n          valid = false;\n          break;\n        }\n      }\n\n      feedback.textContent = valid\n        ? '\ud83c\udf89 Correct! Each row and column is a full mod 4 set.'\n        : '\u274c Try again! Use only 0\u20133 and no repeats in any row or column.';\n    }\n\n    createSudokuGrid();\n  <\/script>\n<\/div>\n\n\n\n<ul class=\"wp-block-page-list\"><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=137\">Euclidean Algorithm<\/a><\/li><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=60\">Games<\/a><\/li><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=8\">Modular Math<\/a><\/li><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=12\">Residue Fields<\/a><\/li><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=149\">Solving the Resonance Riddle: Number Particles Puzzle<\/a><\/li><li class=\"wp-block-pages-list__item\"><a class=\"wp-block-pages-list__item__link\" href=\"https:\/\/modularmath.org\/?page_id=25\">Visualizations<\/a><\/li><\/ul>","protected":false},"excerpt":{"rendered":"<p>Play with Numbers. Learn by Doing.<br \/>\nExplore modular arithmetic through fun, intuitive games that build number sense and deepen understanding\u2014without ever feeling like a quiz. From Sudoku to Capture Grids, these interactive puzzles make math playful and visual.<\/p>\n","protected":false},"author":1,"featured_media":77,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-60","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Games - ModularMath<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/modularmath.org\/?page_id=60\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Games - ModularMath\" \/>\n<meta property=\"og:description\" content=\"Play with Numbers. Learn by Doing. Explore modular arithmetic through fun, intuitive games that build number sense and deepen understanding\u2014without ever feeling like a quiz. From Sudoku to Capture Grids, these interactive puzzles make math playful and visual.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/modularmath.org\/?page_id=60\" \/>\n<meta property=\"og:site_name\" content=\"ModularMath\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-08T18:15:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/modularmath.org\/wp-content\/uploads\/2026\/02\/130db87e-7a0e-4095-a09e-74b157779b36-1024x682.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"682\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60\",\"url\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60\",\"name\":\"Games - ModularMath\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/modularmath.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/modularmath.org\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/130db87e-7a0e-4095-a09e-74b157779b36.png\",\"datePublished\":\"2026-02-08T15:35:32+00:00\",\"dateModified\":\"2026-02-08T18:15:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/modularmath.org\\\/?page_id=60\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60#primaryimage\",\"url\":\"https:\\\/\\\/modularmath.org\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/130db87e-7a0e-4095-a09e-74b157779b36.png\",\"contentUrl\":\"https:\\\/\\\/modularmath.org\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/130db87e-7a0e-4095-a09e-74b157779b36.png\",\"width\":1400,\"height\":933},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/modularmath.org\\\/?page_id=60#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/modularmath.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Games\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/modularmath.org\\\/#website\",\"url\":\"https:\\\/\\\/modularmath.org\\\/\",\"name\":\"ModularMath\",\"description\":\"Where Numbers Spiral into Meaning.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/modularmath.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Games - ModularMath","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/modularmath.org\/?page_id=60","og_locale":"en_US","og_type":"article","og_title":"Games - ModularMath","og_description":"Play with Numbers. Learn by Doing. Explore modular arithmetic through fun, intuitive games that build number sense and deepen understanding\u2014without ever feeling like a quiz. From Sudoku to Capture Grids, these interactive puzzles make math playful and visual.","og_url":"https:\/\/modularmath.org\/?page_id=60","og_site_name":"ModularMath","article_modified_time":"2026-02-08T18:15:53+00:00","og_image":[{"width":1024,"height":682,"url":"https:\/\/modularmath.org\/wp-content\/uploads\/2026\/02\/130db87e-7a0e-4095-a09e-74b157779b36-1024x682.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/modularmath.org\/?page_id=60","url":"https:\/\/modularmath.org\/?page_id=60","name":"Games - ModularMath","isPartOf":{"@id":"https:\/\/modularmath.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/modularmath.org\/?page_id=60#primaryimage"},"image":{"@id":"https:\/\/modularmath.org\/?page_id=60#primaryimage"},"thumbnailUrl":"https:\/\/modularmath.org\/wp-content\/uploads\/2026\/02\/130db87e-7a0e-4095-a09e-74b157779b36.png","datePublished":"2026-02-08T15:35:32+00:00","dateModified":"2026-02-08T18:15:53+00:00","breadcrumb":{"@id":"https:\/\/modularmath.org\/?page_id=60#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/modularmath.org\/?page_id=60"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/modularmath.org\/?page_id=60#primaryimage","url":"https:\/\/modularmath.org\/wp-content\/uploads\/2026\/02\/130db87e-7a0e-4095-a09e-74b157779b36.png","contentUrl":"https:\/\/modularmath.org\/wp-content\/uploads\/2026\/02\/130db87e-7a0e-4095-a09e-74b157779b36.png","width":1400,"height":933},{"@type":"BreadcrumbList","@id":"https:\/\/modularmath.org\/?page_id=60#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/modularmath.org\/"},{"@type":"ListItem","position":2,"name":"Games"}]},{"@type":"WebSite","@id":"https:\/\/modularmath.org\/#website","url":"https:\/\/modularmath.org\/","name":"ModularMath","description":"Where Numbers Spiral into Meaning.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/modularmath.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/pages\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/modularmath.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=60"}],"version-history":[{"count":6,"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/pages\/60\/revisions"}],"predecessor-version":[{"id":109,"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/pages\/60\/revisions\/109"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/modularmath.org\/index.php?rest_route=\/wp\/v2\/media\/77"}],"wp:attachment":[{"href":"https:\/\/modularmath.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}