• 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

Object Storage Arubacloud
+1 głos
235 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 (254,260 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 (254,260 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 (254,260 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 (254,260 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 (254,260 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 74 wizyt
pytanie zadane 31 sierpnia 2019 w JavaScript przez bezNicku Nowicjusz (170 p.)
–1 głos
0 odpowiedzi 105 wizyt
pytanie zadane 16 maja 2019 w JavaScript przez Info Nowicjusz (140 p.)
+1 głos
1 odpowiedź 208 wizyt
pytanie zadane 29 sierpnia 2019 w Nasze projekty przez kodowiec Początkujący (410 p.)

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...