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: {
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: [

View File

@ -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,

View File

@ -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;
}

View File

@ -175,7 +175,7 @@
<ul>
<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="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>
</nav>
</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="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="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>
</nav>
</div>
@ -82,34 +82,39 @@
<div class="modal-arrow-up"></div>
<div class="modal-text-content">
<p>
Vitaj v hre Baník Jožino! Tvojou úlohou je preberať rolu odvážneho baníka a
hľadať vzácne poklady ukryté v hlbokách podzemnej jaskyne.
Vitaj v platforme <strong>Baník Jožino</strong>! Ide o logopedickú hru,
v ktorej si hravou formou precvičíš slovenské hlásky a slová.
<br><br>
<span>Ovládanie postavy:</span><br>
Použi šípky na klávesnici alebo klávesy WASD na pohyb postavy po svete.
Na vykopanie pokladu stlač medzerník.
<span>Svety a levely:</span><br>
Platforma obsahuje 16 tematických svetov, každý zameraný na inú
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>
<span>Drahokamy:</span><br>
V hre sa vyskytujú 3 druhy drahokamov: Zlato, Diamant a Fialový Kryštál.
Na vykopanie diamantu musíš splniť rečové cvičenie. Na vykopanie kryštálu
zase posluchové cvičenie.
<span>Mini hra Baník:</span><br>
Si odvážny baník a hľadáš poklady v podzemí. Pohybuješ sa pomocou
šípok alebo klávesov WASD a kopeš medzerníkom. V hre nájdeš tri druhy
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>
<span>Ciele hry:</span><br>
Pokús sa nazbierať čo najviac pokladov v stanovenom čase. Každý typ
drahokamu ti prinesie iný počet bodov. Buď opatrný a užívaj si dobrodružstvo!
<span>Mini hra Pexeso:</span><br>
Klasické pexeso, ale s obrázkami slov. Otáčaj karty a hľadaj
rovnaké dvojice. Keď nájdeš pár, musíš správne vysloviť slovo na
karte, aby ti bol bod uznaný.
<br><br>
<span>Ovládanie postavy:</span><br>
Použi šípky na klávesnici alebo klávesy WASD na pohyb postavy po svete.
Na vykopanie pokladu stlač medzerník.
<span>Rečové cvičenie:</span><br>
Objaví sa slovo s obrázkom a ty ho musíš nahlas vysloviť. Klikni
na tlačidlo mikrofónu a povedz slovo. Ak ho vyslovíš správne,
dostaneš zelenú fajku. Máš na to tri pokusy.
<br><br>
<span>Drahokamy:</span><br>
V hre sa vyskytujú 3 druhy drahokamov: Zlato, Diamant a Fialový Kryštál.
Na vykopanie diamantu musíš splniť rečové cvičenie. Na vykopanie kryštálu
zase posluchové cvičenie.
<span>Posluchové cvičenie:</span><br>
Vypočuj si dva zvuky a rozhodni, či sú rovnaké alebo rôzne.
Klikni na správne tlačidlo.
<br><br>
<span>Ciele hry:</span><br>
Pokús sa nazbierať čo najviac pokladov v stanovenom čase. Každý typ
drahokamu ti prinesie iný počet bodov. Buď opatrný a užívaj si dobrodružstvo!
<span>Cieľ hry:</span><br>
Prejsť všetky levely, získať čo najviac hviezd a pritom sa
zabaviť a zdokonaliť svoju výslovnosť. Veľa šťastia!
</p>
</div>
<div class="modal-arrow-down"></div>
@ -124,21 +129,36 @@
<div class="modal-arrow-up"></div>
<div class="modal-text-content">
<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>
<span>Cieľ:</span><br>
Pomôcť deťom s rozvojom správnej výslovnosti a artikulácie pomocou hravých cvičení.
<span>Cieľ projektu:</span><br>
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>
<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>
<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>
Fakulta elektrotechniky a informatiky
<br><br>
<span>Rok:</span><br>
2025
2026
</p>
</div>
<div class="modal-arrow-down"></div>

View File

@ -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();
}

View File

@ -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;
}
//////////////////////////////////////////////////

View File

@ -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';