• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zrozumienie kodu Javascript - Sliding Puzzle

+1 głos
630 wizyt
pytanie zadane 9 czerwca 2022 w JavaScript przez Maciek273 Początkujący (450 p.)
zamknięte 9 czerwca 2022 przez Maciek273

Witam. Nie rozumiem pewnych linii w kodzie (kod nie jest mój, jest znaleziony w internecie i staram się go zrozumieć, dlatego niektóre części są pokomentowane). Mianowicie chodzi o tę funkcję. 

function checkAdjacentCell(id) {
    var flag = -1;
    const topCellId = parseInt(id) - type,
        bottomCellId = parseInt(id) + type,
        rightCellId = parseInt(id) + 1,
        leftCellId = parseInt(id) - 1;
    adjacentId = [topCellId, bottomCellId, rightCellId, leftCellId];

    if (adjacentId[2] % type == 0) {
        adjacentId[2] = -1;
    } 
	else if (adjacentId[3] % type == type - 1) {
        adjacentId[3] = -1;
    }
	
	//nowe puste pole
    for (let i = 0; i < adjacentId.length; i++) {
        if (adjacentId[i] <= type ** 2 - 1 && adjacentId[i] >= 0) {
            var cell = document.getElementById(adjacentId[i]);
            if (cell.className == "pusta") {
                flag = adjacentId[i];
            }
        }
    }
    return flag;
}

Rozumiem, że ma ona sprawdzać sąsiednią komórkę. Nie rozumiem natomiast dlaczego wartości const mają dodawane -type, +type. -1 i +1 przy prawej i lewej komórce rozumiem, że chodzi o poruszanie się komórke o jeden w lewo lub w prawo. Nie wiem czemu jednak proszuamy się o "type" w przypadku poruszania się w górę i dół.

komentarz zamknięcia: Udalo sie uzyskac odpowiedz
komentarz 9 czerwca 2022 przez VBService Ekspert (256,600 p.)

BTW, przy tym zapisie

 for (let i=0; i<(type*type)-1; i++){
    var cell = document.getElementById(i);
    if (cell.textContent == i+1) {...

nie da się wygrać  laugh, IMO chyba powinno byc tak

for (let i=1; i<(type*type); i++) {
    var cell = document.getElementById(i);
    if (cell.textContent == i) {...

 

komentarz 9 czerwca 2022 przez Maciek273 Początkujący (450 p.)
Sprawdziłem na twoim kodzie i nie da się wygrać. Poprzedni działa prawidłowo. Tu chyba chodzi o indeksy każdej komórki, więc od 0 do 15
1
komentarz 9 czerwca 2022 przez VBService Ekspert (256,600 p.)

Sugerowałem się, że id=0 to class="pusta",
a dalej id=1 class="cell", id=2 class="cell", ... itd.  laugh

komentarz 9 czerwca 2022 przez Maciek273 Początkujący (450 p.)
Bo ta pętla chyba przechodzi od 0 do 14 i przy 14 dodaje 1 i wtedy mamy na id = 15 mamy pusta komorke. Tak przynajmniej ja to rozumiem :)

2 odpowiedzi

+2 głosów
odpowiedź 9 czerwca 2022 przez doublechess Obywatel (1,300 p.)
wybrane 9 czerwca 2022 przez Maciek273
 
Najlepsza
Góra minus typ.

Dół plus typ.

ID - 1, ID - 2, ID - 10

ID + 1, ID + 2, ID + 10
1
komentarz 9 czerwca 2022 przez VBService Ekspert (256,600 p.)
id0 id1 id2 id3 % type == type - 1 
id4 % type == 0     id7 % type == type - 1
id8 % type == 0     id11 % type == type - 1
id12 % type == 0     id15 % type == type - 1

% type == 0 - lewa krawędź

 % type == type - 1 - prawa

2
komentarz 9 czerwca 2022 przez doublechess Obywatel (1,300 p.)
Napisałem swój kod na podstawie "swojej" definicji, a nie z Twojego rysunku.
2
komentarz 9 czerwca 2022 przez VBService Ekspert (256,600 p.)
cells = [
    id0,   id1,    id2,   id3,
    id4,   id5,    id6,   id7,
    id8,   id9,  id10, id11,
   id12, id13, id14, id15
]
1
komentarz 9 czerwca 2022 przez doublechess Obywatel (1,300 p.)
No okey. Jeśli tak miałoby być, to masz rację. Leci plus.
2
komentarz 9 czerwca 2022 przez Maciek273 Początkujący (450 p.)
Super, dziękuje wam za pomoc i za zrozumienie pewnych rzeczy. Pozdrawiam :D
+2 głosów
odpowiedź 9 czerwca 2022 przez VBService Ekspert (256,600 p.)
edycja 9 czerwca 2022 przez VBService

type = 4

komentarz 9 czerwca 2022 przez Maciek273 Początkujący (450 p.)
Dzięki, już to rozumiem :)

Podobne pytania

0 głosów
0 odpowiedzi 110 wizyt
pytanie zadane 31 sierpnia 2019 w JavaScript przez bezNicku Nowicjusz (170 p.)
–1 głos
0 odpowiedzi 143 wizyt
pytanie zadane 16 maja 2019 w JavaScript przez Info Nowicjusz (140 p.)
+1 głos
1 odpowiedź 319 wizyt
pytanie zadane 29 sierpnia 2019 w Nasze projekty przez kodowiec Początkujący (410 p.)

93,604 zapytań

142,529 odpowiedzi

322,995 komentarzy

63,090 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...