Hi Gypsy!
I think the experience that you had of trying to do something beyond your current capabilities (and being frustrated because of it) is very relatable.
I'm glad you've started again from square one. It can be daunting and confusing and, again, frustrating because of the gap between what you're making now and what you eventually want to make.
I can't quite understand how the "try to figure things out on your own" view is very useful. Of course, as you've experienced, copying code without understanding it isn't very useful either, but I think that learning how other people have solved problems is an essential part of learning programming (and probably anything else). I think that doing things on your own is also essential; it puts what you've learned in to practice and lets you know what you know, and what you don't know, and what you need to learn next, and helps solidify your understanding.
Proflific LOVE user josefnpat's first game was mostly copied code mixed with copied graphics (as mentioned in
this blog post), and then he went on to make heaps more (original!) games as you can see on his website. I mention this because I think it's an interesting point of reference, and it challenges assumptions you may have (or at least I had). I went into programming with a lot of assumptions about what I should and shouldn't do, "real programmers don't do/use that", and an anxiety about "do I need to learn this?", "how do I do this the proper way?", "am I using the best tools?" etc. I think that if I had instead tried to make small but real projects like josefnpat did I would have been more focused, and what was and wasn't necessary to learn right now would have been more apparent. (And I would have had more fun.)
I remember being in a similar situation to you right now I think. I was trying to make Tetris, and I managed to make a square and then I made it go down the screen, and then I think I made it go left and right using the keyboard, and then I was just totally stuck. I didn't know what concepts I needed to continue.
I found that reading other people's code, line by line, and trying to figure out what was going on, really increased my understanding more than whatever I was trying to do before that. I knew what if statements and functions and tables and all that stuff was, but until I really saw them in action I couldn't "think" in them, I couldn't imagine something and then code it. I also realized that the programming
process was also important, not just the solution but how one goes about getting to that solution.
I've written some tutorials including one on how to make a snake game:
https://simplegametutorials.github.io/snake/
These tutorials are my attempt at creating what I wish I had access to when I was just beginning. They involve reading code, but unlike a complete game with hundreds of lines of code to make sense of, they start off with just a few lines, and then the next step adds a few more, until the game is complete. My intention was to make each change to the code small enough that the new code could be easily read, and you do need to think a little bit about what the code does and how it works, but hopefully it's easy to digest being in bite-sized morsels. It also mimics the programming process of changing a little bit of code and then testing it.
It was also important to me that I made numerous tutorials so the reader could see the same concepts used again and again in slightly different contexts. Once you learn the concepts you can then apply them to your own things. For example, if I had read some of these tutorials before I tried to make Tetris maybe I would have thought "I'll use a grid with strings representing the blocks like in Sokoban, and a timer to move the blocks down like in Snake". I hope it gives the reader's imagination something to work with.
So, my advice would be going through those tutorials and the bigger and better tutorials
here and not just copying the code but reading them slowly and trying to understand every line (or if you don't understand something and you're feeling bogged down maybe making a note of it and skipping over it for now), and then using the concepts that you pick up in your own projects and expanding on them and experimenting.
My advice is probably terrible, but whatever you do I hope you have fun and enjoy the process of learning, and if you keep learning and practising then I'm sure you'll be making Zelda before you know it!
