From 7aae302911d608ddf59965e5127e0fe1c959a916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Re=C5=88ak?= Date: Fri, 24 Apr 2026 14:58:15 +0200 Subject: [PATCH] update --- config/levels.js | 334 ++++++++++++++++++++++---------------------- config/worlds.js | 4 +- css/pexeso.css | 128 +++++------------ game.html | 2 +- index.html | 78 +++++++---- js/basics/menu.js | 48 +++++-- js/game.js | 69 +++++---- js/pexeso/pexeso.js | 59 ++++++-- 8 files changed, 373 insertions(+), 349 deletions(-) diff --git a/config/levels.js b/config/levels.js index 951126f..d5ab565 100644 --- a/config/levels.js +++ b/config/levels.js @@ -528,15 +528,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -687,25 +687,25 @@ const LEVELS_CONFIG = { name: 'Prvé L-čka', gameType: 'banik', difficulty: 1, - words: ['lano', 'lopta', 'list', 'les'], // 4 slová pre začiatok + words: ['lano', 'lopta', 'list', 'les'], gameConfig: { - diamonds: 1, // málo diamantov pre začiatok - golds: 2, // trochu viac goldov - crystals: 1, // jeden kryštál + diamonds: 1, + golds: 2, + crystals: 1, speechExercises: 1, listeningExercises: 1, mapSize: { width: 16, height: 10 } }, positions: { diamonds: [ - { x: 8, y: 5 } // diamant v strede mapy + { x: 8, y: 5 } ], golds: [ - { x: 3, y: 2 }, // gold vľavo hore - { x: 13, y: 8 } // gold vpravo dole + { x: 3, y: 2 }, + { x: 13, y: 8 } ], crystals: [ - { x: 10, y: 4 } // kryštál vpravo + { x: 10, y: 4 } ], player: { x: 1, y: 1 } }, @@ -721,7 +721,7 @@ const LEVELS_CONFIG = { name: 'Ľahké L-čka', gameType: 'banik', difficulty: 1, - words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica'], // 6 slov + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica'], gameConfig: { diamonds: 2, golds: 3, @@ -758,7 +758,7 @@ const LEVELS_CONFIG = { name: 'Lavička a lúka', gameType: 'banik', difficulty: 1, - words: ['lopta', 'list', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia'], // 7 slov + words: ['lopta', 'list', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia'], gameConfig: { diamonds: 3, golds: 3, @@ -797,7 +797,7 @@ const LEVELS_CONFIG = { name: 'Lampa a lekár', gameType: 'banik', difficulty: 1, - words: ['lopta', 'lúka', 'lavička', 'lyžica', 'ľalia', 'lampa', 'lekár'], // 8 slov + words: ['lopta', 'lúka', 'lavička', 'lyžica', 'ľalia', 'lampa', 'lekár'], gameConfig: { diamonds: 3, golds: 4, @@ -834,10 +834,10 @@ const LEVELS_CONFIG = { id: 'l_005', worldId: 'world_l', levelNumber: 5, - name: 'Prvé opakovanie', // opakovací level + name: 'Prvé opakovanie', gameType: 'banik', difficulty: 2, - words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 'lekár'], // 12 slov - opakovanie + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 'lekár'], gameConfig: { diamonds: 4, golds: 5, @@ -879,7 +879,7 @@ const LEVELS_CONFIG = { name: 'Lavína a lietadlo', gameType: 'banik', difficulty: 2, - words: ['lopta', 'lúka', 'lampa', 'lekár', 'líška', 'lavína', 'lietadlo', 'list', 'lev', 'lavička'], // 10 slov + words: ['lopta', 'lúka', 'lampa', 'lekár', 'líška', 'lavína', 'lietadlo', 'list', 'lev', 'lavička'], gameConfig: { diamonds: 4, golds: 4, @@ -921,7 +921,7 @@ const LEVELS_CONFIG = { name: 'Leňochod a lízatko', gameType: 'banik', difficulty: 2, - words: ['lopta', 'lúka', 'lavína', 'lietadlo', 'lev', 'lavička', 'leňochod', 'lupa', 'lúč', 'lízatko'], // 10 slov + words: ['lopta', 'lúka', 'lavína', 'lietadlo', 'lev', 'lavička', 'leňochod', 'lupa', 'lúč', 'lízatko'], gameConfig: { diamonds: 4, golds: 5, @@ -963,7 +963,7 @@ const LEVELS_CONFIG = { name: 'Lyže a letisko', gameType: 'banik', difficulty: 2, - words: ['lopta', 'lietadlo', 'lupa', 'lúč', 'lízatko', 'lavína', 'lyže', 'pílka', 'letisko', 'pílka'], // 10 slov + words: ['lopta', 'lietadlo', 'lupa', 'lúč', 'lízatko', 'lavína', 'lyže', 'pílka', 'letisko', 'pílka'], gameConfig: { diamonds: 5, golds: 4, @@ -1006,7 +1006,7 @@ const LEVELS_CONFIG = { name: 'Levanduľa a ľudina', gameType: 'banik', difficulty: 2, - words: ['lopta', 'lúka', 'lietadlo', 'pílka', 'levanduľa', 'list', 'lavína', 'lízatko'], // 10 slov + words: ['lopta', 'lúka', 'lietadlo', 'pílka', 'levanduľa', 'list', 'lavína', 'lízatko'], gameConfig: { diamonds: 5, golds: 5, @@ -1046,12 +1046,12 @@ const LEVELS_CONFIG = { id: 'l_010', worldId: 'world_l', levelNumber: 10, - name: 'Veľké opakovanie', // opakovací level - všetky slová z 1-9 + name: 'Veľké opakovanie', gameType: 'banik', difficulty: 3, words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 'lúč', 'lekár', 'lavína', 'lietadlo', 'lev', 'leňochod', 'lupa', 'lízatko', 'lyže', - 'letisko', 'pílka', 'levanduľa'], // 24 slov + 'letisko', 'pílka', 'levanduľa'], gameConfig: { diamonds: 6, golds: 6, @@ -1097,7 +1097,7 @@ const LEVELS_CONFIG = { name: 'Lyžiar a lektvar', gameType: 'banik', difficulty: 3, - words: ['lopta', 'lúka', 'lietadlo', 'lavička', 'lupa', 'pílka', 'levanduľa', 'lyžiar', 'lektvar'], // 10 slov + words: ['lopta', 'lúka', 'lietadlo', 'lavička', 'lupa', 'pílka', 'levanduľa', 'lyžiar', 'lektvar'], gameConfig: { diamonds: 5, golds: 5, @@ -1141,7 +1141,7 @@ const LEVELS_CONFIG = { name: 'Laboratórium', gameType: 'banik', difficulty: 3, - words: ['lopta', 'lúka', 'levanduľa', 'lektvar', 'lyžiar', 'laboratórium', 'lektor', 'lavína', 'lúčny', 'líška'], // 10 slov + words: ['lopta', 'lúka', 'levanduľa', 'lektvar', 'lyžiar', 'laboratórium', 'lektor', 'lavína', 'lúčny', 'líška'], gameConfig: { diamonds: 5, golds: 6, @@ -1185,7 +1185,7 @@ const LEVELS_CONFIG = { name: 'Leporelo a lodička', gameType: 'banik', difficulty: 3, - words: ['lopta', 'lúka', 'lektor', 'laboratórium', 'lúčny', 'levanduľa', 'leporelo', 'lodička', 'lízatko', 'lekáreň'], // 10 slov + words: ['lopta', 'lúka', 'lektor', 'laboratórium', 'lúčny', 'levanduľa', 'leporelo', 'lodička', 'lízatko', 'lekáreň'], gameConfig: { diamonds: 6, golds: 5, @@ -1230,7 +1230,7 @@ const LEVELS_CONFIG = { name: 'Laborant a linkový', gameType: 'banik', difficulty: 3, - words: ['lopta', 'lúka', 'leporelo', 'lodička', 'lekáreň', 'lavína', 'lektor', 'laborant', 'listnatý'], // 10 slov + words: ['lopta', 'lúka', 'leporelo', 'lodička', 'lekáreň', 'lavína', 'lektor', 'laborant', 'listnatý'], gameConfig: { diamonds: 6, golds: 6, @@ -1272,13 +1272,13 @@ const LEVELS_CONFIG = { id: 'l_015', worldId: 'world_l', levelNumber: 15, - name: 'Tretie opakovanie', // opakovací level - všetky slová z 1-14 + name: 'Tretie opakovanie', gameType: 'banik', difficulty: 4, words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 'lúč', 'lekár', 'lavína', 'lietadlo', 'lev', 'leňochod', 'lupa', 'lízatko', 'lyže', 'leopard', 'letisko', 'pílka', 'levanduľa', 'lyžiar', 'lektvar', 'laboratórium', 'lektor', 'lúčny', - 'leporelo', 'lodička', 'lekáreň', 'laborant', 'listnatý'], // 35 slov + 'leporelo', 'lodička', 'lekáreň', 'laborant', 'listnatý'], gameConfig: { diamonds: 7, golds: 7, @@ -1327,7 +1327,7 @@ const LEVELS_CONFIG = { name: 'Liter a lievik', gameType: 'banik', difficulty: 4, - words: ['lopta', 'lúka', 'laborant', 'listnatý', 'levanduľa', 'liter', 'lievik', 'lampa', 'lopúch'], // 10 slov + words: ['lopta', 'lúka', 'laborant', 'listnatý', 'levanduľa', 'liter', 'lievik', 'lampa', 'lopúch'], gameConfig: { diamonds: 6, golds: 6, @@ -1576,9 +1576,9 @@ const LEVELS_CONFIG = { name: 'Prvé S-čka', gameType: 'banik', difficulty: 1, - words: ['slnko', 'sova', 'seno', 'soľ'], // 4 slová pre začiatok + words: ['slnko', 'sova', 'seno', 'soľ'], // 4 slová gameConfig: { - diamonds: 1, // málo diamantov pre začiatok + diamonds: 1, // málo diamantov golds: 2, // trochu viac goldov crystals: 1, // jeden kryštál speechExercises: 1, // 1 slovo na vyslovenie @@ -1610,12 +1610,12 @@ const LEVELS_CONFIG = { name: 'Suka a srdce', gameType: 'banik', difficulty: 1, - words: ['slnko', 'sova', 'seno', 'soľ', 'silák', 'srdce'], // 6 slov + words: ['slnko', 'sova', 'seno', 'soľ', 'silák', 'srdce'], gameConfig: { diamonds: 2, golds: 3, crystals: 1, - speechExercises: 1, // stále 1 slovo + speechExercises: 1, listeningExercises: 1, mapSize: { width: 16, height: 10 } }, @@ -1649,12 +1649,12 @@ const LEVELS_CONFIG = { name: 'Stôl a silák', gameType: 'banik', difficulty: 1, - words: ['slnko', 'sova', 'seno', 'srdce', 'soľ', 'stôl', 'silák'], // 7 slov + words: ['slnko', 'sova', 'seno', 'srdce', 'soľ', 'stôl', 'silák'], gameConfig: { diamonds: 2, golds: 3, crystals: 2, - speechExercises: 2, // zvyšujeme na 2 slová + speechExercises: 2, listeningExercises: 1, mapSize: { width: 16, height: 10 } }, @@ -1689,13 +1689,13 @@ const LEVELS_CONFIG = { name: 'Sitko a sviečka', gameType: 'banik', difficulty: 1, - words: ['slnko', 'stôl', 'silák', 'sova', 'seno', 'srdce', 'sitko', 'sviečka'], // 8 slov + words: ['slnko', 'stôl', 'silák', 'sova', 'seno', 'srdce', 'sitko', 'sviečka'], gameConfig: { diamonds: 3, golds: 3, crystals: 2, - speechExercises: 2, // 2 slová - listeningExercises: 2, // zvyšujeme aj posluch + speechExercises: 2, + listeningExercises: 2, mapSize: { width: 16, height: 10 } }, positions: { @@ -1727,15 +1727,15 @@ const LEVELS_CONFIG = { id: 's_005', worldId: 'world_s', levelNumber: 5, - name: 'Prvé opakovanie', // opakovací level + name: 'Prvé opakovanie', gameType: 'banik', difficulty: 2, - words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka'], // 10 slov + words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka'], gameConfig: { diamonds: 3, golds: 4, crystals: 2, - speechExercises: 3, // zvyšujeme na 3 slová + speechExercises: 3, listeningExercises: 2, mapSize: { width: 16, height: 10 } }, @@ -1772,12 +1772,12 @@ const LEVELS_CONFIG = { name: 'Skala a smiech', gameType: 'banik', difficulty: 2, - words: ['slnko', 'stôl', 'sitko', 'srdce', 'sviečka', 'skala', 'smiech', 'sneh', 'sliepka', 'slama'], // 10 slov + words: ['slnko', 'stôl', 'sitko', 'srdce', 'sviečka', 'skala', 'smiech', 'sneh', 'sliepka', 'slama'], gameConfig: { diamonds: 3, golds: 4, crystals: 3, - speechExercises: 3, // 3 slová + speechExercises: 3, listeningExercises: 2, mapSize: { width: 16, height: 10 } }, @@ -1815,13 +1815,13 @@ const LEVELS_CONFIG = { name: 'Sestra a sídlo', gameType: 'banik', difficulty: 2, - words: ['slnko', 'sneh', 'smiech', 'skala', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť'], // 10 slov + words: ['slnko', 'sneh', 'smiech', 'skala', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť'], gameConfig: { diamonds: 4, golds: 4, crystals: 2, speechExercises: 3, - listeningExercises: 3, // zvyšujeme posluch + listeningExercises: 3, mapSize: { width: 16, height: 10 } }, positions: { @@ -1858,12 +1858,12 @@ const LEVELS_CONFIG = { name: 'Sklo a stavba', gameType: 'banik', difficulty: 2, - words: ['slnko', 'sklo', 'sestra', 'sladkosť', 'sídlo', 'smiech', 'srdce', 'sliepka', 'skala', 'stavba'], // 10 slov + words: ['slnko', 'sklo', 'sestra', 'sladkosť', 'sídlo', 'smiech', 'srdce', 'sliepka', 'skala', 'stavba'], gameConfig: { diamonds: 4, golds: 5, crystals: 3, - speechExercises: 4, // zvyšujeme na 4 + speechExercises: 4, listeningExercises: 3, mapSize: { width: 16, height: 10 } }, @@ -1903,7 +1903,7 @@ const LEVELS_CONFIG = { name: 'Strom a stolička', gameType: 'banik', difficulty: 2, - words: ['slnko', 'sklo', 'sladkosť', 'stavba', 'srdce', 'sneh', 'strom', 'sitko', 'stolička', 'sused'], // 10 slov + words: ['slnko', 'sklo', 'sladkosť', 'stavba', 'srdce', 'sneh', 'strom', 'sitko', 'stolička', 'sused'], gameConfig: { diamonds: 4, golds: 5, @@ -1944,18 +1944,18 @@ const LEVELS_CONFIG = { id: 's_010', worldId: 'world_s', levelNumber: 10, - name: 'Druhé opakovanie', // veľké opakovanie + name: 'Druhé opakovanie', gameType: 'banik', difficulty: 3, words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', 'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', - 'strom', 'stolička', 'sused'], // 23 slov + 'strom', 'stolička', 'sused'], gameConfig: { diamonds: 5, golds: 6, crystals: 3, - speechExercises: 5, // 5 slov na vyslovenie - listeningExercises: 4, // 4 slová na počúvanie + speechExercises: 5, + listeningExercises: 4, mapSize: { width: 16, height: 10 } }, positions: { @@ -1996,12 +1996,12 @@ const LEVELS_CONFIG = { name: 'Sila a súťaž', gameType: 'banik', difficulty: 3, - words: ['slnko', 'sneh', 'strom', 'sladkosť', 'sestra', 'stavba', 'sused', 'smiech', 'sila', 'súťaž'], // 10 slov + words: ['slnko', 'sneh', 'strom', 'sladkosť', 'sestra', 'stavba', 'sused', 'smiech', 'sila', 'súťaž'], gameConfig: { diamonds: 4, golds: 5, crystals: 3, - speechExercises: 5, // viac rečových cvičení + speechExercises: 5, listeningExercises: 4, mapSize: { width: 16, height: 10 } }, @@ -2041,7 +2041,7 @@ const LEVELS_CONFIG = { name: 'Skriňa a siréna', gameType: 'banik', difficulty: 3, - words: ['slnko', 'súťaž', 'sila', 'smiech', 'sestra', 'skriňa', 'stolička', 'sliepka', 'sviečka', 'siréna'], // 10 slov + words: ['slnko', 'súťaž', 'sila', 'smiech', 'sestra', 'skriňa', 'stolička', 'sliepka', 'sviečka', 'siréna'], gameConfig: { diamonds: 4, golds: 6, @@ -2086,12 +2086,12 @@ const LEVELS_CONFIG = { name: 'Socha a sen', gameType: 'banik', difficulty: 3, - words: ['slnko', 'súťaž', 'siréna', 'stolička', 'skriňa', 'sladkosť', 'socha', 'sen', 'srdce', 'skokan'], // 10 slov + words: ['slnko', 'súťaž', 'siréna', 'stolička', 'skriňa', 'sladkosť', 'socha', 'sen', 'srdce', 'skokan'], gameConfig: { diamonds: 5, golds: 5, crystals: 3, - speechExercises: 6, // zvyšujeme na 6 + speechExercises: 6, listeningExercises: 5, mapSize: { width: 16, height: 10 } }, @@ -2132,7 +2132,7 @@ const LEVELS_CONFIG = { name: 'Skokan a svetlo', gameType: 'banik', difficulty: 3, - words: ['slnko', 'sen', 'skriňa', 'skokan', 'siréna', 'súťaž', 'srdce', 'socha', 'stavba', 'svetlo'], // 10 slov + words: ['slnko', 'sen', 'skriňa', 'skokan', 'siréna', 'súťaž', 'srdce', 'socha', 'stavba', 'svetlo'], gameConfig: { diamonds: 5, golds: 6, @@ -2175,19 +2175,19 @@ const LEVELS_CONFIG = { id: 's_015', worldId: 'world_s', levelNumber: 15, - name: 'Tretie opakovanie', // opakovací level + name: 'Tretie opakovanie', gameType: 'banik', difficulty: 4, words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', 'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', 'strom', 'stolička', 'sused', 'sila', 'súťaž', 'skriňa', 'siréna', 'socha', 'sen', 'skokan', - 'svetlo'], // 31 slov + 'svetlo'], gameConfig: { diamonds: 6, golds: 7, crystals: 4, - speechExercises: 7, // 7 slov - listeningExercises: 6, // 6 slov + speechExercises: 7, + listeningExercises: 6, mapSize: { width: 16, height: 10 } }, positions: { @@ -2231,7 +2231,7 @@ const LEVELS_CONFIG = { name: 'Slanina a sladký', gameType: 'banik', difficulty: 4, - words: ['slnko', 'svetlo', 'súťaž', 'sen', 'siréna', 'sneh', 'sliepka', 'smiech', 'slanina', 'sladký'], // 10 slov + words: ['slnko', 'svetlo', 'súťaž', 'sen', 'siréna', 'sneh', 'sliepka', 'smiech', 'slanina', 'sladký'], gameConfig: { diamonds: 5, golds: 6, @@ -2291,18 +2291,18 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 3, y: 8 }, // diamant na pozícii 3,8 - { x: 12, y: 7 } // diamant na pozícii 12,7 + { x: 3, y: 8 }, + { x: 12, y: 7 } ], golds: [ - { x: 2, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 8 }, // gold na pozícii 7,8 - { x: 14, y: 6 }, // gold na pozícii 14,6 + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 }, { x: 9, y: 8 }, { x: 10, y: 13 } ], crystals: [ - { x: 9, y: 12 }, // kryštál na pozícii 9,7 + { x: 9, y: 12 }, { x: 3, y: 12 }, { x: 11, y: 9 } ], @@ -2331,17 +2331,17 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 3, y: 8 }, // diamant na pozícii 3,8 - { x: 12, y: 7 }, // diamant na pozícii 12,7 + { x: 3, y: 8 }, + { x: 12, y: 7 }, { x: 7, y: 13 } ], golds: [ - { x: 2, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 8 }, // gold na pozícii 7,8 + { x: 2, y: 9 }, + { x: 7, y: 8 }, { x: 10, y: 8 } ], crystals: [ - { x: 9, y: 7 }, // kryštál na pozícii 9,7 + { x: 9, y: 7 }, { x: 10, y: 12 } ], player: { x: 1, y: 1 } @@ -2372,19 +2372,19 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 3, y: 8 }, // diamant na pozícii 3,8 - { x: 12, y: 7 }, // diamant na pozícii 12,7 + { x: 3, y: 8 }, + { x: 12, y: 7 }, { x: 10, y: 12 } ], golds: [ - { x: 2, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 8 }, // gold na pozícii 7,8 - { x: 14, y: 6 }, // gold na pozícii 14,6 + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 }, { x: 9, y: 8 }, { x: 10, y: 8 } ], crystals: [ - { x: 9, y: 7 } // kryštál na pozícii 9,7 + { x: 9, y: 7 } ], player: { x: 1, y: 1 } }, @@ -2414,18 +2414,18 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 8 }, // diamant na pozícii 3,8 - { x: 10, y: 7 }, // diamant na pozícii 12,7 + { x: 4, y: 8 }, + { x: 10, y: 7 }, { x: 4, y: 12 }, { x: 9, y: 14 } ], golds: [ - { x: 3, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 8 }, // gold na pozícii 7,8 - { x: 14, y: 6 } // gold na pozícii 14,6 + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } ], crystals: [ - { x: 7, y: 11 } // kryštál na pozícii 9,7 + { x: 7, y: 11 } ], player: { x: 1, y: 1 } }, @@ -2455,17 +2455,17 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 6, y: 4 }, // diamant na pozícii 3,8 - { x: 9, y: 7 }, // diamant na pozícii 12,7 + { x: 6, y: 4 }, + { x: 9, y: 7 }, { x: 2, y: 10 }, { x: 1, y: 14 } ], golds: [ - { x: 3, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 8 } // gold na pozícii 7,8 + { x: 3, y: 9 }, + { x: 7, y: 8 } ], crystals: [ - { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 7, y: 11 }, { x: 3, y: 6 } ], player: { x: 1, y: 1 } @@ -2496,17 +2496,17 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 1, y: 5 }, // diamant na pozícii 3,8 - { x: 4, y: 7 }, // diamant na pozícii 12,7 + { x: 1, y: 5 }, + { x: 4, y: 7 }, { x: 6, y: 10 }, { x: 2, y: 14 } ], golds: [ - { x: 10, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 12 } // gold na pozícii 7,8 + { x: 10, y: 9 }, + { x: 7, y: 12 } ], crystals: [ - { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 7, y: 11 }, { x: 10, y: 6 } ], player: { x: 1, y: 1 } @@ -2537,17 +2537,17 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 1, y: 5 }, // diamant na pozícii 3,8 - { x: 4, y: 7 }, // diamant na pozícii 12,7 + { x: 1, y: 5 }, + { x: 4, y: 7 }, { x: 6, y: 10 }, { x: 2, y: 14 } ], golds: [ - { x: 3, y: 8 }, // gold na pozícii 2,9 - { x: 7, y: 12 } // gold na pozícii 7,8 + { x: 3, y: 8 }, + { x: 7, y: 12 } ], crystals: [ - { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 7, y: 11 }, { x: 10, y: 9 } ], player: { x: 1, y: 1 } @@ -2578,17 +2578,17 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 1, y: 6 }, // diamant na pozícii 3,8 + { x: 1, y: 6 }, { x: 6, y: 14 } ], golds: [ - { x: 10, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 11 }, // gold na pozícii 7,8 + { x: 10, y: 9 }, + { x: 7, y: 11 }, { x: 8, y: 12 }, { x: 1, y: 5 } ], crystals: [ - { x: 9, y: 11 }, // kryštál na pozícii 9,7 + { x: 9, y: 11 }, { x: 14, y: 8 } ], player: { x: 1, y: 1 } @@ -2655,8 +2655,8 @@ const LEVELS_CONFIG = { diamonds: 5, golds: 6, crystals: 3, - speechExercises: 5, // 5 slov na vyslovenie - listeningExercises: 4, // 4 slová na počúvanie + speechExercises: 5, + listeningExercises: 4, mapSize: { width: 16, height: 10 } }, positions: { @@ -2794,15 +2794,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -2962,23 +2962,23 @@ const LEVELS_CONFIG = { difficulty: 1, words: ['zima', 'zub', 'zajac'], gameConfig: { - diamonds: 1, // málo diamantov pre začiatok - golds: 2, // trochu viac goldov - crystals: 1, // jeden kryštál - speechExercises: 1, // 1 slovo na vyslovenie - listeningExercises: 1, // 1 slovo na počúvanie + diamonds: 1, + golds: 2, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, mapSize: { width: 16, height: 10 } }, positions: { diamonds: [ - { x: 7, y: 4 } // diamant v strede mapy + { x: 7, y: 4 } ], golds: [ - { x: 4, y: 3 }, // gold vľavo - { x: 12, y: 7 } // gold vpravo + { x: 4, y: 3 }, + { x: 12, y: 7 } ], crystals: [ - { x: 9, y: 6 } // kryštál vpravo + { x: 9, y: 6 } ], player: { x: 1, y: 1 } }, @@ -2999,7 +2999,7 @@ const LEVELS_CONFIG = { diamonds: 2, golds: 3, crystals: 1, - speechExercises: 1, // stále 1 slovo + speechExercises: 1, listeningExercises: 1, mapSize: { width: 16, height: 10 } }, @@ -3038,7 +3038,7 @@ const LEVELS_CONFIG = { diamonds: 2, golds: 3, crystals: 2, - speechExercises: 2, // zvyšujeme na 2 slová + speechExercises: 2, listeningExercises: 1, mapSize: { width: 16, height: 10 } }, @@ -3078,8 +3078,8 @@ const LEVELS_CONFIG = { diamonds: 3, golds: 3, crystals: 2, - speechExercises: 2, // 2 slová - listeningExercises: 2, // zvyšujeme aj posluch + speechExercises: 2, + listeningExercises: 2, mapSize: { width: 16, height: 10 } }, positions: { @@ -3119,7 +3119,7 @@ const LEVELS_CONFIG = { diamonds: 3, golds: 4, crystals: 2, - speechExercises: 3, // zvyšujeme na 3 slová + speechExercises: 3, listeningExercises: 2, mapSize: { width: 16, height: 10 } }, @@ -3161,7 +3161,7 @@ const LEVELS_CONFIG = { diamonds: 3, golds: 4, crystals: 3, - speechExercises: 3, // 3 slová + speechExercises: 3, listeningExercises: 2, mapSize: { width: 16, height: 10 } }, @@ -3205,7 +3205,7 @@ const LEVELS_CONFIG = { golds: 4, crystals: 2, speechExercises: 3, - listeningExercises: 3, // zvyšujeme posluch + listeningExercises: 3, mapSize: { width: 16, height: 10 } }, positions: { @@ -3247,7 +3247,7 @@ const LEVELS_CONFIG = { diamonds: 4, golds: 5, crystals: 3, - speechExercises: 4, // zvyšujeme na 4 + speechExercises: 4, listeningExercises: 3, mapSize: { width: 16, height: 10 } }, @@ -3292,8 +3292,8 @@ const LEVELS_CONFIG = { diamonds: 5, golds: 6, crystals: 3, - speechExercises: 5, // 5 slov na vyslovenie - listeningExercises: 4, // 4 slová na počúvanie + speechExercises: 5, + listeningExercises: 4, mapSize: { width: 16, height: 10 } }, positions: { @@ -3338,8 +3338,8 @@ const LEVELS_CONFIG = { diamonds: 5, golds: 6, crystals: 3, - speechExercises: 5, // 5 slov na vyslovenie - listeningExercises: 4, // 4 slová na počúvanie + speechExercises: 5, + listeningExercises: 4, mapSize: { width: 16, height: 10 } }, positions: { @@ -3476,15 +3476,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -4137,15 +4137,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -4795,15 +4795,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -5453,15 +5453,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -6118,15 +6118,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -6788,15 +6788,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -7460,15 +7460,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -8135,15 +8135,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -8813,15 +8813,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -9490,15 +9490,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -10183,15 +10183,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ @@ -10872,15 +10872,15 @@ const LEVELS_CONFIG = { }, positions: { diamonds: [ - { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 4, y: 12 }, { x: 9, y: 11 }, { x: 10, y: 14 }, { x: 5, y: 9 }, { x: 0, y: 10 } ], golds: [ - { x: 14, y: 9 }, // gold na pozícii 2,9 - { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 14, y: 9 }, + { x: 7, y: 10 }, { x: 2, y: 6 } ], crystals: [ diff --git a/config/worlds.js b/config/worlds.js index b98209b..8ccc92d 100644 --- a/config/worlds.js +++ b/config/worlds.js @@ -198,7 +198,7 @@ const WORLDS_CONFIG = [ name: 'Ď', title: 'Svet písmena Ď', description: 'Ďabaj s mäkkým písmenom Ď', - color: '#FD79A8', // tmavoružová + color: '#FD79A8', icon: 'images/worlds/world_dh.png', difficulty: 3, unlockRequirement: null, @@ -211,7 +211,7 @@ const WORLDS_CONFIG = [ name: 'Ť', title: 'Svet písmena Ť', description: 'Ťukaj s mäkkým písmenom Ť', - color: '#FDCB6E', // oranžová + color: '#FDCB6E', icon: 'images/worlds/world_th.png', difficulty: 3, unlockRequirement: null, diff --git a/css/pexeso.css b/css/pexeso.css index 9553632..33fe993 100644 --- a/css/pexeso.css +++ b/css/pexeso.css @@ -753,9 +753,6 @@ body { } /* Hlavný herný canvas */ -/* Hlavný herný canvas */ -/* Zmena z flexbox na CSS Grid - karty sa budú rozmiestňovať cez - grid-template-columns definovaný v pravidlách .cards-N nižšie. */ #gameCanvas { background-image: url("../images/pozadie.jpg"); min-width: 800px; /* Desktopová veľkosť */ @@ -767,13 +764,13 @@ body { flex-shrink: 0; /* === GRID NASTAVENIE === */ - display: grid; /* Mriežkový layout pre karty */ - gap: 1.5%; /* Medzera medzi kartami (% zo šírky canvasu) */ - padding: 2%; /* Vnútorný odstup od okrajov canvasu */ - align-content: center; /* Vertikálne vycentrovanie gridu ak je menší */ - justify-content: center; /* Horizontálne vycentrovanie */ - align-items: stretch; /* Karty vyplnia výšku bunky */ - justify-items: stretch; /* Karty vyplnia šírku bunky */ + display: grid; + gap: 1.5%; + padding: 2%; + align-content: center; + justify-content: center; + align-items: stretch; + justify-items: stretch; /* === VZHĽAD === */ overflow: hidden; @@ -786,7 +783,6 @@ body { filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); /* === BOX-SIZING === */ - /* Padding sa počíta dovnútra - canvas zostane presne 800x800 */ box-sizing: border-box; } @@ -794,40 +790,29 @@ body { /* ZÁKLADNÉ NASTAVENIE KARTY */ /* Toto je predvolené nastavenie pre karty */ /* =========================================== */ -/* =========================================== */ -/* ZÁKLADNÉ NASTAVENIE KARTY */ -/* Karta vyplní bunku gridu cez 100% šírky. */ -/* Aspect-ratio 1/1 zabezpečí štvorec. */ -/* container-type umožňuje používať cqw units */ -/* (napr. font-size: 20cqw = 20% šírky karty) */ -/* =========================================== */ .card-container { - display: flex; /* Flexbox pre centrovanie obsahu vnútri */ - width: 100%; /* Vyplní celú šírku gridovej bunky */ - height: auto; /* Výška sa dopočíta z aspect-ratio */ - aspect-ratio: 1 / 1; /* Karta je vždy štvorec */ + display: flex; + width: 100%; + height: auto; + aspect-ratio: 1 / 1; - /* Container Queries - umožňuje cqw units pre obsah karty */ - container-type: inline-size; /* 1cqw = 1% šírky karty */ + + container-type: inline-size; background-image: url('../images/pozadie_button_mobile_2.png'); border: 2px solid #ECCF17 !important; border-radius: 10px; - /* Centrované vnútro */ - flex-direction: column; /* Obrázok nad textom */ - align-items: center; /* Horizontálne vycentrovanie */ - justify-content: center; /* Vertikálne vycentrovanie */ - - /* Animácie */ + flex-direction: column; + align-items: center; + justify-content: center; + transition: all 0.5s ease; - /* 3D efekt pre flip */ perspective: 1000px; transform-style: preserve-3d; position: relative; - /* Box-sizing zabezpečí že border je započítaný v rozmere */ box-sizing: border-box; } @@ -880,42 +865,33 @@ body { animation: correctMatch 0.6s ease; } -/* =========================================== */ -/* OBRÁZKY A TEXT V KARTÁCH */ -/* Všetko v relatívnych jednotkách: */ -/* - obrázok: 55% rozmerov karty */ -/* - text: cqw = % šírky karty */ -/* Takto sa automaticky škáluje s veľkosťou */ -/* karty bez potreby rôznych pravidiel. */ -/* =========================================== */ + + .card-container img { - width: 55%; /* 55% šírky karty */ - height: 55%; /* 55% výšky karty */ - object-fit: contain; /* Zachová pomer strán obrázku */ + width: 55%; + height: 55%; + object-fit: contain; } /* Text na rubovej strane karty (PEXESO) - väčší */ .card-container span { - font-size: 20cqw; /* 20% šírky karty (napr. 160px karta = 32px font) */ + font-size: 20cqw; - /* Farebný gradient (nezmenené) */ background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; -webkit-text-stroke: unset; - /* Text nesmie pretekať kartu */ - max-width: 90%; /* Max 90% šírky karty */ - overflow: hidden; /* Skryje pretekajúci text */ - text-overflow: ellipsis; /* "..." ak je text príliš dlhý */ - white-space: nowrap; /* Neláme text */ - padding: 0 5%; /* Malý odstup od okrajov */ + max-width: 90%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 5%; } -/* Text po otočení karty (konkrétne slovo) - menší aby sa zmestil */ .card-container.flipped span { - font-size: 11cqw; /* 11% šírky karty (pre dlhšie slová) */ + font-size: 11cqw; } /* =========================================== */ @@ -962,9 +938,8 @@ body { /* ===== PAUSE MENU ===== */ /* =========================================== */ -/* Hlavný container pause menu */ .pause-modal { - display: none; /* Skrytý na začiatku */ + display: none; position: fixed; top: 0; left: 0; @@ -993,28 +968,17 @@ body { left: 50%; transform: translate(-50%, -50%); z-index: 2; - - /* Rovnaké rozmery ako execise-window */ width: 70%; max-width: 450px; min-width: 400px; - - /* DÔLEŽITÉ: Používame ROVNAKÉ pozadie ako ostatné modaly */ background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; - - /* Rovnaký border ako ostatné modaly */ border: 4px solid #ECCF17; border-radius: 30px; - - /* Padding */ padding: 2rem 3rem; box-sizing: border-box; - - /* Animácie */ transition: all 0.4s ease; } -/* Header pause menu */ .pause-modal-header { display: flex; justify-content: space-between; @@ -1024,7 +988,6 @@ body { position: relative; } -/* Nadpis "PAUZA" */ .pause-modal-header h2 { font-family: 'Luckiest Guy', sans-serif; font-size: 64px; @@ -1034,19 +997,14 @@ body { text-transform: uppercase; margin: 0; padding: 0; - - /* Gradient text ako ostatné texty */ background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; - - /* Text stroke */ -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: #000; } -/* Close button (X) - ROVNAKÝ ako v pôvodnom .close */ .pause-close-btn { position: absolute; top: -20px; @@ -1055,8 +1013,6 @@ body { border: none; padding: 0; margin: 0; - - /* Text štýl */ color: #FFF; text-align: center; font-family: "Luckiest Guy", sans-serif; @@ -1064,11 +1020,7 @@ body { font-style: normal; font-weight: 400; line-height: normal; - - /* Cursor */ cursor: url('../images/active_cursor4.png') 5 5, pointer; - - /* Animácie */ transition: transform 0.4s ease; z-index: 1001; } @@ -1077,12 +1029,12 @@ body { transform: rotate(15deg) scale(1.05); } -/* Body pause menu */ + .pause-modal-body { padding: 10px 0; } -/* Menu navigácia */ + .pause-menu { margin: 0; padding: 0; @@ -1108,25 +1060,15 @@ body { justify-content: center; cursor: pointer; position: relative; - - /* Rozmery tlačidla */ width: 100%; min-width: 250px; height: 64px; flex-shrink: 0; border-radius: 30px; - - /* Tieň */ filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); - - /* Border a pozadie - ROVNAKÉ ako ostatné tlačidlá */ border: 4px solid #AC3F0B; background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; - - /* Prechod pre animácie */ transition: all 0.3s ease; - - /* Text štýlovanie - ROVNAKÉ ako menu-button */ font-family: "Luckiest Guy", sans-serif; font-size: 32px; font-style: normal; @@ -1134,15 +1076,9 @@ body { line-height: 20px; text-transform: uppercase; text-align: center; - - /* Text stroke */ -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: #000; - - /* Farba textu - BIELA ako v originálnych tlačidlách */ color: #FFF; - - /* Cursor */ cursor: url('../images/active_cursor4.png') 5 5, pointer; z-index: 10000; } diff --git a/game.html b/game.html index 06ba158..c34333b 100644 --- a/game.html +++ b/game.html @@ -175,7 +175,7 @@ diff --git a/index.html b/index.html index aa43925..52b589b 100644 --- a/index.html +++ b/index.html @@ -53,7 +53,7 @@
  • O PROJEKTE
  • -
  • TEST JOZINO
  • + @@ -82,34 +82,39 @@ @@ -124,21 +129,36 @@ diff --git a/js/basics/menu.js b/js/basics/menu.js index b09991e..b779cd3 100644 --- a/js/basics/menu.js +++ b/js/basics/menu.js @@ -93,7 +93,7 @@ function openModal(modal) { modal.style.opacity = '0'; setTimeout(() => { modal.style.opacity = '1'; - setupModalScrolling(); // Inicializuj scrollovanie + setupModalScrolling(modal); }, 10); } @@ -113,13 +113,20 @@ function closeModal(modal) { /** * Nastavenie scroll funkcionalite pre modal obsah */ -function setupModalScrolling() { - const modalContent = document.querySelector('.modal-text-content'); - const arrowUp = document.querySelector('.modal-arrow-up'); - const arrowDown = document.querySelector('.modal-arrow-down'); +function setupModalScrolling(modal) { + // Ak nie je modal zadaný, fallback na celý dokument (pre spätnú kompatibilitu) + const scope = modal || document; + // Hľadáme elementy LEN v rámci daného modalu (nie na celej stránke) + const modalContent = scope.querySelector('.modal-text-content'); + const arrowUp = scope.querySelector('.modal-arrow-up'); + const arrowDown = scope.querySelector('.modal-arrow-down'); + + // Ak niektorý element chýba, nie je čo nastavovať if (!modalContent || !arrowUp || !arrowDown) return; + // Funkcia na aktualizáciu vizuálneho stavu šípok + // Ak sme na vrchu, šípka hore je stlmená, ak na spodku, šípka dole je stlmená function updateArrows() { const isAtTop = modalContent.scrollTop <= 5; const isAtBottom = modalContent.scrollTop + modalContent.clientHeight >= modalContent.scrollHeight - 5; @@ -128,17 +135,28 @@ function setupModalScrolling() { arrowDown.style.opacity = isAtBottom ? '0.3' : '1'; } - // Scroll hore - arrowUp.addEventListener('click', function() { - modalContent.scrollBy({ top: -100, behavior: 'smooth' }); - }); + // DÔLEŽITÉ: Listenery pridávame len raz - pri prvom otvorení tohto modalu + // Bez tejto kontroly by sa pri každom ďalšom otvorení modalu pridal ďalší listener, + // čo by spôsobilo viacnásobný scroll pri každom kliknutí na šípku + if (!modalContent.dataset.scrollInitialized) { + // Kliknutie na šípku hore - scrolluj obsah smerom nahor + arrowUp.addEventListener('click', function() { + modalContent.scrollBy({ top: -100, behavior: 'smooth' }); + }); + + // Kliknutie na šípku dole - scrolluj obsah smerom nadol + arrowDown.addEventListener('click', function() { + modalContent.scrollBy({ top: 100, behavior: 'smooth' }); + }); + + // Pri scrollovaní obsahu aktualizuj vizuálny stav šípok + modalContent.addEventListener('scroll', updateArrows); + + // Označ tento modal ako inicializovaný aby sa listenery nepridali znova + modalContent.dataset.scrollInitialized = 'true'; + } - // Scroll dole - arrowDown.addEventListener('click', function() { - modalContent.scrollBy({ top: 100, behavior: 'smooth' }); - }); - - modalContent.addEventListener('scroll', updateArrows); + // Pri každom otvorení modalu aktualizuj stav šípok (nech sú vizuálne správne) updateArrows(); } diff --git a/js/game.js b/js/game.js index 4c02e64..720b719 100644 --- a/js/game.js +++ b/js/game.js @@ -3436,42 +3436,59 @@ function restartCurrentLevel() { function goToNextLevel() { console.log('Pokúsim sa prejsť na ďalší level...'); + // Získaj aktuálny worldId a levelId z URL parametrov const urlParams = new URLSearchParams(window.location.search); const worldId = urlParams.get('worldId') || urlParams.get('world'); const levelId = urlParams.get('levelId') || urlParams.get('level'); + // Ak v URL chýbajú parametre, nemôžeme zistiť ďalší level - späť do menu if (!worldId || !levelId) { - console.log('Nie sú dostupné URL parametre, vraciam sa do menu'); + console.log('Chýbajú URL parametre (worldId/levelId), vraciam sa do menu'); returnToMenu(); return; } - // Použij gameRouter ak je dostupný - if (window.gameRouter && typeof window.gameRouter.continueToNextLevel === 'function') { - closeAllDialogs(); - window.gameRouter.continueToNextLevel(worldId, levelId); - } else { - // Fallback - manuálne hľadanie ďalšieho levelu - console.log('GameRouter nie je dostupný, používam fallback'); - if (typeof getLevelConfig === 'function') { - const currentLevel = getLevelConfig(levelId); - if (currentLevel) { - const nextLevelNumber = currentLevel.levelNumber + 1; - const nextLevelId = `${worldId}_${nextLevelNumber}`; - const nextLevel = getLevelConfig(nextLevelId); - - if (nextLevel) { - closeAllDialogs(); - window.location.href = `game.html?worldId=${worldId}&levelId=${nextLevelId}`; - } else { - console.log('Ďalší level neexistuje, vraciam sa do menu'); - returnToMenu(); - } - } - } else { - returnToMenu(); - } + // Skontroluj, či je funkcia getNextLevel vôbec dostupná (z config/levels.js) + if (typeof getNextLevel !== 'function') { + console.error('Funkcia getNextLevel nie je dostupná - config/levels.js pravdepodobne nie je načítaný'); + returnToMenu(); + return; } + + // Získaj konfiguráciu ďalšieho levelu cez oficiálnu funkciu z levels.js + const nextLevel = getNextLevel(levelId); + + // Ak ďalší level neexistuje (sme na poslednom leveli sveta), vráť sa do menu + if (!nextLevel) { + console.log(`Ďalší level po ${levelId} neexistuje - koniec sveta, vraciam sa do menu`); + returnToMenu(); + return; + } + + // Zisti, aký typ hry má ďalší level a zostav správnu URL + // gameType môže byť 'banik', 'pexeso' alebo 'mario' + const gameUrls = { + 'banik': 'game.html', + 'pexeso': 'pexeso.html', + 'mario': 'superjozino.html' + }; + + const targetUrl = gameUrls[nextLevel.gameType]; + + // Ak typ hry nepoznáme, logni chybu a vráť sa do menu + if (!targetUrl) { + console.error(`Neznámy typ hry: ${nextLevel.gameType}`); + returnToMenu(); + return; + } + + // Zatvor všetky otvorené dialógy pred presmerovaním + closeAllDialogs(); + + // Presmeruj na ďalší level so správnymi URL parametrami + const nextUrl = `${targetUrl}?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`; + console.log(`Presmerovávam na ďalší level: ${nextUrl}`); + window.location.href = nextUrl; } ////////////////////////////////////////////////// diff --git a/js/pexeso/pexeso.js b/js/pexeso/pexeso.js index f154a5d..358fdfc 100644 --- a/js/pexeso/pexeso.js +++ b/js/pexeso/pexeso.js @@ -2051,24 +2051,57 @@ function restartCurrentLevel() { function goToNextLevel() { console.log('➡️ Prechod na ďalší level...'); - // Pre custom hry alebo demo - reštart - if (currentLevel.id === 'custom' || currentLevel.id === 'demo') { + // Pre custom hry alebo demo nie je ďalší level - len reštartuj aktuálny + if (currentLevel && (currentLevel.id === 'custom' || currentLevel.id === 'demo')) { restartCurrentLevel(); return; } - // Hľadanie ďalšieho levelu - if (typeof getNextLevel === 'function') { - const nextLevel = getNextLevel(currentLevel.id); - if (nextLevel) { - window.location.href = `pexeso.html?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`; - } else { - // Žiadny ďalší level - návrat do menu - returnToMenu(); - } - } else { + // Skontroluj, či je funkcia getNextLevel dostupná (z config/levels.js) + if (typeof getNextLevel !== 'function') { + console.error('❌ Funkcia getNextLevel nie je dostupná - config/levels.js pravdepodobne nie je načítaný'); returnToMenu(); + return; } + + // Skontroluj, že poznáme aktuálny level + if (!currentLevel || !currentLevel.id) { + console.error('❌ Neznámy aktuálny level, vraciam sa do menu'); + returnToMenu(); + return; + } + + // Získaj konfiguráciu ďalšieho levelu + const nextLevel = getNextLevel(currentLevel.id); + + // Ak ďalší level neexistuje (posledný level sveta), vráť sa do menu + if (!nextLevel) { + console.log(`Ďalší level po ${currentLevel.id} neexistuje - koniec sveta`); + returnToMenu(); + return; + } + + // Mapovanie typu hry na správny HTML súbor + // Ďalší level nemusí byť pexeso - môže to byť baník alebo mario + const gameUrls = { + 'banik': 'game.html', + 'pexeso': 'pexeso.html', + 'mario': 'superjozino.html' + }; + + const targetUrl = gameUrls[nextLevel.gameType]; + + // Ak typ hry nepoznáme, logni chybu a vráť sa do menu + if (!targetUrl) { + console.error(`❌ Neznámy typ hry: ${nextLevel.gameType}`); + returnToMenu(); + return; + } + + // Presmeruj na ďalší level so správnymi URL parametrami + const nextUrl = `${targetUrl}?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`; + console.log(`✅ Presmerovávam na ďalší level: ${nextUrl}`); + window.location.href = nextUrl; } /** @@ -2079,7 +2112,7 @@ function returnToMenu() { if (currentLevel.id === 'custom') { // Pre custom hry návrat na index - window.location.href = 'index.html'; + window.location.href = 'worldsmenu.html'; } else { // Pre level hry návrat na worlds menu window.location.href = 'worldsmenu.html';