Nie działa :(
Uncaught ReferenceError: down is not defined
at HTMLButtonElement.onclick (fiddle.jshell.net/:264)
fiddle.jshell.net/:264 Uncaught ReferenceError: down is not defined
at HTMLButtonElement.onclick (fiddle.jshell.net/:264)
fiddle.jshell.net/:265 Uncaught ReferenceError: up is not defined
at HTMLButtonElement.onclick (fiddle.jshell.net/:265)
fiddle.jshell.net/:266 Uncaught ReferenceError: left is not defined
at HTMLButtonElement.onclick (fiddle.jshell.net/:266)
fiddle.jshell.net/:267 Uncaught ReferenceError: right is not defined
at HTMLButtonElement.onclick (fiddle.jshell.net/:267)
Nei wiem jak działa, ale jeżeli działał u cb. To sam projekt jest spoko (jeżeli nie jest to n projekt FrontEndowy). Ale od strony jakości kodu: średnio).
- Brak rozdzielania zadań, zbytnio nie wiem gdzie to startuje. (Nikt tym nie zarządza). Poczytaj o modules.
- Powinno to stanowić jedną określoną całość zaczynającą się w jasnym punkcie kończąca się w konkretnym punkcie. Nie mogę tego znależć.
- Ja bym to napisał Tak:
- Scrable (moje ciało Applikacji) --> tu jest zarządzanie całą aplikacją.(Model)
- App (przekaż do modelu, co ma zrobić. Moje scrable)
- ConfigService (Z poziomu Scrable ładowanie konfiguracji projektu, budowa podstawowych obiektów np: item, htmlComponent);
- GameControlerService - Z poziomu Scrable, reaguj na zdarzenia (Scrable przekazuje referencje do gameControlerService. (tu masz wszelkie move itd...)
- RenderService ( buduje komponent htmlowy i wstrzeliwuje się w widok)
- Binding w kodzie HTML (mieszanie logiki z widokiem), jest to bardzo zły pomysł po drugie utrudnia to możliwości na przenoszenie kodu. (addEventListener poczytaj).
function Item(give_place,give_value){
this.place = give_place;
this.value = give_value;
this.append_item = function(give_place, give_value){
var item_cell = $('.grid-item').eq(give_place);
var put_to_html = '<div class="value value_'+give_value+'">'+give_value+'</div>';
item_cell.append(put_to_html);
}
- Jeżeli tworzysz obiekty, które stanowią najmniejszą logiczną postać jak item, nie powinen posiadać metody generującej html. Spójrz na to inaczej rzecz raczej nie potrafi tworzyć htmla? (tak jak piwo nie potrafi samo się napełniać a szkoda). Brakuje tu podziału dokładnie odzielające zadania dla kolejnych klas (np: render). Miesznie do tego jQuery zostawię bez komentarza. Do item powinen strzelać się kod, sam item nie powinen mieć dostępu do warstwy widoku. (Problem z przenośnością).
main_array = new Array(16);
- Nie deklaruj globalnych.
- A potem nagle rezygnujesz obiektowości na rzecz funkcji?
for(var i=0;i<16;i++){
if(main_array[i]==undefined){
moves+=1;
}
}
if(moves>0){
var random;
do{
random = Math.floor(Math.random() * 16);
if(main_array[random]==undefined){
main_array[random] = new Item(random,2);
main_array[random].append_item(random,2);
unique = true;
}
else{unique = false;}
} while (unique==false);
} else{
alert("kunic!");
}
- To by mogło być osobną metodą (funkcją), staraj się rozdzielać na mniejsze zadania, tam gdzie masz if to przekaż referencje do metody isGameOver jest bardziej jasne o co ci chodzi niż moves>0, dla mnie na pierwszy rzut nie jest jasne co robi, widzę że skończą się ruchy to koniec.
$(document).ready(function(){
random_new_item();
random_new_item();
})
- Spokojnie mgólbyś użyć document contentLoaded.
- Dobry przykład:
function left(){
move(12,-1,-4)
random_new_item();
}
- I to jest prawie dobry przykład wykorzystania funkcji. Tylko za bardzo nie wiem co to jest 12, -1 ,-4 warto b było je określić. Tym bardziej, ża są po wbijane stałe, czyli muszą być istotne.
Na pierwszy raz nie jest tak żle.