This commit is contained in:
Adam Reňak 2026-04-24 14:58:15 +02:00
parent 734e28de2e
commit 7aae302911
8 changed files with 373 additions and 349 deletions

View File

@ -528,15 +528,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -687,25 +687,25 @@ const LEVELS_CONFIG = {
name: 'Prvé L-čka', name: 'Prvé L-čka',
gameType: 'banik', gameType: 'banik',
difficulty: 1, difficulty: 1,
words: ['lano', 'lopta', 'list', 'les'], // 4 slová pre začiatok words: ['lano', 'lopta', 'list', 'les'],
gameConfig: { gameConfig: {
diamonds: 1, // málo diamantov pre začiatok diamonds: 1,
golds: 2, // trochu viac goldov golds: 2,
crystals: 1, // jeden kryštál crystals: 1,
speechExercises: 1, speechExercises: 1,
listeningExercises: 1, listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 8, y: 5 } // diamant v strede mapy { x: 8, y: 5 }
], ],
golds: [ golds: [
{ x: 3, y: 2 }, // gold vľavo hore { x: 3, y: 2 },
{ x: 13, y: 8 } // gold vpravo dole { x: 13, y: 8 }
], ],
crystals: [ crystals: [
{ x: 10, y: 4 } // kryštál vpravo { x: 10, y: 4 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
}, },
@ -721,7 +721,7 @@ const LEVELS_CONFIG = {
name: 'Ľahké L-čka', name: 'Ľahké L-čka',
gameType: 'banik', gameType: 'banik',
difficulty: 1, difficulty: 1,
words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica'], // 6 slov words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica'],
gameConfig: { gameConfig: {
diamonds: 2, diamonds: 2,
golds: 3, golds: 3,
@ -758,7 +758,7 @@ const LEVELS_CONFIG = {
name: 'Lavička a lúka', name: 'Lavička a lúka',
gameType: 'banik', gameType: 'banik',
difficulty: 1, 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: { gameConfig: {
diamonds: 3, diamonds: 3,
golds: 3, golds: 3,
@ -797,7 +797,7 @@ const LEVELS_CONFIG = {
name: 'Lampa a lekár', name: 'Lampa a lekár',
gameType: 'banik', gameType: 'banik',
difficulty: 1, 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: { gameConfig: {
diamonds: 3, diamonds: 3,
golds: 4, golds: 4,
@ -834,10 +834,10 @@ const LEVELS_CONFIG = {
id: 'l_005', id: 'l_005',
worldId: 'world_l', worldId: 'world_l',
levelNumber: 5, levelNumber: 5,
name: 'Prvé opakovanie', // opakovací level name: 'Prvé opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
@ -879,7 +879,7 @@ const LEVELS_CONFIG = {
name: 'Lavína a lietadlo', name: 'Lavína a lietadlo',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 4, golds: 4,
@ -921,7 +921,7 @@ const LEVELS_CONFIG = {
name: 'Leňochod a lízatko', name: 'Leňochod a lízatko',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
@ -963,7 +963,7 @@ const LEVELS_CONFIG = {
name: 'Lyže a letisko', name: 'Lyže a letisko',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 4, golds: 4,
@ -1006,7 +1006,7 @@ const LEVELS_CONFIG = {
name: 'Levanduľa a ľudina', name: 'Levanduľa a ľudina',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 5, golds: 5,
@ -1046,12 +1046,12 @@ const LEVELS_CONFIG = {
id: 'l_010', id: 'l_010',
worldId: 'world_l', worldId: 'world_l',
levelNumber: 10, levelNumber: 10,
name: 'Veľké opakovanie', // opakovací level - všetky slová z 1-9 name: 'Veľké opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 3, difficulty: 3,
words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 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', '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: { gameConfig: {
diamonds: 6, diamonds: 6,
golds: 6, golds: 6,
@ -1097,7 +1097,7 @@ const LEVELS_CONFIG = {
name: 'Lyžiar a lektvar', name: 'Lyžiar a lektvar',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 5, golds: 5,
@ -1141,7 +1141,7 @@ const LEVELS_CONFIG = {
name: 'Laboratórium', name: 'Laboratórium',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
@ -1185,7 +1185,7 @@ const LEVELS_CONFIG = {
name: 'Leporelo a lodička', name: 'Leporelo a lodička',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 6, diamonds: 6,
golds: 5, golds: 5,
@ -1230,7 +1230,7 @@ const LEVELS_CONFIG = {
name: 'Laborant a linkový', name: 'Laborant a linkový',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 6, diamonds: 6,
golds: 6, golds: 6,
@ -1272,13 +1272,13 @@ const LEVELS_CONFIG = {
id: 'l_015', id: 'l_015',
worldId: 'world_l', worldId: 'world_l',
levelNumber: 15, levelNumber: 15,
name: 'Tretie opakovanie', // opakovací level - všetky slová z 1-14 name: 'Tretie opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 4, difficulty: 4,
words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 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', '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', '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: { gameConfig: {
diamonds: 7, diamonds: 7,
golds: 7, golds: 7,
@ -1327,7 +1327,7 @@ const LEVELS_CONFIG = {
name: 'Liter a lievik', name: 'Liter a lievik',
gameType: 'banik', gameType: 'banik',
difficulty: 4, 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: { gameConfig: {
diamonds: 6, diamonds: 6,
golds: 6, golds: 6,
@ -1576,9 +1576,9 @@ const LEVELS_CONFIG = {
name: 'Prvé S-čka', name: 'Prvé S-čka',
gameType: 'banik', gameType: 'banik',
difficulty: 1, difficulty: 1,
words: ['slnko', 'sova', 'seno', 'soľ'], // 4 slová pre začiatok words: ['slnko', 'sova', 'seno', 'soľ'], // 4 slová
gameConfig: { gameConfig: {
diamonds: 1, // málo diamantov pre začiatok diamonds: 1, // málo diamantov
golds: 2, // trochu viac goldov golds: 2, // trochu viac goldov
crystals: 1, // jeden kryštál crystals: 1, // jeden kryštál
speechExercises: 1, // 1 slovo na vyslovenie speechExercises: 1, // 1 slovo na vyslovenie
@ -1610,12 +1610,12 @@ const LEVELS_CONFIG = {
name: 'Suka a srdce', name: 'Suka a srdce',
gameType: 'banik', gameType: 'banik',
difficulty: 1, difficulty: 1,
words: ['slnko', 'sova', 'seno', 'soľ', 'silák', 'srdce'], // 6 slov words: ['slnko', 'sova', 'seno', 'soľ', 'silák', 'srdce'],
gameConfig: { gameConfig: {
diamonds: 2, diamonds: 2,
golds: 3, golds: 3,
crystals: 1, crystals: 1,
speechExercises: 1, // stále 1 slovo speechExercises: 1,
listeningExercises: 1, listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -1649,12 +1649,12 @@ const LEVELS_CONFIG = {
name: 'Stôl a silák', name: 'Stôl a silák',
gameType: 'banik', gameType: 'banik',
difficulty: 1, 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: { gameConfig: {
diamonds: 2, diamonds: 2,
golds: 3, golds: 3,
crystals: 2, crystals: 2,
speechExercises: 2, // zvyšujeme na 2 slová speechExercises: 2,
listeningExercises: 1, listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -1689,13 +1689,13 @@ const LEVELS_CONFIG = {
name: 'Sitko a sviečka', name: 'Sitko a sviečka',
gameType: 'banik', gameType: 'banik',
difficulty: 1, 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: { gameConfig: {
diamonds: 3, diamonds: 3,
golds: 3, golds: 3,
crystals: 2, crystals: 2,
speechExercises: 2, // 2 slová speechExercises: 2,
listeningExercises: 2, // zvyšujeme aj posluch listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -1727,15 +1727,15 @@ const LEVELS_CONFIG = {
id: 's_005', id: 's_005',
worldId: 'world_s', worldId: 'world_s',
levelNumber: 5, levelNumber: 5,
name: 'Prvé opakovanie', // opakovací level name: 'Prvé opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 3, diamonds: 3,
golds: 4, golds: 4,
crystals: 2, crystals: 2,
speechExercises: 3, // zvyšujeme na 3 slová speechExercises: 3,
listeningExercises: 2, listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -1772,12 +1772,12 @@ const LEVELS_CONFIG = {
name: 'Skala a smiech', name: 'Skala a smiech',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 3, diamonds: 3,
golds: 4, golds: 4,
crystals: 3, crystals: 3,
speechExercises: 3, // 3 slová speechExercises: 3,
listeningExercises: 2, listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -1815,13 +1815,13 @@ const LEVELS_CONFIG = {
name: 'Sestra a sídlo', name: 'Sestra a sídlo',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 4, golds: 4,
crystals: 2, crystals: 2,
speechExercises: 3, speechExercises: 3,
listeningExercises: 3, // zvyšujeme posluch listeningExercises: 3,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -1858,12 +1858,12 @@ const LEVELS_CONFIG = {
name: 'Sklo a stavba', name: 'Sklo a stavba',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
crystals: 3, crystals: 3,
speechExercises: 4, // zvyšujeme na 4 speechExercises: 4,
listeningExercises: 3, listeningExercises: 3,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -1903,7 +1903,7 @@ const LEVELS_CONFIG = {
name: 'Strom a stolička', name: 'Strom a stolička',
gameType: 'banik', gameType: 'banik',
difficulty: 2, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
@ -1944,18 +1944,18 @@ const LEVELS_CONFIG = {
id: 's_010', id: 's_010',
worldId: 'world_s', worldId: 'world_s',
levelNumber: 10, levelNumber: 10,
name: 'Druhé opakovanie', // veľké opakovanie name: 'Druhé opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 3, difficulty: 3,
words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka',
'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', 'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba',
'strom', 'stolička', 'sused'], // 23 slov 'strom', 'stolička', 'sused'],
gameConfig: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
crystals: 3, crystals: 3,
speechExercises: 5, // 5 slov na vyslovenie speechExercises: 5,
listeningExercises: 4, // 4 slová na počúvanie listeningExercises: 4,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -1996,12 +1996,12 @@ const LEVELS_CONFIG = {
name: 'Sila a súťaž', name: 'Sila a súťaž',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
crystals: 3, crystals: 3,
speechExercises: 5, // viac rečových cvičení speechExercises: 5,
listeningExercises: 4, listeningExercises: 4,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -2041,7 +2041,7 @@ const LEVELS_CONFIG = {
name: 'Skriňa a siréna', name: 'Skriňa a siréna',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 4, diamonds: 4,
golds: 6, golds: 6,
@ -2086,12 +2086,12 @@ const LEVELS_CONFIG = {
name: 'Socha a sen', name: 'Socha a sen',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 5, golds: 5,
crystals: 3, crystals: 3,
speechExercises: 6, // zvyšujeme na 6 speechExercises: 6,
listeningExercises: 5, listeningExercises: 5,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -2132,7 +2132,7 @@ const LEVELS_CONFIG = {
name: 'Skokan a svetlo', name: 'Skokan a svetlo',
gameType: 'banik', gameType: 'banik',
difficulty: 3, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
@ -2175,19 +2175,19 @@ const LEVELS_CONFIG = {
id: 's_015', id: 's_015',
worldId: 'world_s', worldId: 'world_s',
levelNumber: 15, levelNumber: 15,
name: 'Tretie opakovanie', // opakovací level name: 'Tretie opakovanie',
gameType: 'banik', gameType: 'banik',
difficulty: 4, difficulty: 4,
words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka',
'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', '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', 'strom', 'stolička', 'sused', 'sila', 'súťaž', 'skriňa', 'siréna', 'socha', 'sen', 'skokan',
'svetlo'], // 31 slov 'svetlo'],
gameConfig: { gameConfig: {
diamonds: 6, diamonds: 6,
golds: 7, golds: 7,
crystals: 4, crystals: 4,
speechExercises: 7, // 7 slov speechExercises: 7,
listeningExercises: 6, // 6 slov listeningExercises: 6,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -2231,7 +2231,7 @@ const LEVELS_CONFIG = {
name: 'Slanina a sladký', name: 'Slanina a sladký',
gameType: 'banik', gameType: 'banik',
difficulty: 4, 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: { gameConfig: {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
@ -2291,18 +2291,18 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 3, y: 8 }, // diamant na pozícii 3,8 { x: 3, y: 8 },
{ x: 12, y: 7 } // diamant na pozícii 12,7 { x: 12, y: 7 }
], ],
golds: [ golds: [
{ x: 2, y: 9 }, // gold na pozícii 2,9 { x: 2, y: 9 },
{ x: 7, y: 8 }, // gold na pozícii 7,8 { x: 7, y: 8 },
{ x: 14, y: 6 }, // gold na pozícii 14,6 { x: 14, y: 6 },
{ x: 9, y: 8 }, { x: 9, y: 8 },
{ x: 10, y: 13 } { x: 10, y: 13 }
], ],
crystals: [ crystals: [
{ x: 9, y: 12 }, // kryštál na pozícii 9,7 { x: 9, y: 12 },
{ x: 3, y: 12 }, { x: 3, y: 12 },
{ x: 11, y: 9 } { x: 11, y: 9 }
], ],
@ -2331,17 +2331,17 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 3, y: 8 }, // diamant na pozícii 3,8 { x: 3, y: 8 },
{ x: 12, y: 7 }, // diamant na pozícii 12,7 { x: 12, y: 7 },
{ x: 7, y: 13 } { x: 7, y: 13 }
], ],
golds: [ golds: [
{ x: 2, y: 9 }, // gold na pozícii 2,9 { x: 2, y: 9 },
{ x: 7, y: 8 }, // gold na pozícii 7,8 { x: 7, y: 8 },
{ x: 10, y: 8 } { x: 10, y: 8 }
], ],
crystals: [ crystals: [
{ x: 9, y: 7 }, // kryštál na pozícii 9,7 { x: 9, y: 7 },
{ x: 10, y: 12 } { x: 10, y: 12 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
@ -2372,19 +2372,19 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 3, y: 8 }, // diamant na pozícii 3,8 { x: 3, y: 8 },
{ x: 12, y: 7 }, // diamant na pozícii 12,7 { x: 12, y: 7 },
{ x: 10, y: 12 } { x: 10, y: 12 }
], ],
golds: [ golds: [
{ x: 2, y: 9 }, // gold na pozícii 2,9 { x: 2, y: 9 },
{ x: 7, y: 8 }, // gold na pozícii 7,8 { x: 7, y: 8 },
{ x: 14, y: 6 }, // gold na pozícii 14,6 { x: 14, y: 6 },
{ x: 9, y: 8 }, { x: 9, y: 8 },
{ x: 10, y: 8 } { x: 10, y: 8 }
], ],
crystals: [ crystals: [
{ x: 9, y: 7 } // kryštál na pozícii 9,7 { x: 9, y: 7 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
}, },
@ -2414,18 +2414,18 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 8 }, // diamant na pozícii 3,8 { x: 4, y: 8 },
{ x: 10, y: 7 }, // diamant na pozícii 12,7 { x: 10, y: 7 },
{ x: 4, y: 12 }, { x: 4, y: 12 },
{ x: 9, y: 14 } { x: 9, y: 14 }
], ],
golds: [ golds: [
{ x: 3, y: 9 }, // gold na pozícii 2,9 { x: 3, y: 9 },
{ x: 7, y: 8 }, // gold na pozícii 7,8 { x: 7, y: 8 },
{ x: 14, y: 6 } // gold na pozícii 14,6 { x: 14, y: 6 }
], ],
crystals: [ crystals: [
{ x: 7, y: 11 } // kryštál na pozícii 9,7 { x: 7, y: 11 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
}, },
@ -2455,17 +2455,17 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 6, y: 4 }, // diamant na pozícii 3,8 { x: 6, y: 4 },
{ x: 9, y: 7 }, // diamant na pozícii 12,7 { x: 9, y: 7 },
{ x: 2, y: 10 }, { x: 2, y: 10 },
{ x: 1, y: 14 } { x: 1, y: 14 }
], ],
golds: [ golds: [
{ x: 3, y: 9 }, // gold na pozícii 2,9 { x: 3, y: 9 },
{ x: 7, y: 8 } // gold na pozícii 7,8 { x: 7, y: 8 }
], ],
crystals: [ crystals: [
{ x: 7, y: 11 }, // kryštál na pozícii 9,7 { x: 7, y: 11 },
{ x: 3, y: 6 } { x: 3, y: 6 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
@ -2496,17 +2496,17 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 1, y: 5 }, // diamant na pozícii 3,8 { x: 1, y: 5 },
{ x: 4, y: 7 }, // diamant na pozícii 12,7 { x: 4, y: 7 },
{ x: 6, y: 10 }, { x: 6, y: 10 },
{ x: 2, y: 14 } { x: 2, y: 14 }
], ],
golds: [ golds: [
{ x: 10, y: 9 }, // gold na pozícii 2,9 { x: 10, y: 9 },
{ x: 7, y: 12 } // gold na pozícii 7,8 { x: 7, y: 12 }
], ],
crystals: [ crystals: [
{ x: 7, y: 11 }, // kryštál na pozícii 9,7 { x: 7, y: 11 },
{ x: 10, y: 6 } { x: 10, y: 6 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
@ -2537,17 +2537,17 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 1, y: 5 }, // diamant na pozícii 3,8 { x: 1, y: 5 },
{ x: 4, y: 7 }, // diamant na pozícii 12,7 { x: 4, y: 7 },
{ x: 6, y: 10 }, { x: 6, y: 10 },
{ x: 2, y: 14 } { x: 2, y: 14 }
], ],
golds: [ golds: [
{ x: 3, y: 8 }, // gold na pozícii 2,9 { x: 3, y: 8 },
{ x: 7, y: 12 } // gold na pozícii 7,8 { x: 7, y: 12 }
], ],
crystals: [ crystals: [
{ x: 7, y: 11 }, // kryštál na pozícii 9,7 { x: 7, y: 11 },
{ x: 10, y: 9 } { x: 10, y: 9 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
@ -2578,17 +2578,17 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 1, y: 6 }, // diamant na pozícii 3,8 { x: 1, y: 6 },
{ x: 6, y: 14 } { x: 6, y: 14 }
], ],
golds: [ golds: [
{ x: 10, y: 9 }, // gold na pozícii 2,9 { x: 10, y: 9 },
{ x: 7, y: 11 }, // gold na pozícii 7,8 { x: 7, y: 11 },
{ x: 8, y: 12 }, { x: 8, y: 12 },
{ x: 1, y: 5 } { x: 1, y: 5 }
], ],
crystals: [ crystals: [
{ x: 9, y: 11 }, // kryštál na pozícii 9,7 { x: 9, y: 11 },
{ x: 14, y: 8 } { x: 14, y: 8 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
@ -2655,8 +2655,8 @@ const LEVELS_CONFIG = {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
crystals: 3, crystals: 3,
speechExercises: 5, // 5 slov na vyslovenie speechExercises: 5,
listeningExercises: 4, // 4 slová na počúvanie listeningExercises: 4,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -2794,15 +2794,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -2962,23 +2962,23 @@ const LEVELS_CONFIG = {
difficulty: 1, difficulty: 1,
words: ['zima', 'zub', 'zajac'], words: ['zima', 'zub', 'zajac'],
gameConfig: { gameConfig: {
diamonds: 1, // málo diamantov pre začiatok diamonds: 1,
golds: 2, // trochu viac goldov golds: 2,
crystals: 1, // jeden kryštál crystals: 1,
speechExercises: 1, // 1 slovo na vyslovenie speechExercises: 1,
listeningExercises: 1, // 1 slovo na počúvanie listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 7, y: 4 } // diamant v strede mapy { x: 7, y: 4 }
], ],
golds: [ golds: [
{ x: 4, y: 3 }, // gold vľavo { x: 4, y: 3 },
{ x: 12, y: 7 } // gold vpravo { x: 12, y: 7 }
], ],
crystals: [ crystals: [
{ x: 9, y: 6 } // kryštál vpravo { x: 9, y: 6 }
], ],
player: { x: 1, y: 1 } player: { x: 1, y: 1 }
}, },
@ -2999,7 +2999,7 @@ const LEVELS_CONFIG = {
diamonds: 2, diamonds: 2,
golds: 3, golds: 3,
crystals: 1, crystals: 1,
speechExercises: 1, // stále 1 slovo speechExercises: 1,
listeningExercises: 1, listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -3038,7 +3038,7 @@ const LEVELS_CONFIG = {
diamonds: 2, diamonds: 2,
golds: 3, golds: 3,
crystals: 2, crystals: 2,
speechExercises: 2, // zvyšujeme na 2 slová speechExercises: 2,
listeningExercises: 1, listeningExercises: 1,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -3078,8 +3078,8 @@ const LEVELS_CONFIG = {
diamonds: 3, diamonds: 3,
golds: 3, golds: 3,
crystals: 2, crystals: 2,
speechExercises: 2, // 2 slová speechExercises: 2,
listeningExercises: 2, // zvyšujeme aj posluch listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -3119,7 +3119,7 @@ const LEVELS_CONFIG = {
diamonds: 3, diamonds: 3,
golds: 4, golds: 4,
crystals: 2, crystals: 2,
speechExercises: 3, // zvyšujeme na 3 slová speechExercises: 3,
listeningExercises: 2, listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -3161,7 +3161,7 @@ const LEVELS_CONFIG = {
diamonds: 3, diamonds: 3,
golds: 4, golds: 4,
crystals: 3, crystals: 3,
speechExercises: 3, // 3 slová speechExercises: 3,
listeningExercises: 2, listeningExercises: 2,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -3205,7 +3205,7 @@ const LEVELS_CONFIG = {
golds: 4, golds: 4,
crystals: 2, crystals: 2,
speechExercises: 3, speechExercises: 3,
listeningExercises: 3, // zvyšujeme posluch listeningExercises: 3,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -3247,7 +3247,7 @@ const LEVELS_CONFIG = {
diamonds: 4, diamonds: 4,
golds: 5, golds: 5,
crystals: 3, crystals: 3,
speechExercises: 4, // zvyšujeme na 4 speechExercises: 4,
listeningExercises: 3, listeningExercises: 3,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
@ -3292,8 +3292,8 @@ const LEVELS_CONFIG = {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
crystals: 3, crystals: 3,
speechExercises: 5, // 5 slov na vyslovenie speechExercises: 5,
listeningExercises: 4, // 4 slová na počúvanie listeningExercises: 4,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -3338,8 +3338,8 @@ const LEVELS_CONFIG = {
diamonds: 5, diamonds: 5,
golds: 6, golds: 6,
crystals: 3, crystals: 3,
speechExercises: 5, // 5 slov na vyslovenie speechExercises: 5,
listeningExercises: 4, // 4 slová na počúvanie listeningExercises: 4,
mapSize: { width: 16, height: 10 } mapSize: { width: 16, height: 10 }
}, },
positions: { positions: {
@ -3476,15 +3476,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -4137,15 +4137,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -4795,15 +4795,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -5453,15 +5453,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -6118,15 +6118,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -6788,15 +6788,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -7460,15 +7460,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -8135,15 +8135,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -8813,15 +8813,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -9490,15 +9490,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -10183,15 +10183,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [
@ -10872,15 +10872,15 @@ const LEVELS_CONFIG = {
}, },
positions: { positions: {
diamonds: [ diamonds: [
{ x: 4, y: 12 }, // diamant na pozícii 3,8 { x: 4, y: 12 },
{ x: 9, y: 11 }, { x: 9, y: 11 },
{ x: 10, y: 14 }, { x: 10, y: 14 },
{ x: 5, y: 9 }, { x: 5, y: 9 },
{ x: 0, y: 10 } { x: 0, y: 10 }
], ],
golds: [ golds: [
{ x: 14, y: 9 }, // gold na pozícii 2,9 { x: 14, y: 9 },
{ x: 7, y: 10 }, // gold na pozícii 7,8 { x: 7, y: 10 },
{ x: 2, y: 6 } { x: 2, y: 6 }
], ],
crystals: [ crystals: [

View File

@ -198,7 +198,7 @@ const WORLDS_CONFIG = [
name: 'Ď', name: 'Ď',
title: 'Svet písmena Ď', title: 'Svet písmena Ď',
description: 'Ďabaj s mäkkým písmenom Ď', description: 'Ďabaj s mäkkým písmenom Ď',
color: '#FD79A8', // tmavoružová color: '#FD79A8',
icon: 'images/worlds/world_dh.png', icon: 'images/worlds/world_dh.png',
difficulty: 3, difficulty: 3,
unlockRequirement: null, unlockRequirement: null,
@ -211,7 +211,7 @@ const WORLDS_CONFIG = [
name: 'Ť', name: 'Ť',
title: 'Svet písmena Ť', title: 'Svet písmena Ť',
description: 'Ťukaj s mäkkým písmenom Ť', description: 'Ťukaj s mäkkým písmenom Ť',
color: '#FDCB6E', // oranžová color: '#FDCB6E',
icon: 'images/worlds/world_th.png', icon: 'images/worlds/world_th.png',
difficulty: 3, difficulty: 3,
unlockRequirement: null, unlockRequirement: null,

View File

@ -753,9 +753,6 @@ body {
} }
/* Hlavný herný canvas */ /* 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 { #gameCanvas {
background-image: url("../images/pozadie.jpg"); background-image: url("../images/pozadie.jpg");
min-width: 800px; /* Desktopová veľkosť */ min-width: 800px; /* Desktopová veľkosť */
@ -767,13 +764,13 @@ body {
flex-shrink: 0; flex-shrink: 0;
/* === GRID NASTAVENIE === */ /* === GRID NASTAVENIE === */
display: grid; /* Mriežkový layout pre karty */ display: grid;
gap: 1.5%; /* Medzera medzi kartami (% zo šírky canvasu) */ gap: 1.5%;
padding: 2%; /* Vnútorný odstup od okrajov canvasu */ padding: 2%;
align-content: center; /* Vertikálne vycentrovanie gridu ak je menší */ align-content: center;
justify-content: center; /* Horizontálne vycentrovanie */ justify-content: center;
align-items: stretch; /* Karty vyplnia výšku bunky */ align-items: stretch;
justify-items: stretch; /* Karty vyplnia šírku bunky */ justify-items: stretch;
/* === VZHĽAD === */ /* === VZHĽAD === */
overflow: hidden; overflow: hidden;
@ -786,7 +783,6 @@ body {
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
/* === BOX-SIZING === */ /* === BOX-SIZING === */
/* Padding sa počíta dovnútra - canvas zostane presne 800x800 */
box-sizing: border-box; box-sizing: border-box;
} }
@ -794,40 +790,29 @@ body {
/* ZÁKLADNÉ NASTAVENIE KARTY */ /* ZÁKLADNÉ NASTAVENIE KARTY */
/* Toto je predvolené nastavenie pre 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 { .card-container {
display: flex; /* Flexbox pre centrovanie obsahu vnútri */ display: flex;
width: 100%; /* Vyplní celú šírku gridovej bunky */ width: 100%;
height: auto; /* Výška sa dopočíta z aspect-ratio */ height: auto;
aspect-ratio: 1 / 1; /* Karta je vždy štvorec */ 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'); background-image: url('../images/pozadie_button_mobile_2.png');
border: 2px solid #ECCF17 !important; border: 2px solid #ECCF17 !important;
border-radius: 10px; border-radius: 10px;
/* Centrované vnútro */ flex-direction: column;
flex-direction: column; /* Obrázok nad textom */ align-items: center;
align-items: center; /* Horizontálne vycentrovanie */ justify-content: center;
justify-content: center; /* Vertikálne vycentrovanie */
/* Animácie */
transition: all 0.5s ease; transition: all 0.5s ease;
/* 3D efekt pre flip */
perspective: 1000px; perspective: 1000px;
transform-style: preserve-3d; transform-style: preserve-3d;
position: relative; position: relative;
/* Box-sizing zabezpečí že border je započítaný v rozmere */
box-sizing: border-box; box-sizing: border-box;
} }
@ -880,42 +865,33 @@ body {
animation: correctMatch 0.6s ease; 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 { .card-container img {
width: 55%; /* 55% šírky karty */ width: 55%;
height: 55%; /* 55% výšky karty */ height: 55%;
object-fit: contain; /* Zachová pomer strán obrázku */ object-fit: contain;
} }
/* Text na rubovej strane karty (PEXESO) - väčší */ /* Text na rubovej strane karty (PEXESO) - väčší */
.card-container span { .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: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text; background-clip: text;
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
-webkit-text-stroke: unset; -webkit-text-stroke: unset;
/* Text nesmie pretekať kartu */ max-width: 90%;
max-width: 90%; /* Max 90% šírky karty */ overflow: hidden;
overflow: hidden; /* Skryje pretekajúci text */ text-overflow: ellipsis;
text-overflow: ellipsis; /* "..." ak je text príliš dlhý */ white-space: nowrap;
white-space: nowrap; /* Neláme text */ padding: 0 5%;
padding: 0 5%; /* Malý odstup od okrajov */
} }
/* Text po otočení karty (konkrétne slovo) - menší aby sa zmestil */
.card-container.flipped span { .card-container.flipped span {
font-size: 11cqw; /* 11% šírky karty (pre dlhšie slová) */ font-size: 11cqw;
} }
/* =========================================== */ /* =========================================== */
@ -962,9 +938,8 @@ body {
/* ===== PAUSE MENU ===== */ /* ===== PAUSE MENU ===== */
/* =========================================== */ /* =========================================== */
/* Hlavný container pause menu */
.pause-modal { .pause-modal {
display: none; /* Skrytý na začiatku */ display: none;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
@ -993,28 +968,17 @@ body {
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
z-index: 2; z-index: 2;
/* Rovnaké rozmery ako execise-window */
width: 70%; width: 70%;
max-width: 450px; max-width: 450px;
min-width: 400px; 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; background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat;
/* Rovnaký border ako ostatné modaly */
border: 4px solid #ECCF17; border: 4px solid #ECCF17;
border-radius: 30px; border-radius: 30px;
/* Padding */
padding: 2rem 3rem; padding: 2rem 3rem;
box-sizing: border-box; box-sizing: border-box;
/* Animácie */
transition: all 0.4s ease; transition: all 0.4s ease;
} }
/* Header pause menu */
.pause-modal-header { .pause-modal-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -1024,7 +988,6 @@ body {
position: relative; position: relative;
} }
/* Nadpis "PAUZA" */
.pause-modal-header h2 { .pause-modal-header h2 {
font-family: 'Luckiest Guy', sans-serif; font-family: 'Luckiest Guy', sans-serif;
font-size: 64px; font-size: 64px;
@ -1034,19 +997,14 @@ body {
text-transform: uppercase; text-transform: uppercase;
margin: 0; margin: 0;
padding: 0; padding: 0;
/* Gradient text ako ostatné texty */
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text; background-clip: text;
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
/* Text stroke */
-webkit-text-stroke-width: 1px; -webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000; -webkit-text-stroke-color: #000;
} }
/* Close button (X) - ROVNAKÝ ako v pôvodnom .close */
.pause-close-btn { .pause-close-btn {
position: absolute; position: absolute;
top: -20px; top: -20px;
@ -1055,8 +1013,6 @@ body {
border: none; border: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
/* Text štýl */
color: #FFF; color: #FFF;
text-align: center; text-align: center;
font-family: "Luckiest Guy", sans-serif; font-family: "Luckiest Guy", sans-serif;
@ -1064,11 +1020,7 @@ body {
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: normal; line-height: normal;
/* Cursor */
cursor: url('../images/active_cursor4.png') 5 5, pointer; cursor: url('../images/active_cursor4.png') 5 5, pointer;
/* Animácie */
transition: transform 0.4s ease; transition: transform 0.4s ease;
z-index: 1001; z-index: 1001;
} }
@ -1077,12 +1029,12 @@ body {
transform: rotate(15deg) scale(1.05); transform: rotate(15deg) scale(1.05);
} }
/* Body pause menu */
.pause-modal-body { .pause-modal-body {
padding: 10px 0; padding: 10px 0;
} }
/* Menu navigácia */
.pause-menu { .pause-menu {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -1108,25 +1060,15 @@ body {
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
/* Rozmery tlačidla */
width: 100%; width: 100%;
min-width: 250px; min-width: 250px;
height: 64px; height: 64px;
flex-shrink: 0; flex-shrink: 0;
border-radius: 30px; border-radius: 30px;
/* Tieň */
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
/* Border a pozadie - ROVNAKÉ ako ostatné tlačidlá */
border: 4px solid #AC3F0B; border: 4px solid #AC3F0B;
background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat;
/* Prechod pre animácie */
transition: all 0.3s ease; transition: all 0.3s ease;
/* Text štýlovanie - ROVNAKÉ ako menu-button */
font-family: "Luckiest Guy", sans-serif; font-family: "Luckiest Guy", sans-serif;
font-size: 32px; font-size: 32px;
font-style: normal; font-style: normal;
@ -1134,15 +1076,9 @@ body {
line-height: 20px; line-height: 20px;
text-transform: uppercase; text-transform: uppercase;
text-align: center; text-align: center;
/* Text stroke */
-webkit-text-stroke-width: 1px; -webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000; -webkit-text-stroke-color: #000;
/* Farba textu - BIELA ako v originálnych tlačidlách */
color: #FFF; color: #FFF;
/* Cursor */
cursor: url('../images/active_cursor4.png') 5 5, pointer; cursor: url('../images/active_cursor4.png') 5 5, pointer;
z-index: 10000; z-index: 10000;
} }

View File

@ -175,7 +175,7 @@
<ul> <ul>
<li><a href="game.html" alt="Reštart" class="menu-button">Reštart</a></li> <li><a href="game.html" alt="Reštart" class="menu-button">Reštart</a></li>
<li><a href="worldsmenu.html" alt="Koniec" class="menu-button">Koniec</a></li> <li><a href="worldsmenu.html" alt="Koniec" class="menu-button">Koniec</a></li>
<li><a href="menu.html" alt="Menu" class="menu-button">Menu</a></li> <li><a href="menu.html" alt="Menu" class="menu-button">Úvodná obrazovka</a></li>
</ul> </ul>
</nav> </nav>
</div> </div>

View File

@ -53,7 +53,7 @@
<li><a href="#projekt" alt="O projekte" class="menu-button show-about">O PROJEKTE</a></li> <li><a href="#projekt" alt="O projekte" class="menu-button show-about">O PROJEKTE</a></li>
<!--<li><a href="game.html" alt="Banik" class="menu-button"><span>TEST Bana</span></a></li>--> <!--<li><a href="game.html" alt="Banik" class="menu-button"><span>TEST Bana</span></a></li>-->
<!--<li><a href="pexeso.html" alt="Jozino" class="menu-button"><span>Test PEXESO</span></a></li>--> <!--<li><a href="pexeso.html" alt="Jozino" class="menu-button"><span>Test PEXESO</span></a></li>-->
<li><a href="superjozino.html" alt="Jozino" class="menu-button"><span>TEST JOZINO</span></a></li> <!--<li><a href="superjozino.html" alt="Jozino" class="menu-button"><span>TEST JOZINO</span></a></li>-->
</ul> </ul>
</nav> </nav>
</div> </div>
@ -82,34 +82,39 @@
<div class="modal-arrow-up"></div> <div class="modal-arrow-up"></div>
<div class="modal-text-content"> <div class="modal-text-content">
<p> <p>
Vitaj v hre Baník Jožino! Tvojou úlohou je preberať rolu odvážneho baníka a Vitaj v platforme <strong>Baník Jožino</strong>! Ide o logopedickú hru,
hľadať vzácne poklady ukryté v hlbokách podzemnej jaskyne. v ktorej si hravou formou precvičíš slovenské hlásky a slová.
<br><br> <br><br>
<span>Ovládanie postavy:</span><br> <span>Svety a levely:</span><br>
Použi šípky na klávesnici alebo klávesy WASD na pohyb postavy po svete. Platforma obsahuje 16 tematických svetov, každý zameraný na inú
Na vykopanie pokladu stlač medzerník. slovenskú hlásku (R, L, S, Z, C, Š, Ž, Č, D, T, N, Ď, Ť, Ň, K, G).
V každom svete ťa čaká 16 levelov s postupne rastúcou náročnosťou.
Za každý level môžeš získať 1 až 3 hviezdy podľa tvojho výkonu.
<br><br> <br><br>
<span>Drahokamy:</span><br> <span>Mini hra Baník:</span><br>
V hre sa vyskytujú 3 druhy drahokamov: Zlato, Diamant a Fialový Kryštál. Si odvážny baník a hľadáš poklady v podzemí. Pohybuješ sa pomocou
Na vykopanie diamantu musíš splniť rečové cvičenie. Na vykopanie kryštálu šípok alebo klávesov WASD a kopeš medzerníkom. V hre nájdeš tri druhy
zase posluchové cvičenie. pokladov: <strong>zlato</strong> (jednoduché nazbieranie),
<strong>diamant</strong> (spustí rečové cvičenie) a
<strong>fialový kryštál</strong> (spustí posluchové cvičenie).
<br><br> <br><br>
<span>Ciele hry:</span><br> <span>Mini hra Pexeso:</span><br>
Pokús sa nazbierať čo najviac pokladov v stanovenom čase. Každý typ Klasické pexeso, ale s obrázkami slov. Otáčaj karty a hľadaj
drahokamu ti prinesie iný počet bodov. Buď opatrný a užívaj si dobrodružstvo! rovnaké dvojice. Keď nájdeš pár, musíš správne vysloviť slovo na
karte, aby ti bol bod uznaný.
<br><br> <br><br>
<span>Ovládanie postavy:</span><br> <span>Rečové cvičenie:</span><br>
Použi šípky na klávesnici alebo klávesy WASD na pohyb postavy po svete. Objaví sa slovo s obrázkom a ty ho musíš nahlas vysloviť. Klikni
Na vykopanie pokladu stlač medzerník. na tlačidlo mikrofónu a povedz slovo. Ak ho vyslovíš správne,
dostaneš zelenú fajku. Máš na to tri pokusy.
<br><br> <br><br>
<span>Drahokamy:</span><br> <span>Posluchové cvičenie:</span><br>
V hre sa vyskytujú 3 druhy drahokamov: Zlato, Diamant a Fialový Kryštál. Vypočuj si dva zvuky a rozhodni, či sú rovnaké alebo rôzne.
Na vykopanie diamantu musíš splniť rečové cvičenie. Na vykopanie kryštálu Klikni na správne tlačidlo.
zase posluchové cvičenie.
<br><br> <br><br>
<span>Ciele hry:</span><br> <span>Cieľ hry:</span><br>
Pokús sa nazbierať čo najviac pokladov v stanovenom čase. Každý typ Prejsť všetky levely, získať čo najviac hviezd a pritom sa
drahokamu ti prinesie iný počet bodov. Buď opatrný a užívaj si dobrodružstvo! zabaviť a zdokonaliť svoju výslovnosť. Veľa šťastia!
</p> </p>
</div> </div>
<div class="modal-arrow-down"></div> <div class="modal-arrow-down"></div>
@ -124,21 +129,36 @@
<div class="modal-arrow-up"></div> <div class="modal-arrow-up"></div>
<div class="modal-text-content"> <div class="modal-text-content">
<p> <p>
Baník Jožino je interaktívna logopedická hra vytvorená v rámci diplomovej práce. <strong>Baník Jožino</strong> je interaktívna logopedická platforma
vytvorená v rámci diplomovej práce. Je určená deťom s poruchami
výslovnosti, najmä vo veku do 8 rokov.
<br><br> <br><br>
<span>Cieľ:</span><br> <span>Cieľ projektu:</span><br>
Pomôcť deťom s rozvojom správnej výslovnosti a artikulácie pomocou hravých cvičení. Pomôcť deťom s rozvojom správnej výslovnosti hravou a motivujúcou
formou. Platforma je bezplatná a slúži ako doplnok k odbornej logopedickej
terapii, nie ako jej náhrada.
<br><br>
<span>Obsah platformy:</span><br>
16 tematických svetov podľa jednotlivých problémových hlások a
viac než 256 levelov naprieč dvoma rôznymi mini hrami:
Baník a Pexeso.
<br><br> <br><br>
<span>Technológie:</span><br> <span>Technológie:</span><br>
HTML5, CSS, JavaScript HTML5, CSS3, JavaScript, Web Speech API (rozpoznávanie reči),
Howler.js (zvuk), Canvas API (grafika)
<br><br> <br><br>
<span>Autor:</span><br> <span>Autor:</span><br>
Adam Reňak<br> Bc. Adam Reňak
<br><br>
<span>Vedúci práce:</span><br>
Ing. Renát Haluška, PhD.
<br><br>
<span>Univerzita:</span><br>
Technická univerzita v Košiciach<br> Technická univerzita v Košiciach<br>
Fakulta elektrotechniky a informatiky Fakulta elektrotechniky a informatiky
<br><br> <br><br>
<span>Rok:</span><br> <span>Rok:</span><br>
2025 2026
</p> </p>
</div> </div>
<div class="modal-arrow-down"></div> <div class="modal-arrow-down"></div>

View File

@ -93,7 +93,7 @@ function openModal(modal) {
modal.style.opacity = '0'; modal.style.opacity = '0';
setTimeout(() => { setTimeout(() => {
modal.style.opacity = '1'; modal.style.opacity = '1';
setupModalScrolling(); // Inicializuj scrollovanie setupModalScrolling(modal);
}, 10); }, 10);
} }
@ -113,13 +113,20 @@ function closeModal(modal) {
/** /**
* Nastavenie scroll funkcionalite pre modal obsah * Nastavenie scroll funkcionalite pre modal obsah
*/ */
function setupModalScrolling() { function setupModalScrolling(modal) {
const modalContent = document.querySelector('.modal-text-content'); // Ak nie je modal zadaný, fallback na celý dokument (pre spätnú kompatibilitu)
const arrowUp = document.querySelector('.modal-arrow-up'); const scope = modal || document;
const arrowDown = document.querySelector('.modal-arrow-down');
// 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; 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() { function updateArrows() {
const isAtTop = modalContent.scrollTop <= 5; const isAtTop = modalContent.scrollTop <= 5;
const isAtBottom = modalContent.scrollTop + modalContent.clientHeight >= modalContent.scrollHeight - 5; const isAtBottom = modalContent.scrollTop + modalContent.clientHeight >= modalContent.scrollHeight - 5;
@ -128,17 +135,28 @@ function setupModalScrolling() {
arrowDown.style.opacity = isAtBottom ? '0.3' : '1'; arrowDown.style.opacity = isAtBottom ? '0.3' : '1';
} }
// Scroll hore // 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() { arrowUp.addEventListener('click', function() {
modalContent.scrollBy({ top: -100, behavior: 'smooth' }); modalContent.scrollBy({ top: -100, behavior: 'smooth' });
}); });
// Scroll dole // Kliknutie na šípku dole - scrolluj obsah smerom nadol
arrowDown.addEventListener('click', function() { arrowDown.addEventListener('click', function() {
modalContent.scrollBy({ top: 100, behavior: 'smooth' }); modalContent.scrollBy({ top: 100, behavior: 'smooth' });
}); });
// Pri scrollovaní obsahu aktualizuj vizuálny stav šípok
modalContent.addEventListener('scroll', updateArrows); modalContent.addEventListener('scroll', updateArrows);
// Označ tento modal ako inicializovaný aby sa listenery nepridali znova
modalContent.dataset.scrollInitialized = 'true';
}
// Pri každom otvorení modalu aktualizuj stav šípok (nech sú vizuálne správne)
updateArrows(); updateArrows();
} }

View File

@ -3436,42 +3436,59 @@ function restartCurrentLevel() {
function goToNextLevel() { function goToNextLevel() {
console.log('Pokúsim sa prejsť na ďalší level...'); 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 urlParams = new URLSearchParams(window.location.search);
const worldId = urlParams.get('worldId') || urlParams.get('world'); const worldId = urlParams.get('worldId') || urlParams.get('world');
const levelId = urlParams.get('levelId') || urlParams.get('level'); 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) { 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(); returnToMenu();
return; return;
} }
// Použij gameRouter ak je dostupný // Skontroluj, či je funkcia getNextLevel vôbec dostupná (z config/levels.js)
if (window.gameRouter && typeof window.gameRouter.continueToNextLevel === 'function') { if (typeof getNextLevel !== 'function') {
closeAllDialogs(); console.error('Funkcia getNextLevel nie je dostupná - config/levels.js pravdepodobne nie je načítaný');
window.gameRouter.continueToNextLevel(worldId, levelId); returnToMenu();
} else { return;
// 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) { // 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(); closeAllDialogs();
window.location.href = `game.html?worldId=${worldId}&levelId=${nextLevelId}`;
} else { // Presmeruj na ďalší level so správnymi URL parametrami
console.log('Ďalší level neexistuje, vraciam sa do menu'); const nextUrl = `${targetUrl}?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`;
returnToMenu(); console.log(`Presmerovávam na ďalší level: ${nextUrl}`);
} window.location.href = nextUrl;
}
} else {
returnToMenu();
}
}
} }
////////////////////////////////////////////////// //////////////////////////////////////////////////

View File

@ -2051,24 +2051,57 @@ function restartCurrentLevel() {
function goToNextLevel() { function goToNextLevel() {
console.log('➡️ Prechod na ďalší level...'); console.log('➡️ Prechod na ďalší level...');
// Pre custom hry alebo demo - reštart // Pre custom hry alebo demo nie je ďalší level - len reštartuj aktuálny
if (currentLevel.id === 'custom' || currentLevel.id === 'demo') { if (currentLevel && (currentLevel.id === 'custom' || currentLevel.id === 'demo')) {
restartCurrentLevel(); restartCurrentLevel();
return; return;
} }
// Hľadanie ďalšieho levelu // Skontroluj, či je funkcia getNextLevel dostupná (z config/levels.js)
if (typeof getNextLevel === 'function') { 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); const nextLevel = getNextLevel(currentLevel.id);
if (nextLevel) {
window.location.href = `pexeso.html?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`; // Ak ďalší level neexistuje (posledný level sveta), vráť sa do menu
} else { if (!nextLevel) {
// Žiadny ďalší level - návrat do menu console.log(`Ďalší level po ${currentLevel.id} neexistuje - koniec sveta`);
returnToMenu(); returnToMenu();
return;
} }
} else {
// 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(); 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') { if (currentLevel.id === 'custom') {
// Pre custom hry návrat na index // Pre custom hry návrat na index
window.location.href = 'index.html'; window.location.href = 'worldsmenu.html';
} else { } else {
// Pre level hry návrat na worlds menu // Pre level hry návrat na worlds menu
window.location.href = 'worldsmenu.html'; window.location.href = 'worldsmenu.html';