Игра Змейка на чистом JavaScript и HTML5 за 45 минут!

Поделиться
HTML-код
  • Опубликовано: 16 июл 2019
  • Представляю вам большой урок, в ходе которого мы создадим полноценную красивую игру на чистом JavaScript и HTML5. Игра будет копировать классическую игру "Змейка", при этом в конце урока мы загрузим игру на сервер чтобы все смогли поиграть в игру.
    ✔ Хостинг можно получить в подарок, но количество активаций ограничено! Используйте промокод GOSHA_HOST. Промокод действителен лишь для тарифа Host-0 и доступен только для первых 30 счастливчиков!
    1) Текстовый редактор: atom.io/
    2) Подборк иконок: www.iconfinder.com/
    3) Хостинг компания: bit.ly/2XCmmJL
    4) Ссылка на статью на сайте itProger: itproger.com/news/198
    5) Перевод видео: • Create Snake Game Usin...
    ✔ Сообщество программистов: itproger.com/
    ✔ -------------
    Вступай в группу Вк - prog_life 🚀
    Группа FaceBook - goo.gl/XW0aaP
    Инстаграм itProger: / itproger_official
    Instagram: / gosha_dudar
    Telegram: t.me/itProger_official
    Twitter - / goshadudar
    - Уроки от #GoshaDudar 👨🏼‍💻
    - Все уроки по хештегу #goshaLessons

Комментарии • 293

  • @volt3396
    @volt3396 4 года назад +93

    Гоша, пожалуйста, по больше уроков, по созданию игр. Здоровья тебе :)

  • @ivanovserg8795
    @ivanovserg8795 2 года назад +20

    Хороший урок, есть чуток замечаний:
    1) Код загроможден переменной bох, надо оставит её только для отрисовки в пикселах, а все сравнения и расчеты по координатам вести в количестве самих ячеек, а не в пикселах;
    2) Есть объект food, тогда и картинку еды перенести надо в этот объект
    3) Есть объект snake, тогда и направление dir перенести в этот объект
    4) Есть голова змеи head, snakeX и snakeY - тогда их тоже вложить в объект snake
    P.S. По коду "размазаны" переменные, которые через 2 недели не вспомнишь что они делают - их надо логически вкладывать в объекты

    • @user-ch1uk1bb7g
      @user-ch1uk1bb7g Год назад

      код не работает

    • @timagoldm
      @timagoldm 10 месяцев назад

      что тебе всё не нравится?! по твоему надо писать место бокс везде 32?
      умник, нашелся! я не хуже тебя в программировании разбираюсь!

    • @ivanovserg8795
      @ivanovserg8795 10 месяцев назад

      @@timagoldm Внимательно перечитай мой пункт 1. Переменная box (а еще лучше сделать её const) нужна только внутри функции отрисовки drawGame(). Вот и всё.

    • @timagoldm
      @timagoldm 10 месяцев назад

      😒

  • @reallygood7580
    @reallygood7580 3 года назад +14

    3:37 - Я сразу понял, что наконец-то нашёл того, кто хотябы ЗНАЕТ о ES6!

    • @mooves3249
      @mooves3249 3 года назад

      Я тоже сколько не смотрел видосов, все переменные создают через var про который я уже даже забыл

  • @zahaietskyi
    @zahaietskyi 4 года назад +5

    Годнота!!!💪💪💪

  • @lyonya7025
    @lyonya7025 4 года назад +5

    Чувак, ты самый лучший! Спсибо тебе за все твои уроки! Желаю как можно больше успехов в творчестве!!

  • @ege8127
    @ege8127 4 года назад +2

    Спасибо огромное!!! От души!!!

  • @kukusikibabasikitv
    @kukusikibabasikitv 3 года назад +6

    Жалко, что у вас так мало видео про игры на джаваскрипт. Спасибо !!

  • @MrSam-mh7ec
    @MrSam-mh7ec 4 года назад

    Гоша ты лучший. Удачи тебе

  • @atsuko_shittl.j
    @atsuko_shittl.j 3 года назад +2

    Спасибо за видео, я теперь знаю как запустить свои файлы на сервер) И узнала многое что о программировании)

  • @Hande_hoch
    @Hande_hoch 3 года назад

    один из очень немногих, на кого я езьже отдущи подписался, отдущи поставил лайк, отдущи оставляю коммент!

  • @thedragon1328
    @thedragon1328 3 года назад

    Спасибо за видео!

  • @iAmSvyat
    @iAmSvyat 4 года назад +5

    Подскажите насчет ошибки. При выполнении интервала на 11:11 в консоли выдает "Uncaught TypeError: Cannot read property 'drawImage' of null
    at drawGame"

    • @daniyarkayir
      @daniyarkayir 4 года назад +1

      вы может быть написали const ctx вместе из за этого и ошибка примерно вот так вот constctx = canvas.getContext("2d");

  • @user-hu1mk4tw2q
    @user-hu1mk4tw2q 2 года назад

    Очень круто!

  • @NeedForHeavyMetal
    @NeedForHeavyMetal 2 года назад

    спасибо!) наглядно)

  • @daffeboy
    @daffeboy 4 года назад

    Спасибо, всё робит!

  • @irinax5392
    @irinax5392 4 года назад +38

    Привет, в canvas остаются следы предыдущего местоположения змейки и кажется что ты рисуешь ею на поле. Такой же баг повторяется и с score. Цифра не обновляется а накладывается на предыдущее т.е. на 0 рисуется единичка и тд. Решила проблему добавив ctx.clearRect(0, 0, 609, 609); в самое начало функции drawGame(). Может кому понадобится.

    • @kostyaryazanov9685
      @kostyaryazanov9685 2 года назад +6

      В процессе создания столкнулся с такой-же проблемой. Оказалось, что я написал pop, вместо pop(). Поэтому элементы массива не удалялись, а оставались на месте, что и кажется, как закрашивание

  • @gennadius909
    @gennadius909 4 года назад

    Спасибо за урок

  • @user-rz8dd1bp1i
    @user-rz8dd1bp1i 2 года назад

    Крассава бро)

  • @progi99
    @progi99 7 месяцев назад

    спасибо за урок, было бы интересно как еще регулировать скорость змейки

  • @user-hm2mo9jt7b
    @user-hm2mo9jt7b 2 года назад

    Спасибо!

  • @ganjackal
    @ganjackal 3 года назад +1

    Супер🤝🏆слушай топчик еще бы game over по соли экрана это реально не подскажешь как🤔😆
    Короч я решил заняться плотно веб разработкой и тут столкнулся с js пока не платно занимаюсь ! Есть советик !? С чего лучше начинать html и css знаю не так хорошо но знаю но говорят в наше время js всем глава без него ни куда ! Что скажешь!?

  • @11-april
    @11-april 4 года назад +1

    Не хочу выпендриваться, я новичок в этом деле, но я бы создал функцию, которая каждый рандомно генерирует еду, типа function createfood() {тут прописать рандомное появление еды}
    А переменную food просто объявить, затем вызвать эту функцию и каждый раз вызывать функция, когда змея проглатывает пищу)
    Спасибо за урок)

    • @evgeniiAn
      @evgeniiAn 3 года назад

      зачем плодить новые сущности если все решается в пару строк кода? и да, не выпендривайся)

  • @savelpetoyan9853
    @savelpetoyan9853 4 года назад +1

    Круто

  • @user-pc4qr6oe8k
    @user-pc4qr6oe8k 4 года назад +3

    поражаюсь твоему трудолюбию

    • @dashkin-dima
      @dashkin-dima 4 года назад

      Да капец как сложно брать материал с запада

    • @Evoleo
      @Evoleo 4 года назад

      Он просто украл видео у зарубежного ютубера ruclips.net/video/9TcU2C1AACw/видео.html

  • @user-nu9rk7bl2w
    @user-nu9rk7bl2w 4 года назад +3

    Игра на JavaScript удалась! Спасибо!

  • @VIJana79
    @VIJana79 3 года назад

    А почему Гошу критикуют на других каналах? Хорошо он рассказывает, всё понятно. Конечно для понимания база какая-то нужна, без неё никуда. А так всё норм, всё подробно, чего писать, куда вставлять, почему такое действие.

  • @joefast505
    @joefast505 4 года назад +3

    Не до смотрел но все равно ТОП! Спасибо за видео :D

  • @user-lu3bs7ny9f
    @user-lu3bs7ny9f 3 года назад

    Подскажите,как привязать звуки к клавишам,типо когда змея умирает,когда ест и двигается

  • @KonamiMaster
    @KonamiMaster 3 года назад

    Спасибо за инфу

  • @mrak3059
    @mrak3059 4 года назад

    ты лучший)

  • @user-nd7fq9ys8p
    @user-nd7fq9ys8p 4 года назад

    Неплохо

  • @slava_tfdf
    @slava_tfdf 2 года назад

    Приветствую, насколько сильно нужно будет допилить игру, чтобы была возможность у пользователя сохранить фи и почту, чтобы сохранить/вывести таблицу с результатами?

    • @mr_pilka
      @mr_pilka Год назад

      очень сильно

  • @lackevil3730
    @lackevil3730 4 года назад +3

    Больше JavaScript плизз

  • @durkaRealLol
    @durkaRealLol 2 года назад +1

    что делать, ошибка game.js:48 Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state.
    at drawGame (

  • @vladnotvlad1228
    @vladnotvlad1228 4 года назад +3

    Бро, где ты был раньше?)

  • @vilgo3927
    @vilgo3927 3 года назад

    из за блочной видемости dir должен выдавать undefined, обьясните как это работает

  • @maxedits7064
    @maxedits7064 4 года назад

    Лайк, всё круто и понятно, я пошёл делать игру)) Единственное чего мне не понятно и хотелось бы понять: за что отвечают meta у тебя в html? их там три

    • @chelobas14
      @chelobas14 3 года назад

      Это стандартная разметка, её создаёт сама прога при создании файла. Она не нужна

  • @igixprffikiberg2636
    @igixprffikiberg2636 3 года назад

    Привет Георгий я писал игру я смотрел все твои уроки по Js и я решил посмотреть это видео в коде у меня показывает что все правильно но когда я зашел в консоль у меня выдало ошибку почему?

  • @user-ol7fc8ls7e
    @user-ol7fc8ls7e 2 года назад +1

    Всё прекрасно! Получилось! Но есть один вопрос - зачем исползовать переменную let, если можно использовать переменную var? тоже и с const?(Я не причисляю твои дествия к ошибке, а лишь спрашиваю)

    • @jilka3232
      @jilka3232 2 года назад

      Переменная var устарела, а переменная let более современная

    • @user-ol7fc8ls7e
      @user-ol7fc8ls7e 2 года назад +1

      @@jilka3232 Спасибо, теперь попробую чаще использовать переменную let 😄

    • @user-ek4zd1vp2e
      @user-ek4zd1vp2e Год назад +1

      @@user-ol7fc8ls7e в области видимости дело. если сначала вызвать переменную заданную при помощи var а потом определить ее,то оно даст это сделать и ты получишь undefined. С let такая шняга работать не будет. тебе покажет ошибку. Как то так. Поэтому желательно использовать let. А если уверен что изменять переменную не будешь то делай const. Я обычно const для стрелочных функций использую.

  • @GANGST1ER
    @GANGST1ER 3 года назад +1

    Что-то не могу понять с рандомом. Если он генерирует от 0 до 1, то как получаются координаты больше 1 и меньше 17 при умножении?

    • @GANGST1ER
      @GANGST1ER 3 года назад

      Понял. Дело в том что random генерирует дробные числа в пределах от 0 до 1.

  • @georgbruzgaloff4127
    @georgbruzgaloff4127 3 года назад

    Жорик, привееееет! Почему про игры перестал выкладывать уроки?

  • @Egor_top518
    @Egor_top518 2 года назад

    Привет вот в картинке для поле змейки я всё правильно прописал обновлял страницу и картинка не появляется что делать?

  • @munutd9857
    @munutd9857 2 года назад

    👍👍👍

  • @utlookworld5784
    @utlookworld5784 3 года назад

    Игра - класс!
    А как сделать несколько уровней?

  • @angrycoder18
    @angrycoder18 4 года назад +1

    в смысле переменные же в javascript объявляются через var или из-за canvas через let?или это просто не 'use strict'

    • @user-ez9zi2ww6x
      @user-ez9zi2ww6x 4 года назад

      Это относительно новый стандарт, var уже не используется

    • @user-xq3hx1uz1r
      @user-xq3hx1uz1r 4 года назад

      Это Es6. Теперь let это стандарт

    • @TtTalkUA
      @TtTalkUA 4 года назад

      погугли различия между var let и const

    • @iGespo
      @iGespo 4 года назад

      Почитай разницу между var и let learn.javascript.ru/let-const

  • @GANGST1ER
    @GANGST1ER 3 года назад +1

    Очень долго делал, но всё таки переписал эту же игру на Python в Tk+Canvas) Проблема была в зацикливании движения змейки. root.after(150, func) помогло.

    • @kain5731
      @kain5731 Год назад

      Привет, хочу спросить у тебя если не сложно) я хочу научиться фронтент разработке и немного бэкенда, для этого нужен ПК или ноутбук, хотел бы узнать что из этого лучше ? И на сколько мощными они должны быть?

    • @user-si1fw9tr1z
      @user-si1fw9tr1z Год назад

      @@kain5731 если хочешь учиться то тебе хватит самого обычного пк или ноутбука что удобнее тебе будет, мощностью не имеет значения, даже на самом простом пк можно открыть редактор кода и видео по которым будешь учиться

  • @Black_cat3549
    @Black_cat3549 3 года назад +1

    Гоша пожалуста ответь уменя не прорисовуеца поле что мне делать?

  • @user-hl7xo2fu9o
    @user-hl7xo2fu9o Год назад +1

    Что делать если не воспринимает ctx.drawImege(ground, 0, 0)

  • @alex57767
    @alex57767 4 года назад +3

    Для полного счастья стоит дописать, чтобы координаты спауна новой еды не могли совпасть с одной из координат самой змейки

    • @user-vi3ur8bw8k
      @user-vi3ur8bw8k 4 года назад

      Как это сделать?

    • @RestPRODev
      @RestPRODev 4 года назад

      @@user-vi3ur8bw8k Изи

    • @Evoleo
      @Evoleo 4 года назад

      @@user-vi3ur8bw8k просто заспавнить заново если координаты внутри змейки и так пока не заспавнится нормально

  • @fffttt3935
    @fffttt3935 Год назад

    Not allowed to load local resource. Как испавить, подскажите пожалуйста

  • @yanayukhymenko3017
    @yanayukhymenko3017 2 года назад

    Я хотел сделать несколько еды, но когда змея проглатывает одну ту пропадает сразу несколько и больше не появляеться. Можно это как-то исправить?

  • @taaron8043
    @taaron8043 4 года назад

    почему когда пишешь например document.get... не высвечивается подсказка getElementById

    • @Aituar_
      @Aituar_ 3 года назад

      Зависит от редактора кода,

  • @mator7359
    @mator7359 3 года назад

    useful

  • @RestPRODev
    @RestPRODev 4 года назад +9

    Зашёл тупо посмотреть как создать игру ради прикола
    В итоге узнал для себя что то новое по Js

  • @firesword2912
    @firesword2912 4 года назад

    а если я хочу добавить еще цветов к змеи?

  • @sanjar5862
    @sanjar5862 4 года назад

    Нашел 1 баг но не получается поправить . Когда змейка движется в лево при нажатии вниз и вправо одновременно змейка направляется на право( и тож самое при движении вправо ) как пофиксить это ?

    • @cryptoline1304
      @cryptoline1304 Год назад

      Спустя 3 года скорее всего неактуально, но один из простых способов - создать переменную, назовем ее drawUpdated, которая будет являться флагом проверки перерисовки. Далее:
      // где-нибудь в начале game.js файла
      let drawUpdated = false;
      function direction(event){
      if(event.keyCode == 37 && dir != "right" && !drawUpdated) // разрешаем одно изменение направления в рамках перерисовки
      dir = "left";
      else if(event.keyCode == 38 && dir != "down" && !drawUpdated) // разрешаем одно изменение направления в рамках перерисовки
      dir = "up";
      else if(event.keyCode == 39 && dir != "left" && !drawUpdated) // разрешаем одно изменение направления в рамках перерисовки
      dir = "right";
      else if(event.keyCode == 40 && dir != "up" && !drawUpdated) // разрешаем одно изменение направления в рамках перерисовки
      dir = "down";
      /*Пишем, что перерисовка произошла, чтобы при повторном нажатии кнопок wasd в рамках текущей перерисовки змейка не изменила направление и не возникло ситуации, когда, например, змейка двигалась налево и до перерисовки она изменила направление вниз и потом направо из-за чего может показаться, что она сразу пошла слева направо.
      */
      drawUpdated = true;
      }
      function drawGame(){
      ...
      drawUpdated = false; // после перерисовки сбрасываем флаг, чтобы снова установить новое направление в direction(event).
      }
      P.S. Вероятнее всего можно сделать более лаконично и красиво, т.к. опыта на js особо не было, но способ рабочий.

  • @innagencer8731
    @innagencer8731 2 года назад +1

    класс!!! спасибо!!!
    вопрос к знающим, как уменьшить скорость движения змейки?

    • @ivanovserg8795
      @ivanovserg8795 2 года назад +3

      В строке let game = SetInterval ( drawGame, 100 );
      надо увеличить интервал с 100, например до 200 (т.е. заменить 100 на 200). Если надо еще медленнее - то ставим 300 вместо 100

    • @innagencer8731
      @innagencer8731 2 года назад

      @@ivanovserg8795 Спасибо БОЛЬШОЕ!!!!!!!!!!!!!!!!!!!!!

  • @Gp-iv1ey
    @Gp-iv1ey 2 года назад

    у меня фрукты иконки только от 48 пикселей есть. Что делать?

  • @megavanya123
    @megavanya123 4 года назад +13

    что делать если сайт не показывает поле
    это с чем связано
    я посмотрел в консоли нету ошибок
    подскажите

    • @mercals
      @mercals 4 года назад +3

      у меня такая-же хрень

    • @user-po3qc7yx6g
      @user-po3qc7yx6g 4 года назад

      Вызывать функцию нужно, может файл неправильно подключён

    • @bogdanstrel9212
      @bogdanstrel9212 4 года назад +1

      У меня так же было, я поместил файл html в папку js ошибочно. Файл html должен быть в главной папке (в этом случае WWW).

    • @tuavtorru3041
      @tuavtorru3041 4 года назад

      Если не помогает напиши внутрь тега канвас какой-то текст и если он выводиться то значит у тебя слишком старая версия браузера.

    • @ZipOfficial
      @ZipOfficial 3 года назад

      @@tuavtorru3041 у меня не вываодит текст значит сбраузером у меня всё нормально?

  • @ZipOfficial
    @ZipOfficial 3 года назад

    почему у меня не выводит картинку поля, я БУКВАЛЬНО сделал всё точно так же как видео, всё равно картинку не выводит, помогите пожалуйста

  • @nailfah
    @nailfah 4 года назад

    Почему картинку загрузили через setInterval? Да ещё со значением 100. Она же по логике должна как раз мелькать...

    • @user-vz4jh7zr4r
      @user-vz4jh7zr4r 4 года назад

      А скажите пожалуйста от этого значения может не отображать половину поля?

  • @foxyboy5059
    @foxyboy5059 3 месяца назад

    где ты ссылку для картинки написал 🥺

  • @zxcblood1489
    @zxcblood1489 4 года назад +2

    А я прям на телефоне кодил и получилось

  • @user-nz2nk5wp9t
    @user-nz2nk5wp9t 4 года назад +4

    Подскажите, вообще ни чего не отображает в браузере, белая пустота, уже для пробы полностью копировал всё и папки и код...

    • @GooseDL1337
      @GooseDL1337 4 года назад +1

      @Schellenberg у вас файл js работает раньше чем html. Объявите тег после того как закрывается тег

    • @user-nz2nk5wp9t
      @user-nz2nk5wp9t 4 года назад

      @@GooseDL1337 попробую, благодарю за ответ.

    • @yingwai8668
      @yingwai8668 4 года назад +2

      @@GooseDL1337 не работает... ничего не работает.. я уже заебался с этим

    • @olexandr5649
      @olexandr5649 4 года назад

      @@yingwai8668 ты все food заменил на foodImg? проверь правильность написания кода и указаных путей к картинкам. У меня файлы расположены в таких же папках как у него, но чобы получить картинку я прописал такой путь: foodImg.src = "../img/food.png"; после чего все заработало

    • @ss888dd
      @ss888dd 4 года назад

      @@GooseDL1337 тег в самом видео объявляется позже канваса.

  • @user-ir8nd6mj2b
    @user-ir8nd6mj2b 4 года назад

    3:43 Это необязательно, у меня работает просто обращение по id (т.е. переменная "game", которой нет в коде, возвращает canvas).

    • @MaximMoPeR
      @MaximMoPeR 4 года назад

      @H 336 Что ты тут делаешь? Лол я твой подписчик =)

    • @user-qq9qz8gl7y
      @user-qq9qz8gl7y 4 года назад +1

      @@MaximMoPeR ты на этого дауна подписан?

    • @garnish1006
      @garnish1006 2 года назад

      @@user-qq9qz8gl7y всм

  • @levveremchuk1475
    @levveremchuk1475 4 года назад +1

    помогите пожалуйста код аналогичный ошибок в консоле нет но змейка не растет кде я сделал чтото не так????

    • @bakumjesus7143
      @bakumjesus7143 4 года назад +2

      Перед кнопками left , right удали pop

  • @apikeev
    @apikeev 4 года назад

    Гоша, твои уроки по JavaScript еще актуальны?

    • @jabka1356
      @jabka1356 4 года назад

      Чувак скинь свой вк я тоже начинаю обучение джва скрипт . И да его уроки актуальны

    • @volkovgst
      @volkovgst 4 года назад

      Очень даже

    • @hahatoon5443
      @hahatoon5443 4 года назад

      @@jabka1356 хах, давай я с вами

  • @user-gj5yl1ge4i
    @user-gj5yl1ge4i 4 года назад +2

    Всем привет, на 30 минуте я запускаю змейку и квадрат просто исчезает, и следовательно не двигается
    const canvas = document.getElementById("game");
    const ctx = canvas.getContext("2d");
    const ground = new Image();
    ground.src = 'img/ground.png';
    const foodImg = new Image();
    foodImg.src = 'img/food.png';
    let box = 32;
    let score = 0;
    let food = {
    x: Math.floor(Math.random() * 17 + 1) * box,
    y: Math.floor(Math.random() * 15 + 3) * box,
    };
    let snake = [];
    snake[0] = {
    x: 9 * box,
    y: 10 * box,
    }
    document.addEventListener("keydown", direction);
    let dir;
    function direction(event) {

    if(event. keyCode == 37 && dir != 'right')
    dir = "left";
    else if(event.keyCode == 38 && dir != 'down')
    dir = "up";
    else if(event.keyCode == 39 && dir != 'left')
    dir = "right";
    else if(event.keyCode == 40 && dir != 'up')
    dir = "down";
    }
    function drawGame() {
    ctx.drawImage(ground, 0, 0);
    ctx.drawImage(foodImg, food.x, food.y);
    for(let i = 0; i < snake.length; i++) {
    ctx.fillStyle = "green";
    ctx.fillRect(snake[i].x, snake[i].y, box, box);
    }
    ctx.fillStyle = "white";
    ctx.font = "50px Arial";
    ctx.fillText(score, box * 2.5, box * 1.7);
    let snakeX = [0].x;
    let snakeY = [0].y;
    snake.pop();
    if(dir == 'left') snakeX -= box;
    if(dir == 'right') snakeX += box;
    if(dir == 'up') snakeY -= box;
    if(dir == 'down') snakeY += box;
    let newHead = {
    x: snakeX,
    y: snakeY,
    };
    snake.unshift(newHead);
    }
    let game = setInterval(drawGame, 100);

    • @cryptoline1304
      @cryptoline1304 Год назад +1

      Спустя 2 года, думаю, неактуально, но вместо:
      let snakeX = [0].x;
      let snakeY = [0].y;
      должно быть:
      let snakeX = snake[0].x;
      let snakeY = snake[0].y;

  • @user-vz4jh7zr4r
    @user-vz4jh7zr4r 4 года назад +1

    Гоша помоги пожалуйста у меня вот это поле половину отображает половину нет все проверил и все ровно

    • @Aituar_
      @Aituar_ 3 года назад

      Может вы задали ширину и высоту через СИэсЭС?

  • @faded_boy9277
    @faded_boy9277 3 года назад

    Я не могу найти такоеже поле оно мне очень понравилось можете кинуть ссилку на него ИЛИ как то передать

  • @user-vz4jh7zr4r
    @user-vz4jh7zr4r 4 года назад

    Помогите пожалуйста у меня поле половину отображает

  • @dlazder3937
    @dlazder3937 Год назад

    Пытался разобраться как работает змейка, но даже я полный новичок вижу что код написан как попало. Куча лишних переменных, объектов непонятно для чего они нужны... Вот в чем проблема например сделать объект и с направлениями змейки и позицией? не понятно...

  • @play_gamespg6446
    @play_gamespg6446 Год назад

    А что делать если змейка не отображается сделал всё точь в точь, и всё равно не появляется

  • @s1lentgrave
    @s1lentgrave 4 года назад

    и ещё такой момент, если змейка внезапно остановилась при развороте, но сама ещё прямая, значит она развернулась не изменив координаты и сама себя съела

    • @s1lentgrave
      @s1lentgrave 4 года назад

      @Mad Doctor Это нужно изменить в другом месте, не там где коды указываются, а
      if(dir == "left") snake -= box;
      ...
      Тут проверь, все ли минусы и плюсы правильно написал, и порядок (left, right, up, down)

    • @s1lentgrave
      @s1lentgrave 4 года назад

      @Mad Doctor Скинь скриншот

  • @DENGEO1995
    @DENGEO1995 4 года назад

    Белый экран а в консоли пишет :
    Failed to load resource: net::ERR_FILE_NOT_FOUND ss/style.css:1
    game.js:43 Uncaught SyntaxError: Identifier 'i' has already been declared game.js:43

    • @ogg4470
      @ogg4470 3 года назад +2

      перекинь style.css:1 и game.js:43 в папку где index.html и измени путь на а game.js на должно сработать

    • @catto88
      @catto88 3 года назад

      замени const на let на строке 43

  • @user-mw5ii1fs2e
    @user-mw5ii1fs2e 4 года назад +1

    У меня ошибка, он не находит css файл

    • @puolchen2632
      @puolchen2632 3 года назад

      если файл css находится в отдельной папке (скорее сего так и есть), убедись, что перед написанием имени файла написал в какой он папке находится:

  • @user-ol7fc8ls7e
    @user-ol7fc8ls7e 2 года назад

    Если вы хотите что-бы когда голова врезалась в стенку голова не пролетала ещё клетку, то просто вставте этот код после кода с созданием переменной newHead!

  • @VitTravelUSA
    @VitTravelUSA 4 года назад

    У меня постоянно ошибка в JS

  • @layon5413
    @layon5413 4 года назад +1

    Гоша, я твой старый подписчик. У меня есть очень интересный вопрос. Он немного не по теме программирования, а больше по теме 3D и создания игр. Но я не знаю кому ещё задать. Если прочитал это напиши хоть . и я распишу вопрос. Надеюсь прочитаешь.

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      А какой вопрос?

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      Какой движок ? Где моделировать ?

    • @layon5413
      @layon5413 4 года назад

      @@user-tp5jh1vd3s как бы вопрос не по моделям. Я видел на ютубе англ видео о дешёвой лицевой анимации. Люди обмазывали лицо зелёнкой и делали так лицевую анимацию. Могу скинуть. Очень интересная тема, и на рутубе никто не делал. Автор делал в блендера. (но я люблю синьку и подобных видео не было).

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      @@layon5413 это не зелёнка )) это что-то типо присосок .
      И это могут позволить только богатые дяди и тети (очень дорого)

    • @layon5413
      @layon5413 4 года назад

      @@user-tp5jh1vd3s ты очень плохо читал. Это бесплатно, в этом и прикол. Они как то настраивают и делают анимацию. Случайно на ролик наткнулся, оказалось по подобному запросу есть ещё. И там реал похоже на зеленку.) А студийная анимация стоит десятки тысяч долларов.

  • @user-ds4gj4hg9g
    @user-ds4gj4hg9g 2 года назад

    Я бы изображение в CSS сделал

  • @mitchstorm
    @mitchstorm 4 года назад +1

    Почему у меня поле не прорисовуетса? Помогите пж.

  • @mlpyavamystical_yt
    @mlpyavamystical_yt 3 года назад

    У меня моментами еда не появляется. Что делать?

  • @tatsuki5929
    @tatsuki5929 3 года назад

    33:00

  • @ArtSolist
    @ArtSolist 3 года назад

    Полчаса искал ошибку... оказалось в строке: const ctx = canvas.getContext("2d"); Написал 2d написал с большой буквой, то есть 2D. А в консоль писало: "Uncaught TypeError: Cannot read property 'drawImage' of null
    at drawGame" 😁

  • @user-iw3eg3pu1d
    @user-iw3eg3pu1d 2 года назад

    А ты можешь показать как создать игру Got of war на javascript ?

  • @argonaut2899
    @argonaut2899 4 года назад

    Оаоаоа

  • @alibekyusupov322
    @alibekyusupov322 3 года назад

    А за сколько примерно можно научиться писать такие коды от нуля? Учу уже неделю, понял почти всё но сам писать сначало не смогу

    • @user-dg1rm5xp1o
      @user-dg1rm5xp1o 3 года назад +2

      Пиши сперва все по видео, будешь со временем своим мозгом осознавать код, функции будут запоминается и в будущем сможешь писать код без сторонней помощи, но до этого ещё долгая практика таких сценариев.
      На своём опыте говорю, не помогли учебники, помогло списывание с туториалов.

    • @user-dg1rm5xp1o
      @user-dg1rm5xp1o 3 года назад +1

      И да, неделя для js - мало, месяц как минимум. Хотя в js нету прям заумных функций(

  • @user-xu1ck1wv9r
    @user-xu1ck1wv9r 9 месяцев назад +1

    я один сделал эту змейку в блокноте😂?

  • @megavanya123
    @megavanya123 4 года назад

    что делать если в консоли вылезло это Uncaught SyntaxError: Unexpected token ')'

    • @ogg4470
      @ogg4470 3 года назад

      Где-то лишний символ наверное открой консоль в, защите там покажет ошибку нажми на неё и покажет где это и исправь

    • @megavanya123
      @megavanya123 3 года назад +2

      @@ogg4470 Я уже давно решил, но все же спасибо

  • @ybamaster
    @ybamaster 3 года назад +1

    А АБЕЗАТЕЛЬНО ПИСАТЬ CONST И LET просто я мало знаю о es6

    • @drino955jug3
      @drino955jug3 3 года назад

      так прочитай про это

  • @yosa9463
    @yosa9463 4 года назад +2

    сделай видео урок по Meteor js

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      ?

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      Это библиотека?

    • @yosa9463
      @yosa9463 4 года назад

      @@user-tp5jh1vd3s +

    • @kertaw3853
      @kertaw3853 4 года назад

      Скажи рандомное английское слово и с вероятностью 99% это библиотека для JavaScript

  • @argus2298
    @argus2298 4 года назад

    Сделай видео про "крестики и нолики".

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      Могу скинуть файл через Гугл диск

    • @DanilSolodkov
      @DanilSolodkov 4 года назад

      это жызнь давай

    • @user-tp5jh1vd3s
      @user-tp5jh1vd3s 4 года назад

      @@DanilSolodkov не суди за комментарии ( там их только 2) я его написал года два назад

    • @DanilSolodkov
      @DanilSolodkov 4 года назад

      это жызнь чего?коменту неделя

    • @Evoleo
      @Evoleo 4 года назад

      Как только выйдет западный ролик с такой тематикой - он сделает

  • @myshkin832
    @myshkin832 4 года назад +1

    *А какая разница между var, let, const?*

    • @intbyte
      @intbyte 4 года назад +1

      const - неизменяемая переменная(константа)
      var - старый способ создания переменной
      let - новый способ создания переменной, с некоторыми незначительными преимуществами перед var

    • @myshkin832
      @myshkin832 4 года назад

      @@intbyte спасибо 🙂

    • @rbk9582
      @rbk9582 4 года назад +1

      @@intbyte если создать let переменную в функции то она будет только в её пределах, если не ошибаюсь.

  • @neyankk
    @neyankk Год назад

    Почему змейка не появляется?

  • @myhomeshow8744
    @myhomeshow8744 4 года назад

    Привет, а где ссылка на игру ?

    • @hostbit1393
      @hostbit1393 4 года назад +1

      если тебе лень делать то можешь взять мой проект: yadi.sk/d/2OhBTWxCun5hbA

  • @artemaleshchenko8219
    @artemaleshchenko8219 4 года назад +1

    Как сделать скорость змейки меньше?

    • @user-ec5lz3dr1f
      @user-ec5lz3dr1f 3 года назад

      let game = setInterval(drawGame, 100); поменяй скорость обновления на 250 мсек, например.

  • @js_games_for_dummies
    @js_games_for_dummies 11 месяцев назад

    29:43 Переписала 12 раз -- хвост не убирается, snake.pop() не работает:
    Snake Game
    body{
    background: linear-gradient(rgba(0, 0, 0, 0.4), transparent 1px),
    linear-gradient(90deg, rgba(0, 0, 0, 0.4), transparent 1px);
    background-size: 32px 32px;
    }
    canvas{
    display: block;
    width: 608px;
    height: 608px;
    border: 1px solid black;
    margin: 32px 23px;
    }


    const cvs = document.getElementById("snake");
    const ctx = cvs.getContext("2d");
    const box = 32;
    ctx.fillStyle = 'black';
    ctx.fillRect(0, 94, 608, 1);
    let snake = [];
    snake[0] = {x : 9 * box, y : 10 * box };
    let food = {
    x : Math.floor(Math.random() * 17 + 1 ) * box,
    y : Math.floor(Math.random() * 15 + 3 ) * box
    };
    let score = 0;
    let dir;
    document.addEventListener('keydown', direction);
    function direction(event){
    if(event.keyCode == 37 && dir != 'right') {dir = 'left'; }
    if(event.keyCode == 38 && dir != 'down') {dir = 'up'; }
    if(event.keyCode == 39 && dir != 'left') {dir = 'right'; }
    if(event.keyCode == 40 && dir != 'up') {dir = 'down'; }
    }
    function drawGame(){
    for(let i = 0; i < snake.length; i++){
    ctx.fillStyle = 'green';
    ctx.fillRect(snake[i].x, snake[i].y, box, box);
    }
    ctx.fillStyle = 'red';
    ctx.fillRect(food.x, food.y, box, box);
    let snakeX = snake[0].x;
    let snakeY = snake[0].y;

    if(dir == 'left') snakeX -= box;
    if(dir == 'up') snakeY -= box;
    if(dir == 'right') snakeX += box;
    if(dir == 'down') snakeY += box;
    let newHead = {
    x : snakeX,
    y : snakeY
    };
    snake.unshift(newHead);
    snake.pop();
    }
    let game = setInterval(drawGame, 1000);

  • @user-ss2nh1nv8i
    @user-ss2nh1nv8i 4 года назад +8

    Можно на бесплатный github pages выгрузить

  • @saahaisaev2550
    @saahaisaev2550 3 года назад

    Спасибо
    Но дай пж инфу как сделать управление для мобильных гаджетов

    • @prichendal
      @prichendal Год назад

      Добавь свои кнопки в html и синхронизируй с game.js

  • @launcelot__
    @launcelot__ 3 года назад

    25:14