Coding JavaScript Snake Game (Plain Vanilla JavaScript & HTML Canvas)

Поделиться
HTML-код
  • Опубликовано: 6 фев 2025
  • Learn how to build a the iconic Snake game using JavaScript in the browser! We will be using plain vanilla JS to code this fun game.
    We use a html5 canvas to create this snake game. We draw on the canvas using drawrect and other methods provided by the canvas. We will be tracking our score based on how many fruit the snake eats. We us an object orientated approach to build this game.
    Code on GitHub: github.com/kri...
    Don't forget to Subscribe here: / @krisfoster1

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

  • @KrisFoster1
    @KrisFoster1  6 лет назад +10

    PART 2: ruclips.net/video/AVQKOz99Biw/видео.html

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

      Could you please create a video concerning the part of shifting arrays...For trial purposes I shifted them right(You shifted left) and got a runtime error could you please explain more if you could please

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

      it keeps saying snake is not defined

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

      Awesome

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

      You probably dont give a shit but does someone know of a tool to log back into an instagram account??
      I was stupid forgot the login password. I love any help you can give me

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

      @Rex Juelz Instablaster ;)

  • @kiwicami287
    @kiwicami287 5 лет назад +49

    I wish you could explain a bit more, i'm kinda lost as to what happens with the part of the code for making the snake grow, also you should boost the volume a bit for later videos, thank you

    • @KrisFoster1
      @KrisFoster1  5 лет назад +3

      Thank you for the feedback @Scorpio

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

    About to sleep(7:17) and have an assignment due 23:59. If the magic walls code where you come in opposite side if you go off the canvas helps me.. you are truly my savior. Because I feel the code you wrote actually made me realize how it worked, and you’re the one person I’ve found having that. I’ve not seen much more but if you have a poisonous food type too now. Im set 😂

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

      Thank you, glad it helped you! Hope you got your assignment finished

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

      @@KrisFoster1 yeah! I think i’m managing now. It wasn’t completely what I needed. But As I mentioned you made something click in my brain so I understand a bit more at least! I appreciate that a lot 🤝

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

    Hey Chris if I am being honest, This Snake game is the tutorial that I most understood. Thanks and do more tutorial's just like this, Thanks again! 😁😁😁👍👍👍👍

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

      Thank you for the kind words @Programming!

  • @granumuse7847
    @granumuse7847 5 лет назад +4

    Congratulations!!! You did it without arr.pop() and arr.shift()

  • @AdrenalineVideos1337
    @AdrenalineVideos1337 5 лет назад +3

    Awesome video for somebody just starting to get into coding!!!

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

    Very simple and clear. 👍👍

  • @piupaul5180
    @piupaul5180 6 лет назад +10

    Well explained and very clean coding structure. Thank you Sir :)

    • @KrisFoster1
      @KrisFoster1  6 лет назад +2

      Glad it helped you out @piu paul

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

    GREAT VIDEO! Watching it in 2021

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

      Thank you @urgen tenzing sherpa!

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

    Thanks very help full, I like soo much how you draw the tail, it is very clever idea!!!

  • @michaelbacy3525
    @michaelbacy3525 6 лет назад +2

    I would really like seeing the continuation

    • @KrisFoster1
      @KrisFoster1  6 лет назад +1

      Thanks for letting me know, I will work on this

    • @KrisFoster1
      @KrisFoster1  6 лет назад +1

      PART 2 Uploaded here: ruclips.net/video/AVQKOz99Biw/видео.html

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

    That's a mighty fine snek you got there

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

    "snek needs a snek so let's make a snek... "
    i'm dead

  • @FatsFalafel
    @FatsFalafel 4 года назад +4

    My ears are doing that "Ken Jeong looking at a tiny note" meme.

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

    hey @CodeWithKris this might be an old video to answer to, but whenever i run the code the fruit keeps on moving everywhere i think the program reads the "this.total++;" for the fruit not for the snake or something.. i am really confused, it would be a great help if you would help

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

      I get the same error, when I replace the this.total++ with console.log('Eating') the code functions as expected, however when I try to add to the total it seems to be causing the function to return true every time the window updates and the fruit moves. Not sure how these are connected as it seems to work for the console.log but not the this.total++. Let me know if anyone else has found a solution to this, I am using VS code in a xubuntu VM.

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

    I Tried to make snake using grid and , but it felt so buggy. I will Probobly redo games using canvas.

  • @cherriepie
    @cherriepie 5 лет назад +23

    It's like trying to read Chinese, but I'm determined to learn though

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

      huh what if u are from china😶😶

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

      @@sumanboi it's like reading french

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

      @@nomapech7300 whats if ur from france?

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

      @@sumanboi it's like reading turkish

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

      @@nomapech7300 what if u were born in trukey?

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

    Hey, I have an issue that I run the code in chrome but nothing appears. No canvas, no snake, nothin. But when I open up the chrome console, it says there is no errors and that everything is functioning properly. Currently I am at 8:06 in the tutorial, and I have followed all instructions other than change the name of the 'snake' variable to 'snek'. I would love any help I can get. TIA

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

    some bug where you back the direction.

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

    yeah its a good tutorial for me
    keep going......

  • @mechritian6004
    @mechritian6004 4 года назад +4

    This is a very helpful tutorial but I'm having trouble at the begining of making the snake. I copied your code but google keeps saying that snake is undeifined and it doesn't show up in the box. Can you help me with this?

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

    great vid!

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

    I was stuck at increasing the snakes length so i watched this video , it works my tail is increasing but not at the correct behaviour

  • @kyleminor3052
    @kyleminor3052 5 лет назад +1

    Whenever I try to run the program after the snake is applied onto the canvas, i get a console error that ctx is not defined. Would that be due to a previous mistake or something else.

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

    HOW DO YOU DO SHORTCUTS TO MAKE CODE APPEAR

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

    Thanks for the great tutorial👌🏼I tried so much to figure out the usage of THIS. Sometimes it is so hard to understand it😒

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

      The idea of this simply put is to cover a scope. Now what is a scope so u seen the way he writes function () { something here} the something here is the scope. The region within which this searches for “stuff” anytime it’s called. If he did not put this in front of a variable before calling it Javascript will look for it in the global scope ie outside of the function. I hope I haven’t confused u more with scope but to understand scope is to understand this and also trying Learning about namespace 😁

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

      @@nanakoab thank you

  • @HelloWorld-uj9mj
    @HelloWorld-uj9mj 5 лет назад +1

    what is the place you code?

  • @manimani-dz3yj
    @manimani-dz3yj 4 года назад

    What app are u useing?

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

    does this use an older version of javsscript

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

    I am confused as to why when we press UP key, we need to add -scale, aint the y coordinate above plus and down it is minus?

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

      For anyonoe who got the same question, it is because of document object, document height starts from 0 at the top, to its length to the bottom, so thats why we are in minus when we go up. Flies away

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

      Yeah that's exactly it @Makro Phoenix, thanks for explaining

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

    im trying to make this work using Visual Studio 2017 for my assignment, I am going to adapt the code to my needs, but when I run it, it just displays the canvas without the Snake and fruit. I changed your draw.js to Collision.js, I want to know how i can make it show the snake and fruit

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

      also in visual studio i created a folder that links the JS files with the HTML page, thats how Visual studio works

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

    can you tell how to increase the snake's speed

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

    Hi kris, I know this is an old video for you to reply to, but I made a text file and turned it into fruit.js, but for some reason it still says fruit is not defined. I have linked the script and everything you did in the video, but it is not working.

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

    I keep getting the error message "Snake is not defined"

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

    It draws a rectangle, if I give a width/height to the canvas (without it draws a square). Which doesn't make any f.....
    sense, cuz I give it same dimensions!

  • @palofar9115
    @palofar9115 5 лет назад +1

    Hey CodeWithKris, is there an easy solution for the snake not to turn to opposite direction? Like if going up, can't turn down, only left and right. I tried to mess around with the switch case, but i couldn't get the if statements to work. Any ideas? Thanks!

    • @KrisFoster1
      @KrisFoster1  5 лет назад +1

      Hi @Palofar, if you want to edit the existing switch statement to make opposite movements impossible you could so something like this:
      case 'Up':
      if (!this.ySpeed > 0) {
      this.xSpeed = 0;
      this.ySpeed = -scale * 1;
      }
      break;
      ....
      This means we are only changing the direction to 'Up' if the snake is not going down already. Hope this helps.

    • @palofar9115
      @palofar9115 5 лет назад +1

      @@KrisFoster1 woow weee! It works. Thanks a lot man!

  • @illtcmusic2319
    @illtcmusic2319 5 лет назад +2

    very well explained, thanks mate!

  • @cassiodias1965
    @cassiodias1965 6 лет назад +2

    Nice!! Please push the code example to git

    • @KrisFoster1
      @KrisFoster1  6 лет назад +3

      Hey Cassio, thanks for your comment. I've updated the description to include the GitHub repo: github.com/kriscfoster/Snake-Game :)

  • @AntiMassovka
    @AntiMassovka 5 лет назад +1

    Man, can you explain the logic behind the pickLocation method? Great tutorial, just can't understand, why we do all this: * rows - 1) + 1) * scale; Appreciate your work!!!

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

      me too

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

      i think even if we delete -1 ) +1 wont be problem because is is same this.y = (Math.floor(Math.random() *
      rows) ) * scale;

  • @tntaco07
    @tntaco07 4 года назад +4

    When my snake grows to three for some reason the last one gets left behind

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

      me too

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

      @@fonta22 I did manage to get it fixed, but I do t know what did it. I would say look at it very carefully to see if you accidentally pressed an extra button or put the wrong symbol.

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

    what is the app that he uses for the coding I want it

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

    I always get the error "Snake is not defined as Setup" what am I doing wrong??

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

      I had the same problem. Make sure that the Snake.js file is refferenced before the draw.js file in the index.html

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

    what is ctx

  • @jackson5186
    @jackson5186 5 лет назад +1

    I am getting the following error,
    Uncaught ReferenceError: Snake is not defined
    at setup (draw.js:10)
    at draw.js:12
    The error is at the part where the code says, "snake = new Snake();" after the "(function setup() {" in the draw.js file.
    Please any help will be greatly appreciated. Thanks

    • @jackson5186
      @jackson5186 5 лет назад

      Also on the "const rows = canvas.height / scale;" and "const columns = canvas.width / scale;" of the draw.js file, the height and width stay white and don't change to blue like yours did. I don't know if this could be causing the error. I am also using Sublime Text.

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      @Jackson have you looked at the source code on GitHub to see if you're missing anything?

    • @jackson5186
      @jackson5186 5 лет назад

      @@KrisFoster1 It is fixed now, thanks.

    • @prernamayank5355
      @prernamayank5355 5 лет назад

      @@jackson5186 hey I m having the problem height and width stays white what to do please help me out?

    • @meoteormonter4582
      @meoteormonter4582 5 лет назад +1

      You already solved it but, in the HTML file try putting the snake.js file first then the draw.js file

  • @truongezgg
    @truongezgg 5 лет назад +1

    Thanks sir! very helpful

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

    how do we use fruit as a variable, you never define it

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

      Hi @Blazeben10, we create a script called fruit.js & add it to our html file before snake.js & draw.js. This means we can use the class defined in fruit.js in the other files. Take a look at 13:31 to see this part of the video. Thank you!

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

      @@KrisFoster1 Not very useful as I made this and it still doesn't work :(

  • @MrRaziPL
    @MrRaziPL 6 лет назад +1

    Hi Kris! How about doing it class based way? I think some more of ES6 would be nice.

    • @KrisFoster1
      @KrisFoster1  6 лет назад

      Hi MrRaziPL, yeah you could definitely do it like that, it's just a matter of which you prefer

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

    I keep getting an error that i didn't define Snake in draw.js, what do I do

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

      Have you got the script tags in the html file? If you have that already note that the order of these is important. snake.js needs to be before draw.js so it is defined first.

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

      @@KrisFoster1 Thanks 😀

  • @ATAnime97
    @ATAnime97 5 лет назад +1

    bit late but my code are grey out is there a reason?

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      Hi @AT97 thanks for the comment, I'm not sure I understand your question.

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

    what program is this?

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

      Hi Qayl Maherali, I'm using sublime text 3 as a video editor in this video. Thank you

  • @nicklandreth2527
    @nicklandreth2527 5 лет назад +1

    When is javascript loaded into the file by the browsers? Does it follow the flow of the document or does the browser pick our scripts at a certain point?

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      @nick it is loaded at the point you add it in the HTML. If script A is a line before script B then A will be loaded first

    • @nicklandreth2527
      @nicklandreth2527 5 лет назад +1

      @@KrisFoster1 thank you Kris I finally found that answer. Just couldn't figure out how to ask my question.

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

      yo thanks was my problem too

  • @NicolasColaleoDev
    @NicolasColaleoDev 5 лет назад +1

    how u make the snake move faster??

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      I think this was answered below already but if you decrease the value of your setInterval it will speed the game up. This is the value we are talking about: github.com/kriscfoster/Snake-Game/blob/master/draw.js#L27.

  • @marco7403
    @marco7403 5 лет назад

    How to make it stop when it hits the borders??!! Someoneee plsss help

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

    Object Oriented JavaScript is so hard I'm actually gonna cry

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

      I can't do it man

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

      Keep going @SmellTheL, we all believe in you!

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

    hi :D why do you use the setup function inside of ( ) ? is it already exist the setup function?

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

      its to call it as soon as the program opens

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

    Thank you so much

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

    Hello i wanted to speed up my snake and make it moove smoother. What can i change?

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

      You have to change the time interval in the function setup()
      Example:
      (function setup() {
      snake = new snake();
      window.setInterval(() => {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      snake.update();
      snale.draw();
      }, 250);
      //

    • @Jackson-dk7kq
      @Jackson-dk7kq 4 года назад

      @@SpairutAlfa im kinda lost at the part where he use arrays in this.update and this.draw function,can you help me with this?

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

    THANK YOU KRIS!
    This is my first javascript project that I haven't given up on after a few hours!
    Your tutorials are very insightful!
    I've been making new versions of Snake Game with my own ideas!
    I've learned so much from these two tutorials so thank yo so much!
    Here is all of the versions of my snake game if anyone wants to play them or learn from my code!
    drive.google.com/drive/folders/19fMqMuWwXxGuGvMsaYqz8ket-QB2lM5v?usp=sharing

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

      Well done @Lastered, that's great to hear!

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

    Hello Good day, How to add an another fruit in this game? What code should I type?
    Btw. This video was amazing I learned a lot, thanks for helping us

  • @nivekmozart6183
    @nivekmozart6183 5 лет назад +4

    I'm so confuse on how the snake adds another tail, everything from there doesn't make sense at all to me. Though this is an amazing tutorial, thanks!

  • @killerfrog4541
    @killerfrog4541 5 лет назад

    this might be a bit of an old video for you to answer this, but i'm using notepad for this and i'm not sure how to add the draw file any suggestions?

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      @Killerfrog it should be the same. If you create the file on your computer you can open it in notepad then

    • @killerfrog4541
      @killerfrog4541 5 лет назад

      @@KrisFoster1 yes thank you, I did try and it does work thank you I'm just new to this so I was worried xd

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

    I have this problem:
    Uncaught ReferenceError: Snake is not defined
    what can i do?

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

      i got too but i ve had error somewhere in snake.js so i fixed errors in snake.js and it worked. So try to control snake.js if everything there is correct.(sorry for bad english)

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

      @@noTmeDev yeah, just checked, only one little mistake :D

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

      Glad you got this sorted out @Sami Ketola!

  • @randomvideos5200
    @randomvideos5200 4 года назад +4

    Woow, this is definitely not beginner friendly ''''xD

  • @ominoustoaster
    @ominoustoaster 5 лет назад

    i have a mac, i dont know how to open an editor so i can even start. what software do you use to make this?

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      Hi Jonah, I'm also using a Mac. There are many different code editors you can use. For getting started I'd suggest doing a Google search for Sublime Text 3 & downloading it from there.

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

      Try VS Code and then download the 'open in browser' extension!

  • @jaidyngrimes5051
    @jaidyngrimes5051 5 лет назад +1

    How did you get your file to open in crome?

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      You can either right click on the HTML file and click open in chrome, or you can open the chrome browser -> click file in the top menu -> click open

  • @Pxlarizar
    @Pxlarizar 5 лет назад +1

    What program do you use

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      Hi Zoomer, I use sublime text 3 as my code editor.

  • @matdfpv
    @matdfpv 5 лет назад +1

    when i do this, the snake wont move but everything else works

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      Thank you @Mateo If you have your code anywhere I can have a quick look & see if I notice anything

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

    I got these errors when trying to test the snake hitting the width:
    Uncaught SyntaxError: Unexpected end of input snake%20.js:38
    Uncaught ReferenceError: Snake is not defined draw.js:10

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

      try ordering the script-src tags in your HTML file

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

    snake.js:52 Uncaught TypeError: Cannot read property 'log' of undefined
    at Snake.eat (snake.js:52)
    at draw.js:20
    Snake.eat @ snake.js:52
    (anonymous) @ draw.js:20
    setInterval (async)
    setup @ draw.js:14
    (anonymous) @ draw.js:25
    owo when we started to add the eating it becomes an error

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

      Do you have a console.log statement on that line? If you do, make sure you haven't misspelt console

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

      @@KrisFoster1 hehe thank you i finally got it uwu

  • @maxkreeft7813
    @maxkreeft7813 5 лет назад

    mine is saying
    Uncaught TypeError: Cannot read property 'getContext' of draw.js:2 null
    at draw.js:2
    can someone help me?

    • @maxkreeft7813
      @maxkreeft7813 5 лет назад

      I downloaded his files from the second part but i still get the error

    • @KrisFoster1
      @KrisFoster1  5 лет назад

      Hi @Max, if you didn't solve this I think it could be related to your html file. Does yours have a canvas element with class="canvas" like this github.com/kriscfoster/Snake-Game/blob/master/index.html?

    • @maxkreeft7813
      @maxkreeft7813 5 лет назад

      @@KrisFoster1 yes it does have class="canvas"

  • @williamstorey5024
    @williamstorey5024 6 лет назад +1

    What editor is that?

    • @KrisFoster1
      @KrisFoster1  6 лет назад

      @William sublime text, it's my go to for web development

    • @lavisworld5142
      @lavisworld5142 5 лет назад

      I use light table ide

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

    .getContext doesnt work for me

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

    man, thanks for the effort and all, but i cannot hear anything... Sorry.

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

      Sorry to hear that @DownWithTheShip Media. Will try to make sure future videos have clearer audio

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

      @@KrisFoster1 Man, it´s really not that big of a deal, I really apreciate the effort of what you have done. For real. Tnks for answering my comment!

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

    Can i have your source code?

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

      Hi @Mohtasim Shovon, the source code is here: github.com/kriscfoster/Snake-Game

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

    17:55

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

    after eating two fruits no more spawn T.T

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

      after two more mine stops working

  • @zman7357
    @zman7357 6 лет назад +2

    Too quite, can't hear anything