Вот зачем я люблю ваши уроки все понятно,кратко и доходчиво! Огромное спасибо за вашу работу))
@natalia_24273 жыл бұрын
С удовольствием просмотрела видео, и вспомнились слова Эйнштейна: "Если вы что-то не можете объяснить 6-летнему ребёнку, вы сами этого не понимаете". Спасибо Вам огромное за проделанную работу :)
@andrewgrechukh3139 Жыл бұрын
Чтобы при повторном щелчке не менялся знак с Х на О или наоборот: нужно на 10 сроке добавить проверку && event.target.innerHTML == '' потом после єтого if на 19 строке написать else return;
@disenk_ Жыл бұрын
Спасибо
@ruthplett4976 Жыл бұрын
Спасибо большое!
@ivand72996 жыл бұрын
Спасибо из 2к18! Не понимаю почему у такого преподавателя так мало просмотров...
@vitaliypodolyak32472 жыл бұрын
Отлично, столкнулся с похожей задачей, просто для себя мини страничку делаю и тут нашел решение и моей проблемы )
@kiminomeha4 жыл бұрын
Мне кажется, в вашей игре есть баг: можно нажать два раза по одной клетке и нолик можно будет заменить крестиком
спасибо огромное!) реально круто !.. и очень хороший педагог!!
@abuz1r Жыл бұрын
спасибо самый годный туториал
@motivatorden89973 жыл бұрын
Отлично объясняете !!!Благодарю
@waldo_7 жыл бұрын
Думал,как можно этот код сократить.Пока что придумал тольк одно. Мы пишем функцию,которая принимает параметр(x или 0) и проверяет горизонтали,вертикали и диагонали,а затем в том месте,где мы рисуем крестик или нолик,вызываем эту функцию с нужным параметром.И вроде как не нужно для крестика и нолика отдельные условия писать) Больше пока что ничего умного в голову не пришло) Ну правда,какой то огромный код получился,хоть это и игра с такой хорошей логикой) Так же не нужно забывать о таком исходе,как ничья.Но даже без учета этого информативный урок получился.
@englishtogether65063 жыл бұрын
Thanks for the explanation, although the game doesn't work properly,what about the draw ? And while clicking at the same cell twice it's changing from 0-X or vise versa instead of writing an error.
@runcode.ru.6 жыл бұрын
Отличные уроки , с удовольствием смотрю и вникаю в js. Удачи Вам и по больше подписчиков++; Спасибо!
@ТарасМильченко6 жыл бұрын
Здравствуйте, ладно с повторным кликом на одну и ту же ячейку это уже нюанс, но почему нету исхода для ничьи это ведь обязательное условие для игры!? и нужно учитывать тот нюанс что ничья может наступить раньше чем будут заполнены все ячейки!
@Детишки-з2н5 жыл бұрын
спасибо Вам за видео урок. Все понятно и очень просто.
@Детишки-з2н5 жыл бұрын
Недавно добавила в Ваш код условия когда "Ничья", сделала кнопку перезагрузки. Чтоб можно было в конце обновить и играть заново и немного сократила Ваш код, как-то вот так: if (allblock[3].innerHTML=='x' && allblock[4].innerHTML=='x' && allblock[5].innerHTML=='x'|| allblock[3].innerHTML=='x' && allblock[4].innerHTML=='x' && allblock[5].innerHTML=='x'|| allblock[6].innerHTML=='x' && allblock[7].innerHTML=='x' && allblock[8].innerHTML=='x'|| allblock[0].innerHTML=='x' && allblock[3].innerHTML=='x' && allblock[6].innerHTML=='x'|| allblock[1].innerHTML=='x' && allblock[4].innerHTML=='x' && allblock[7].innerHTML=='x'|| allblock[2].innerHTML=='x' && allblock[5].innerHTML=='x' && allblock[8].innerHTML=='x'|| allblock[0].innerHTML=='x' && allblock[4].innerHTML=='x' && allblock[8].innerHTML=='x'|| allblock[2].innerHTML=='x' && allblock[4].innerHTML=='x' && allblock[6].innerHTML=='x') alert('Победили крестики'); P.S. Это конечно не большое сокращение, но мне кажется, что его еще можно сократить. Но я покамись новичок только недавно изучаю JS . Если придумаю как и оно будет работать без ошибок может быть поделюсь.
@anixi857 жыл бұрын
не хило конечно. код понятен, но самому до такого дойти крайне трудно
@itgid7 жыл бұрын
Ну поэтому и видео выкладываю.
@anixi857 жыл бұрын
Front-End разработка с нуля. HTML, CSS, jQuery спасибо! Больше всего интересуют практические задачи как этот урок
@ukraine_on_fire5266 жыл бұрын
Отличная игра! Хотелось бы ещё "Сапера" в очень упрощенном варианте. Спасибо.
@theroga69484 жыл бұрын
Привет не знаю ответишь ты или нет, но у меня вопрос нельзя ли все то "function checkWinner" не записывать как ты а засунуть все в циклы ?. Просто я сейчас делаю тоже самое и хочется засунуть в циклы этот момент
@vladdd21646 жыл бұрын
Код на jquery c проверкой на ничью, запрещением нажатия на одно поле несколько раз и отсрочкой результата, т.к. последний крестик или нолик в коде автора не успевают появится $(document).ready(function(){ var hod = 0; $('.block').click( function(){ if(hod % 2 == 0){ $(this).html('X'); hod++; $(this).css("pointer-events", "none"); } else{ $(this).html('0'); hod++ $(this).css("pointer-events", "none"); } checkWinner(); checkDraw(); }); function checkWinner(){ var allblock = $('.block'); if ($(allblock[0]).text()=='X' && $(allblock[1]).text()=='X' && $(allblock[2]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[3]).text()=='X' && $(allblock[4]).text()=='X' && $(allblock[5]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[6]).text()=='X' && $(allblock[7]).text()=='X' && $(allblock[8]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[0]).text()=='X' && $(allblock[3]).text()=='X' && $(allblock[6]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[1]).text()=='X' && $(allblock[4]).text()=='X' && $(allblock[7]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[2]).text()=='X' && $(allblock[5]).text()=='X' && $(allblock[8]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[0]).text()=='X' && $(allblock[4]).text()=='X' && $(allblock[8]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[2]).text()=='X' && $(allblock[4]).text()=='X' && $(allblock[6]).text()=='X') {setTimeout (function(){alert('Победили крестики'); $('.block').html('').css("pointer-events", "auto");}, 300);} //нолики if ($(allblock[0]).text()=='0' && $(allblock[1]).text()=='0' && $(allblock[2]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[3]).text()=='0' && $(allblock[4]).text()=='0' && $(allblock[5]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[6]).text()=='0' && $(allblock[7]).text()=='0' && $(allblock[8]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[0]).text()=='0' && $(allblock[3]).text()=='0' && $(allblock[6]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[1]).text()=='0' && $(allblock[4]).text()=='0' && $(allblock[7]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[2]).text()=='0' && $(allblock[5]).text()=='0' && $(allblock[8]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[0]).text()=='0' && $(allblock[4]).text()=='0' && $(allblock[8]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} if ($(allblock[2]).text()=='0' && $(allblock[4]).text()=='0' && $(allblock[6]).text()=='0') {setTimeout (function(){alert('Победили нолики'); $('.block').html('').css("pointer-events", "auto");}, 300);} } function checkDraw(){ var heights = []; $(".block").each(function(indx){heights.push($(this).text());}); //console.log(heights); if (heights[8]!='' && heights[7]!='' && heights[6]!='' && heights[5]!='' && heights[4]!='' && heights[3]!='' && heights[2]!='' && heights[1]!='' && heights[0]!=''){ setTimeout (function(){alert('Ничья'); $('.block').html('').css("pointer-events", "auto");}, 500); } } });
@olegonkos5 жыл бұрын
ваш вариант не работает у меня. Я тупо скопировал ваш код и вставил в новый документ 2.js и подключил в html (jquery подключен)
@holdongang62626 жыл бұрын
После этого урока закипел мозг =) очень круто, спасибо за труд!
@АрманТуреханов-й3с2 жыл бұрын
Подскажите пожалуйста, как можно сделать вместо even.target.innerHTML = 'x' либо = 'y'; можно было поставить div со своими данными;
@Nadezhda-we2bc Жыл бұрын
Хороший урок
@NamelessG0D6 жыл бұрын
Доброго времени суток. Отличный урок для начала изучения, все доступно. Но есть 1 вопрос как прикрутить вместо Х и О к примеру картинки var ximg = new Image(); var oimg = new Image(); ximg.src = "x.png"; oimg.src = "o.png"; так сказать для красоты P.S. Возможно так не есть хорошо но для перезапуска alert('Победили крестики', location.reload()); вроде работает
@alexandralexandrovich7337 жыл бұрын
Если хотите потренировать умения, то напишите элементарный ИИ для этой игры. Например, чтобы ИИ не делал ошибочных ходов. Почитайте Вики по поводу игры. Очень помогает размять мозг и закрепить знания.
@artavazdyeghiazaryan71346 жыл бұрын
что такое Вики ?
@ivanz91696 жыл бұрын
вика
@gigman6 жыл бұрын
Wikipedia : wiki
@tolmach_y5 жыл бұрын
Спасибо огромное за урок! Все супер, объясняете понятно. У меня такой вопрос, вот я смотрю уже много ваших видел вы подключаете js либо с помощью defer, либо с помощью window.onload, но при этом все время подключаете js в html только в head. В большинстве своем другие спикеры советуют подключать script внизу страницы. Я лазила по сайтам в инете, смотрела их код, там тоже script подключен внизу. Есть принципиальные отличия? Плюсы, минусы этих способов?
@qwerty65094 жыл бұрын
А повторный клики?
@ІгорОлександровичКропивний2 жыл бұрын
Спасибо большое)))))))))))))))))
@midnightstar_zoriana Жыл бұрын
мне при выполнении домашних работ в скиллбоксе на вопросы по модулям джс отвечали в чате общем по верстке.. а в чате по джс или тишина, или ответ на том уровне, на котором я его еще не могу понять без словаря.. при прохождении верстки хоть ответы в телеге реально было дождаться.. случайно нашла из каких-то ютубовских видео чат для учеников (не скиллбокса, а кого-то другого) -- учиться я к ним не пошла, но в чат вступила, а вот вопросы со криншотами или архивами кидаю - там отвечают почти СРАЗУ!!!!!!!!!!!! БЕСПЛАТНО!!!!!!!!!!! почему в моем родном оплаченном скиллбоксе этого НЕТ????!!!!!!
@dimageorgiev57987 жыл бұрын
Спасибо :) !
@itgid7 жыл бұрын
Пожалуйста.
@welasco22872 жыл бұрын
Есть идеи как оптимизировать логику проверки победителя?
@arthurpetrosyan63233 жыл бұрын
все круто огромное спасибо объяснил все понятно но у меня только один вопрос как объявить ни чью?
@СергейФомин-ъ5ж6 жыл бұрын
Спасибо . Все круто.
@KosTHB13 жыл бұрын
Гениально
@artavazdyeghiazaryan71346 жыл бұрын
Спасибо
@Game-oz6gg3 жыл бұрын
Надо такую игру написать, чтобы второй ход делал компьютер.. Автоматически А то получается, что сам с собой играешь
@axpers996 жыл бұрын
Реализация данного кода без массивов за 13 строк js (вместо дивов использованы таблицы) var a = "X", win = false, td = document.querySelectorAll("td"); document.onclick = function(e) { if (win == true || event.target.innerText !== "") return; event.target.innerText = a; if (td[0].innerText == a && td[1].innerText == a && td[2].innerText == a || td[3].innerText == a && td[4].innerText == a && td[5].innerText == a || td[6].innerText == a && td[7].innerText == a && td[8].innerText == a || td[0].innerText == a && td[3].innerText == a && td[6].innerText == a || td[1].innerText == a && td[4].innerText == a && td[7].innerText == a || td[2].innerText == a && td[5].innerText == a && td[8].innerText == a || td[0].innerText == a && td[4].innerText == a && td[8].innerText == a || td[6].innerText == a && td[4].innerText == a && td[2].innerText == a) return alert(a + " Win's!!!"), win = true; (a == "X") ? a = "0" : a = "X"; } В основном сэкономлено на переменных, { } и на if else.
@__hovhannisyan__22307 жыл бұрын
а как ты сделаешь так какую клавиш нажимаешь что из например #game сделает div c ид game?
@itgid7 жыл бұрын
Уточни?
@xvivs7 жыл бұрын
это плагин Emmet для редактора кода, нажимает клавишу Tab :)
@alsagir876 жыл бұрын
У меня новичковые вопросы. Я заметил в роликах на ютубе везде используют var. Хотя давно уже есть let и const. Это дело в привычке или же есть какие то подводные камни у let и const? Я понимаю ,что в конкретном в примере в принципе не важно будут здесь var или let.
@itgid6 жыл бұрын
Это старые ролики, здесь используется синтаксисл ES5. В новых роликах - практически везде ES6. let и var отличаются областями видимости.
@alsagir876 жыл бұрын
Большое спасибо! Базово я понимаю чем они отличаются. Я недавно начал изучать JS и в частности программирование. Просто меня смутило, что в роликах(не только у вас, а практически везде на ютубе) используют var, вот и подумал, что может есть какой подвох и что лучше использовать var. В общем спасибо за разьяснение :)
@webdev51076 жыл бұрын
Aleksandr Kostromskiy, у дмитрия лаврика(надеюсь не сочтут за рекламу) есть вебинар на тему ес6 где описывает камни и плюшки) пару часиков под чаёк или перед сном норм посмотреть. а так.. уроки в основном старые на ютубе, как и код с которым работают фронты. не всегда пишут новый, часто это переделки старого. а там сплошные var'ы полюбому) да даже флексы не все пользуют, хотя, казалось бы, поддерживается уже год точно везде.. но эти уроки пока самые свежие и лучшие на рутубе точно, на зарубежном хз. не хватает английского ибо понимать нужно прям 100% текста)
@itgid6 жыл бұрын
И привычки, меняться тяжело, хотя и нужно и то что чаще всего старый код поддерживаешь. А так - это видео изначально делалось для студентов, которым нужно было просто основы js дать максимально просто. Поэтому здесь упор на понимание логики.
@anonymoustv16305 жыл бұрын
А у вас есть уроки по gamedev-у то есть по таким элементам как canvas и.т.д буду ждать ответа
@itgid5 жыл бұрын
нет, мне эта тема не очень интересна!
@anonymoustv16305 жыл бұрын
@@itgid жалко конечно ну хотя-бы за ответ спасибо
@anonymoustv16305 жыл бұрын
@@itgid неужели хотя-бы по основам работы по canvas нету
@itgid5 жыл бұрын
@@anonymoustv1630 По канвасу есть - смотрите javascript.kiev.ua/
@ВаганВосканчн6 жыл бұрын
А как можно делать динамический кристик нолик? К примеру 100×100 , и чтоб играли user и computer .
@maxgold15395 жыл бұрын
от души бро
@SashaPleshevich7 жыл бұрын
спасибо!
@ВасилийВихляев-р4р7 жыл бұрын
Подскажите пожалуйста как реализовать проверку на занятость блока?
@itgid7 жыл бұрын
Первый вариант - что-то в него записать, второй вариант добавить ему атрибут и читать атрибут.
@АндрейКонончук-н2ц7 жыл бұрын
if (event.target.className == 'block' && event.target.textContent == "") И так можно!
Подскажите как привязать например кнопку "Restart", чтоб при клике все вернулось в начальную позицию. Спасибо
@sergionazarov8146 жыл бұрын
Просто создай новую кнопку, в js получи эту кнопку и создай функцию при клике на кнопку, чтобы оно например перезаписывало во все блоки пустую строку
@arqikari26844 жыл бұрын
@@sergionazarov814 или что бы просто пере запускала страницу
@ВячеславИванов-в8г6 жыл бұрын
получается что при победе последний выбранный крестик или нолик не отрисовывается, а вместо этого выскакивает сообщение и только потом при нажатии ок отрисовывается последний выбранный в клетке нолик(крестик). Как сделать чтобы вначале отрисовывался последний выбранный элемент а потом уже выскакивало сообшение о победе?
@itgid6 жыл бұрын
Изменить порядок проверки. Вначале отрисовка, затем проверка.
@ВсеволодПротопопов6 жыл бұрын
можете объяснить по подробнее?
@voltamper966 жыл бұрын
Я использовал setTimeout что бы запустит функцию проверки с опаданием.. 1-ms и больше. Я не мог добиться по другому. Не успевает записать Х задержка 1ms хватило что бы успеет.
@ИгорьГроховский-и9с5 жыл бұрын
Ну, сократил хоть и не сильно, но пару строк точно) for(var i = 0; i < 8; i++){ if(blocks[i].innerHTML == "x" && blocks[i+1].innerHTML == "x" && blocks[i+2].innerHTML == "x") alert("Выиграли крестики"); if(blocks[i].innerHTML == "x" && blocks[i+3].innerHTML == "x" && blocks[i+6].innerHTML == "x") alert("Выиграли крестики"); if(blocks[i].innerHTML == "x" && blocks[4].innerHTML == "x" && blocks[i+8].innerHTML == "x" || blocks[i+2].innerHTML == "x" && blocks[4].innerHTML == "x" && blocks[i+6].innerHTML == "x" ) alert('Выиграли крестики'); if(blocks[i].innerHTML == "0" && blocks[i+1].innerHTML == "0" && blocks[i+2].innerHTML == "0") alert("Выиграли нолики"); if(blocks[i].innerHTML == "0" && blocks[i+3].innerHTML == "0" && blocks[i+6].innerHTML == "0") alert("Выиграли нолики"); if(blocks[i].innerHTML == "0" && blocks[4].innerHTML == "0" && blocks[i+8].innerHTML == "0" || blocks[i+2].innerHTML == "0" && blocks[4].innerHTML == "0" && blocks[i+6].innerHTML == "0" ) alert('Выиграли нолики); }
@itgid5 жыл бұрын
Круто, если не сложно - выложите на codepen - и дайте ссылку, будет удобнее!
@watchbotzz7 жыл бұрын
Лайк + подписка! Будут ли еще уроки по ДжС?
@itgid7 жыл бұрын
Да будут. Сейчас планирую войти в русло Вторник - Четверг - Суббота. ПО уроку.
@andrujjjkeee5 жыл бұрын
Я понимаю что звук пишешь на мак, но блин, часы убрать надо было...тикают так громко))))
@pavlodovbush23407 жыл бұрын
я думаю штоби не писать два раза условия просто передайом аргумент функциє например єсли добавляєм х передайом функциї аргумент х а єсло 0 то 0. (9 строк сокращаєт) Сорі за плохой руский я просто с Украини. Спасибо за уроки!
@sergionazarov8146 жыл бұрын
То что ты с Украины не оправдывает твой язык, к сожалению.
@ukraine_on_fire5266 жыл бұрын
Я не поняла. Напечатайте код . А шутка"
@ukraine_on_fire5266 жыл бұрын
А шутка"Я с Украины" мне понравилась
@ukraine_on_fire5266 жыл бұрын
Вы не правы. Посмотрите-- 6 пальцев вверх.
@ukraine_on_fire5266 жыл бұрын
Это Сергею Назарову.
@МихаилБуинцев-щ4в6 жыл бұрын
еще есть момент, нет победы когда 2 по углам и 1 в центре)
@non_traditional_gardening Жыл бұрын
А комьпьютер?
@KirillKlimov_lds7 жыл бұрын
Как увеличить размер игрового поля, "крестика" и "нолика", я догадался. Как выровнять игру по центру?
@itgid7 жыл бұрын
Все поле? Margin: 50px auto.
@YauhenRomeiko5 жыл бұрын
магия margin: 0 auto; (и ширину не забываем указать самого блока)
@MrSaintSaturday7 жыл бұрын
Спасибо хороший урок, однако если клацать на одну и ту же ячейку ноль будет менятся на крестик и наоборот...
@itgid7 жыл бұрын
Да, к сожалению иногда уроки пишу на ходу и тестирования не делаю, а оно необходимо.
@ericraudy7 жыл бұрын
посмотри в моем решении есть запрет на повторный клик
window.onload = function() { for (var i = 0; i < 9; i++) { document.getElementById('game').innerHTML+='' } var hor = 0; document.getElementById('game').onclick = function(event) { //console.log(event); if (event.target.className == 'block') { if (hor % 2 == 0) { event.target.innerHTML = 'X'; } else { event.target.innerHTML = 'O'; } hor++; checkWin(); } } function checkWin() { var allblock = document.getElementByClassName("block"); } } В конце выбивает ошибку и говорит что document.getElementByClassName is not a function. Почему оно считает его функцией? Подскажите пожалуйста, вроде бы все как и у Вас.
@itgid7 жыл бұрын
getElements - добавьте s в конце.
@kaaqwerty5 жыл бұрын
Эх, мне бы спеца по JS. Единорога бы забацали.
@Астролит6 жыл бұрын
Эхх самая интрига была как компьютер будет играть с тобой в крестики нолики но она так и не раскрылась =(
@sciences67054 жыл бұрын
window.onload не помогло...
@gurudk33786 жыл бұрын
Интересно, если б мне дали такое задание, и сказали делай. Как я должен бьіл бьі догадаться, что нужно делать именно так, что нужно брать именно те свойство єлемента, а не другие и тд. :)
@itgid6 жыл бұрын
А как бы вы решали?
@gurudk33786 жыл бұрын
Хз, если честно:) Я не знаю всех свойств и не умею их использовать. Кажеться, что никогда не научусь:(
@aspirinalekseevich93144 жыл бұрын
ммм асмрчик
@kimblinov15947 жыл бұрын
ты ахуенен, все рассказываешь, спасибо!
@itgid7 жыл бұрын
Спасибо!
@kimblinov15947 жыл бұрын
за мат извиняюсь) на эмоциях был:D
@ИяИя-п2к5 жыл бұрын
Сама бы не одолела))
@alexandrnikienko81814 жыл бұрын
ужас, ну и решение...
@postrockmore13067 жыл бұрын
Неееет... Только не "Фанкшн"
@ВячеславСергеевич-у1н6 жыл бұрын
Не смотрите вы эти уроки, это не уроки, а не пойми что, от них толку 0, это все равно, что обучать вождению автомобиля в поле, полный бред, полезной информации 0.
@ДмитроКухар-е1и5 жыл бұрын
не пиши ці коментарі, це не коментарі, а не пойми що, від них толку 0, це все одно що дивитись відео уроки для новачків і писати тупі коменти)