Latley Pracuję nad projektem szkolnym i muszę przedstawić algorytm, który jest w moim przypadku algorytmem rozwiązywania zagadkowych wież Hanoi. Ze względu na moją znajomość HTML/CSS pomyślałem, że byłoby całkiem fajnie używać tych + Javascriptów do wizualizacji kroków na stronie.Wizualizacja algorytmu wież Hanoi w JavaScript
Mam skonfigurowaną witrynę oraz podstawowy, rekurencyjny algorytm.
function move(n, beg, aux, end) {
if (n == 1) {
console.log(beg + '-->' + end + '\n');
setTowers(beg, end);
} else {
move(n - 1, beg, end, aux);
move(1, beg, aux, end);
move(n - 1, aux, beg, end);
}
}
Układ strony (kod CSS przyzwyczajenie pomóc tutaj):
section#main-app
.app-wrapper
.tower-wrapper
.tower#twr--a
.block.blck--top
.block.blck--middle
.block.blck--bottom
.tower#twr--b
.block.blck--top
.block.blck--middle
.block.blck--bottom
.tower#twr--c
.block.blck--top
.block.blck--middle
.block.blck--bottom
Potem zacząłem walczyć jak musiałem jakoś wizualizację. Pomyślałem o umieszczeniu każdej wieży w tablicy:
var twrElemsA = document.getElementById('twr--a').getElementsByClassName('block');
towerA = jQuery.makeArray(twrElemsA);
Następnie funkcja do faktycznego ustawienia koloru. 2 rzeczy w tej chwili: nie będzie w razie potrzeby wymazywać koloru i nie będzie w ogóle ustawiał koloru, ponieważ zawiodłem instrukcję switch/nie wiem, jak to zrobić.
function setColors(target) {
target.forEach(function (element) {
switch (element) {
case '<div class="block blck--top">':
$(element).css({
'background-color': 'red'
});
break;
case '<div class="block blck--middle">':
$(element).css({
'background-color': '#51616F'
});
break;
case '<div class="block blck--bottom">':
$(element).css({
'background-color': '#394B5A'
});
break;
}
});
}
Teraz, gdy funkcja zwraca na przykład ruch A -> B, setColors powinien następnie iteracyjne nad TowerB i ustawić kolory tła wszystkich trzech bloków do konkretnego koloru. Ale instrukcja switch nie działa i brakuje mi pomysłów i czasu, który jest dewastującym połączeniem.
Może ktoś wie, co może pomóc tutaj. Doceniam każdą pomoc!
Pozdrawiam ..
Przełącznik nie będzie działać, ponieważ porównujesz elementy z ciągami. Zamiast tego możesz rozważyć użycie 'if-else' i sprawdzić czy istnieje klasa:' $ (element) .hasClass ('blck - top') '. –