[JS Applications] Домашно Web Storages


8
Условие на задачата: 
 
Create a simple number guessing game
­The computer generates a random number with four different digits
­The leftmost digit must not be 0 (zero)
­For simplicity called abcd
­At each turn the player enters a four-digit number
­For simplicity called xyzw
­When the game ends:
­Ask the player for a nickname
­Save the nickname inside the localStorage
­Implement a high-score list
­Sheep means that a digit from xyzw is contained in abcd, but not on the same position
­If two such digits exists, the sheep are 2
­Ram means that a digit from xyzw is contained in abcd and it is on the same position
­If two such digits exists, the rams are 2
­The game continues until the player guesses the number abcd
­i.e. has 4 rams

Source

Demo

Играта е проста. Играчът въвежда четири числа и очаква отговор от системата колко овце и овни е уцелил. 

Направил съм ограничение на въвеждането до 4 символа, които да са само числа. Генерирам си 4-цифрено число и с два алгоритъма сравнявам дали играчът има овни и/или овце и ги изписвам, като според мен едно и също число не може да се брои за овен и овца едновременно. Затова вадя от овцете овните при принтирането (условието мълчи по въпроса). През това време броя опитите на играча. При налучкано число го питам за никнейм, пазя го в localstorage, сортирам информацията от localstorage до момента по стойност на ключовете и принтирам резултата.




Отговори



3

Ето и моята задача - ЛИНК | DEMO

Далеч не изглежда толкова изпипана както на колегата, но съм оставил списък с опитите на потребителя и давам възможност да продължи стара игра която е започнал, но евентуално не е завършил, както и едно бутонче с което да изчисти localStorage по желание.

При продължаването на играта зареждам информацията за предишната игра и визуализирам отново старата игра.


от Plamen_Petkov (1255 точки)


3

@Stoyan Stoyanov 1 Това не би трябвало да е възможно :)

Game


от dzhenko (3893 точки)


0
Не твърдя, че няма бъгове играта, но е за целите на домашното все пак и не съм навлизал в излишни подробности. Честно казано не знам как се е получило. Ако искаш, погледни алгоритъма, не съм убеден, че е сто процента коректен, но изхождах от логиката, че първо проверява за овни, след това за овце, като ги изважда, за да не се препокриват. Между другото при стартирана нова игра изписвам в конзолата генерираното от системата число, така че можеш да провериш кое е и да разгадаем по-лесно къде е бъгът.

от SStoyanov1 (1324 точки)


2

@Stoyan Stoyanov 1, имаш малък пропуск при изчисляването на биковете и кравите. Нужно е, когато откриеш бик да го маркираш по някакъв начин, за да не го отчита занапред, защото в противен случай при броенето на кравите ще го преброи наново. Същото се отнася и за кравите, когато откриваш такава, защото при повтарящи се цифри вероятно ще ги брои по няколко пъти.


от stinger907 (307 точки)


0
Объркал си нещо игрите, тук си говорим в овце и овни :D А иначе сериозно, биковете няма как да ги отчита повече от веднъж, защото сравнява дали първото число от входа е равно на първото от генерираното число, после второто от входа с второто от генерираното и така нататък. Алгоритъмът за овцете определено не е съвършен, но приемам предложения.

от SStoyanov1 (1324 точки)

0
Имам предвид, че в този си вид е възможно бикът(овенът) да бъде отчетен и като крава(овца) при броенето на овцете.

от stinger907 (307 точки)



2

Ето и едно вариантче и от мен, като имам още малко да довърша, но мисля, че алгоритъма за овцете и кочовете (мда) ми е верен, ако на някой му трябва може да си го вземе направо, тъй като идеята на задачата е да се упражнят Web Storegе-ите. Имам още съвсем малко работа по-него и ще е готово.

В конструктура на играта има параметър cheatEnabled, оставил съм го включен и логва търсения резултат в конзолата (направих го с тестови цели).

DEMO

SOURCE


от dimo.petrof (2887 точки)


0
Димо, когато познаеш отговора, ако не refresh-неш страницата можеш да продължиш да пълниш high-score таблицата с един и същ резултат. Не знам дали си го направил така by design, аз реших да го променя това и сложих един location.reload() след като се намери верния отговор.

от NasC0 (489 точки)

0
Мерси Наско. Видях, го ама вече не ми се занимаваше (че беше бая занимавка). Ама сега като каза, ще взема да си го оправя :)

от dimo.petrof (2887 точки)


3

Ето едно решение и от мен. При зареждане на DOM-а закачам евентите и другото си е стандартно.




2

https://github.com/slav40o/SheepAndRams

Ето и от мен едно решени. Визуално не е много добре, но по-самото домашно е ScoreBoard модула, който запазва резултата и името на играча. Опитах да вмъкна каквото сме учили досега ако някой има някакви препоръки, моля да сподели :) .Най-общо ползвам RequireJs, Handlebars, jQuery и underscore, като в самата игра има един енджин, който използва ScoreBoard да запазва резултатите в localStorage; Renderer, който визуализира върху канваса, DomManipulator, който да вмъква нужните неща динамично в страницата(резултатите и направените предположения) и в main.js закачам евентите, които извикват методи от енджина. Броенето на овните е ясно. При овците хващам една цифра от числото на играча и я сравнявам с тези на тайното число, ако не са на една позиция и тази позиция не е зачетена като овен добавям една овца. Мисля, че така горе долу работи.




6

Оф бая се заиграх днес - голяма зарибявка е тоя javascript.
Утре ще хвана да рефакторирам кода, че малко е мазало, и има някой неща да се дооправят. Иначе мисля, че стана фън.

Реално localStorage-a се оказа доста малка част от заданието. Иначе съм го направил да ми записва userите като JSON в всеки път си ги чета. Трябваше да ползвам JQuery за да стане по-бързо, но си мислех, че и с Javascript ще стане - то става ама е повечко писане.

DEMO | CODE

Най-вероятно има бъгове - за това я пускав тука за да кажете ако има нещо да го фикснем.

ПП: Ако запънете с числото натиснете F12


от nzhul (3415 точки)


0
Колега, много красиво си го направил, сега като погледна моето и ми става тъпо :) Ама аз си знам, че не съм дизайнер, но на теб видимо дизайна ти се отдава :)

от dimo.petrof (2887 точки)


3

DEMO SOURCE




 

 

 

 

 

 

Число не може да се повтаря и 0-та няма как да е на първа позиция. Има и опция за предаване, за да може по-бързо да се проверява дали работи коректно. Фонът е мн смотан, ама не ми се търсиха картинки :d


от valentin_lozev (1012 точки)


2

Задачата я написах на чист Javascript. Имам бутони за изчистване на top-score класацията (изчиства localStorage), за показване и скриване на класацията и за започване на нова игра. При познато число трябва да се въведе nickname. Класацията я сортирвам след всеки въведен nickname.

Demo

Source


от teleriknetwork (2734 точки)


17

от d.kostov88 (1086 точки)


0
Играта е много готина, но защо не даваш да се повтарят цифри?

от dimo.petrof (2887 точки)

0
Принципно оригиналната игра Бикове и крави е така :) Само където сега идеята ми с показване на истински овци и овни не изглежда толкова оригинална :(

от penjurov (1466 точки)