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