Skip to content

DCM-HK/sumar

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sumář

Sumář je webová hra zaměřená na sčítání a kombinatoriku pro Diecézko 2025. Hráči musí správně označovat buňky herního pole tak, aby součet v řádcích a sloupcích odpovídal zadaným číslům. Hra je inspirovaná horu sumate.

screenshot hry

Scripts

Python skript, který generuje herní levely. Funguje jednoduše. Vytvoří pole s náhodnými čísly (board) a druhé pole (mask) o stejné velikosti s náhodnými binárními čísly, tedy 0 a 1. Herní plocha je následně generovaná vynásobením board a mask pro daný index. Hodnoty jsou následně sečteny a uloženy do sumy na řádku a sloupci.

Výsledky se ukládají jako json v s následující strukturou

[{
   "size": [5, 5],
   "board": [
      [5, 0, 7, 2, 1], 
      [4, 7, 9, 4, 0], 
      [6, 3, 0, 4, 4], 
      [8, 4, 7, 4, 1], 
      [8, 2, 5, 6, 6]
   ],
   "row": [9, 16, 4, 8, 22],
   "col": [16, 9, 16, 12, 6],
   "level": 0
}]

API

V rámci hry se je možné zapsat do síně slávy a vyhrát na diecézku nějakou cenu. Z toho důvodu existuje jednoduchý API server. Dříve jsem využíval proxy, vytvořenou pomocí Cloudflare Functions a data ukládal do KV ve free tarifu. To ale v současném stavu není možné, resp. mohl bych velice brzy narazit na limity free tarifu. Proto jsem se rozhodl přemigrovat tuto funkcionalitu na Raspberry PI a rozeběhnout zde jednoduché REST API v Pythonu.

Projekt by měl umožňovat tyto volání:

  • HTTP GET request pro získání všech data ve formě JSON
    [
     {
        "name": "string",
        "score": number,
        "level": number
     }, {
        ...
     }
    ]
  • HTTP POST request pro odeslání dat o dosaženém skóre ve formátu JSON
    {
     "name": "string",
     "secret": "string",
     "level": number,
     "score": number
    }
  • HTTP POST request pro založení nového uživatele ve formátu JSON
    {
     "name": "string",
     "secret": "string"
    }
    s odpovědí, zdali je jméno volné, popř. v případě shody jmen, zdali se shodují tajná slova
    • slova se shodují ale tajné slovo je jiné; odpověď: "Jméno je již obsazené, buďto zadej správné tajné slovo nebo si zvol jiné jméno"
    • úspěšné zapsání; odpověď: "Tvé jméno bylo vytesané do síně slávy. Při každém úspěchu se nyní zapíšeš mezi hrdinné sumáře."

Server používá CORS policy pro kontrolu, že data mohou proudit pouze z https://sumar.diecezko.cz

Data nejsou ukládána do žádné databáze, pouze do jednoduché JSON struktury:

[
   {
      "name": "string",
      "secret": "string",
      "level": number,
      "score": number
   }, {
      "name": "string",
      "secret": "string",
      "level": number,
      "score": number
   }, {
      ...
   }
]

Server běží v Dockeru, aby ho bylo jednoduché spustit kdekoliv.

Tunel mezi Raspbbery PI je tvořen pomocí Cloudflare Tunnels.

# Create file for data
echo "[]" > "api/data.json"


# Build and run
docker-compose up --build -d

# Build and run unless stopped
docker-compose up --build -d && docker update --restart unless-stopped sumar_api

# Run shell in running docker container
docker exec -it <container_id_or_name> /bin/sh

Front End

Note

Popis níže je generovaný pomocí chatGPT

🚀 Jak spustit hru

  1. Otevřete soubor sin-slavy.html v prohlížeči.
  2. Hra se automaticky načte a můžete začít hrát.

🎮 Herní princip

  • Hráč označuje buňky tak, aby splnil podmínky součtů v řádcích a sloupcích.
  • Po splnění všech podmínek je hráč odměněn a postupuje na další úroveň.
  • Hra si ukládá pokrok pomocí localStorage, takže se můžete vrátit k rozehranému stavu.

🏆 Síň slávy

Hráči mohou své výsledky odeslat do síně slávy. Nejlepší hráči budou vyhlášeni během akce Diecézko 2025 v Královéhradecké diecézi. Síň slávy se načítá dynamicky z API (https://api-sumar.diecezko.cz).

📌 Ovládání

  • Kliknutím na buňku měníte její stav (aktivní/neaktivní).
  • Po dokončení úrovně hra automaticky přechází na další level.
  • V pravém horním rohu lze resetovat hru nebo úroveň.

🎨 Design a inspirace

  • Design je jednoduchý, přizpůsobený pro mobilní zařízení.
  • Hra je inspirována konceptem Sumplete.
  • Autor hry: Petr Kučera.

About

Simple sum game for diecezko.cz

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 46.5%
  • CSS 18.2%
  • HTML 17.6%
  • Python 17.4%
  • Dockerfile 0.3%