Making a Game With C++ and SDL2
Вставка
- Опубліковано 22 тра 2024
- Making a Game With C++ and SDL2 - GMTK Game Jam 2021
A year ago, in my "Learning SDL2 in 48 Hours" video, I used the 2020 GMTK Game Jam as an opportunity to try to learn how to use C++ with SDL2 (a low level audio, input, and graphics library that you've probably heard of). In this video, I attempt the challenge again, for the GMTK Game Jam 2021!
Check out Twini-Golf here: polymars.itch.io/twini-golf
→ Source Code: github.com/PolyMarsDev/Twini-...
Codergopher's SDL2 series: • C++/SDL2 RPG Platforme...
→ Twitter: / polymarsyt
→ Twitch: / polymars
→ Join the PolySpace Discord: / discord
--Chapters--
0:00 Intro
0:29 Setting Up SDL2
0:45 The Theme (bruh)
1:11 My Secret Plan...
1:34 Entity & RenderWindow Class
1:46 Drawing a Sprite
2:12 My Game Idea
2:37 Initial Prototype
2:55 Prototype Code Explanation
3:39 Prototype Art
3:49 Tiles & Collisions
4:05 Collision Code Explanation
4:23 More Art & Directional Indicator
4:34 Level Saving/Progression
5:17 wait frick
5:38 Creating UI
6:07 DESIGNING LEVELS FAST
6:40 Sound Effects
6:47 Finishing Touches
7:08 Secret "Feature"
7:33 Conclusion
--Music (in order played)--
"Smooth and Cool" - Nico Staf ( • Video )
"Westview" - INTRNLCMD ( / intlcmd )
"Trance Music for Racing Game" - Bobby Cole ( • Trance Music for Racin... )
"Playtime" - Peter Godfrey ( • Playtime )
"il vento doro" - JoJo's Bizarre Adventure: Golden Wind
"Dreaming" - Stevia Sphere ( • Stevia Sphere - Dreami... )
"I Miss Summer" - Sro ( • Sro - I Miss Summer [V... )
"Bush Week" - Nihilore ( • Bush Week - Nihilore (... )
"Glider" - INTRNLCMD ( / intlcmd )
"Operatic 3" - Vibe Mountain ( • 🎵 Operatic 3 - Vibe Mo... )
"Breeze" - PolarChips ( • Breeze )
"Palms and Seagulls" - Timecrawler 82 ( • Timecrawler 82 - Palms... )
"Above All" - HOME ( • HOME - Above All [Synt... )
-If you liked this video, here are similar ones you might enjoy!--
PolyMars - Learning SDL2 in 48 Hours - GMTK Game Jam 2020
• Learning SDL2 in 48 Ho...
PolyMars - Learning Python in 2 Days - Pygame Community Jam
• C++ Developer Learns P...
PolyMars - Making a Game Using Discord's Bot API
• Making a Game With Dis...
Barji - Making a C++ Game with No Experience!
• Making a C++ Game with...
Randall - Programming a New Physics Engine for my Game
• Programming a new phys...
CodyCantEatThis - I Made The Legend of Zelda Boss Fights but they’re 3D
• I Made The Legend of Z...
Dani - Adding a Dragon Boss to my Game Because Steam is Mad at me
• Adding a Dragon Boss t...
Dani - He said I Couldn’t Make a 3D Game… So I Made One!
• He said I Couldn't Mak...
Sam Hogan - I Made a Game with Intentional Bugs
• I Made a Game with Int...
Sam Hogan - I Made the Hardest Game Ever
• I Made the Hardest Gam... - Наука та технологія
subscribe or get golfed 🏌
🧍♂️
G O L F E D.
@@cherryberry1345 this was probably a privated video 9 hours ago, he commented, and 9 hours later (aka now) he unprivated the video to be released to the public
anything but golfed
@@cherryberry1345 was programmed i think
I love how your game was so good it decided to take the entirety of the available ram
unused ram is wasted ram
im running it and its currently taking 32gb and counting help
@@jased8461 goated setup
There's also that innocent look... It wouldn't look out of place on the SNES with those shades of green and 2D shapes. You could build a golf level that looks like a Super Mario World screen. Inside a program that leaks more RAM than the SNES ever had - in a single frame.
@@not_herobrine3752 I guess i never waste my ram, i even use virtual memory so there is more to not waste!
Idk why but watching people create stuff without game engines is always oddly satisfying
hey Tantan, please create more rust games :)
love to watch your videos
Hi tantan
It truly is.
this is so true
Imo it's the bestest way of making games... though I personally think of it as writing a custom engine for the game, not as "not using" a game engine
I haven’t yet seen anyone talk about your game art, seriously, it’s very clean
frrrr
was thinking the same thing
Why does he draw them blurry tho
@@WinterNox because anti-aliasing is pretty cool I suppose
@@Dorbellprod He over uses it imo
Dude you're gonna have to teach me how you always get memory leaks in your games! I've always wanted to implement memory leaks but don't know where to start :(
I might be able to help you there
@@PolyMars haha nice deal
nope
Savage.
Just make everything public in a class, or overload lot of functions or kinda just badly organize your code and you're done. No need to pay $20,000
@@frosty7674 lmao
Memory leaks could be a really good theme for a game. Just finish the game before the game crashes, or worst your computer crashes.
At the end the score can be calculated based on the total amount of memory leaked throughout the game. The least the better.
ok mogba
Yeah but then it becomes pay to win since more RAM = easier gameplay
@@greg77389 You can complete the game with more ram but that wouldn't help with the overall score. More the memory leak lesser the score.
@@nishantmogha7679 Then there has to be an inital score or a set time limit. More RAM = more time to play = more score to accumalate.
That would certainly be an interesting form of code golf. Shorter code, shorter play time, win!
Most MBs of memory leaks per second any% speedrun
You know this is just BEGGING to be ported for the nintendo ds, right?
I mean, two screens... Stylus...
ohno
@@PolyMars you have to do it now (◕ᴗ◕✿)
@@PolyMars port it for nintendo 3ds. *now.*
@@PolyMars oh yeah
@@PolyMars Now, it must happen
Polymars: * hears the theme *
Polymars: My disappointment is immeasurable and my day has been ruined
Next Year: we need a new Game Jam idea!
Game Jam: No we do-
PolyMars: YES, YOU DO.
I love that you included the actual math in these videos. I try to pause and think how it works in a math equation.
u have to THINK? how old r u?
@@stxnw he included the Pythagorean theorem and slope form into code? I read it to understand how the hell he did it. I’m 15 btw.
@@joshkanyinda5569 oh ok then it’s fine. i was like that at 15 too
If you are interested in getting into gamedev, you will be using the Pythagoras theorem all the time, and try to understand the atan2(x, y) function, it's really important.
I recommend you getting into interesting pre-calculus stuff, mainly trigonometry, it's used a ton in everything.
For example sin(angle) returns a 'y' position and cos(angle) returns a 'x' position of a circle, that's something that usually high schools don't teach, but it's very important. The movements of the ball of this game are for sure using sin(angle vs mouse) for 'y' velocity and cos(angle vs mouse) for 'x' velocity.
If you graph it you will see that if you draw a line for each position in the circumference starting from the middle, the length will be the same, which in linear algebra is called magnitude, this means that the force that it is applying is the same for each direction.
Hope you find it interesting, good luck.
The actual friction law would have the friction to be proportional to the velocity (maybe plus a little constant to lower the final tail of the movement). I think that way the movement would look more realistic
oh that's interesting, thanks!
But IRL the golf ball will do some bouncing at higher speeds, meaning it has no ground contact at those times and thus will have less friction than a slower moving ball. Plus, you'd actually be simulating a particle moving through a fluid of a certain viscosity rather than simulating a ball rolling on a rough surface.
Friction is independent of speed tho.
@@silience4095 Well, not really. Friction in a fluid is directly proportional to the speed, when v is small, or to the square of the speed, when v is big.
Look up, for example, Stokes equation for a sphere moving into a fluid.
@@fuji_films That is aerodynamic/hydrodynamic drag. Also, there's pressure drag, friction drag, wave drag, and induced drag. You're talking about the total, which is only partly due to friction. So, no, I wouldn't say that friction can be used interchangeably with drag. They don't mean the same thing.
In the comment thread, we are talking about the classic friction. Static, rolling, and sliding. None of those 3 depend on speed.
4:34 Maybe it would be nicer if you store level configuration in a JSON file then deserialize them on the fly using libraries such as nlohmann/json or similar. Then you don't need to painstakingly hardcode every level. And by using external data it would be easier to expand your game
LDTK, which spit out a JSON. So you even have a very competent level editor!
I literally love your use of graphics to visually explain how your code works. 10 outa 10
Was getting into c++ myself finally and in a breif handful of frames you solved my compiler needs, thank you
Well done. Amazing job. I wouldn't stress too much about the memory leaking. This is how we learn and become better developers. Keep going!
The editing is just top notch! I really like your style.
well done, I participated in that game jam too, really excited to see your work for the upcoming brakeys game jam 2021.
I lovve your videos, they motivate me so much to learn new libs and c++ itself!
The king is back 👑
YOUR the king!
No your the general
@@wit2817 you're * jk jk
Hi
Oh hello there
He is back! Great video polymars, great attempt 2 of the challenge
Another banger as always. Great work, Dude!
Goodgis
Fantastic spin on the theme! It's unfortunate about the memory leak because it looks great.
Also you're so close to 100k subs! You'll get there soon :D
Really liked the game concept. Too bad about the memory leaks but it's definitely a learning experience! Great stuff!!
Wow! 100k! Congrats, keep up the great work!
i relate too much on your reaction to the theme lol. great video as always man, also you're close to 100k! :DDD
I havent looked at the code, but seeing it from just this, most likely you are passing a texture by value instead of a reference, this makes your game building duplicates and pushing the memory pretty quick. Been there ;)
Pointers, pointers, pointers!
@@nikkiofthevalley i think every1 hate pointers..
@@celmaibunsamper4283 At this point (ha!) I hate them even more than I did when I posted that, I've had to do a lot of pointer arithmetic and binary operations recently
@@celmaibunsamper4283 fr
@@celmaibunsamper4283 If you hate pointers then C/C++ is too powerful for you. Stick with scripting languages.
"So basically I wasted 48 hours" Ahh yes, the life of coding
Top quality editing! Also, you're so close to 100k!
Ayyyy Congrats on 100k! I remember when you were at like 200! :D
Your videos with making games with SDL are so amazing that I want to launch Visual Studio and make some games with SDL2!
Great video! I really need to read into memory leaks more, and discover how not to do them, as I've just started doing more C++!
The game looks pretty fun and cute though! :D
I ran valgrind on the resulting binary. The only memory leaks were in the Intel DRI graphics driver on my system. There were uninitialized variables for SDL funtions called which should be initialized in anything that would be released. But, this is a quick game example. I did find that the strokes counter should have used std::str.append() instead of +. Also, I wouldn't want to make it too easy, but if the mouse is moved outside of the window area (or screen if you use SDL_WINDOW_FULLSCREEN) it stops increasing the stroke power. I might accomplish that via keyboard or fix this.
I always wanted to make games like yours, its just so cool and interesting how people make games, especially in a Game Jam. Good job!
Love the video and the explanation of how the game works, good work
Pog you’re about to hit 100k!! Good job buddy!
thank you lego man!!!
@@PolyMars wait what last time i saw you, your sub count were on 50k how did your subcount go high
@@yeppiidev yt reccomended his video a lot ,
i really like the way it turned out. not using an engine is a challenge in itself but this game is actually very fun. awesome work !
the 200 megs / second are probably the funniest thing i heard all day
love your videos
Congratulations on 100k!
When the world needed him the most he returned
"Don't get me wrong, I'm still gonna steal his code."
Too relatable.
Congrats on 100k subscribers!
Dude I am not into game dev that much but your content is great love the humour and sarcasm
I was waiting for your video plz upload more often ✌
7:09 hey thats me
The memory leak is a bonus feature, it is all connected you know. 😂 Well done, none the less!
Great video, as always!
Very good video! Enjoyed it very much!
Here's a tip:
Use a debug flag with the compilation command and then use a program like valgrind to analyse the executable. This'll help you track down memory leaks
Would've been chadly if you simply said the memory leaks were a feature and not a bug. Also you make great content. I've learned a lot about game development and art design from you. Your games always look really nice and have a really consistent style.
The level saving code was very intense, great video!
I’ve just started gamedev so these videos to me are amazing to watch. BTW you are still better than me so congrats
Fun fact: these videos makes our days better
5:40 Among us!
You mean m o g u s💀
Congrats on 100k my guy
Can't wait for you to get your 100k Plaque btw great video 👍🏼
Yay, a new PolyMars video! Maybe I guess this night could get better after all!
Also, you're so close to 100k, Glad you've gone so far!
edit: yay poly got 100k :>>>>>>
He got it!!!
113k now. Lolz.
@@wateryagarvideos5186 Yeah lol!
Cool, can't wait for you to review Opera's GX "No-Internet" Jam. I'm also participating :D
100k subs :D Congrats!
100K! Congratulations!
i can see it in a near future
"so, i use java to avoid memory leaks since the garbage collector should take care of that for me but i still got memory leak"
just kidding tho, great job making it, will try it for sure
This is so entertaining and motivating, tnx mah man
Congrats on 100k subs!!
Niiiccceee I’ve always wanted to have memory leaks in my games but could never figure out how to get them to work
When used improperly old things like c and even c++ can cause issues, be slow, break systems, and be very insecure…
But when harnessed correctly C is one of the fastest most efficient and powerful programming languages you can write
Love your video editing, it's hilarious
poly mars videos are always a treat
I liked it because you didn’t used any engine, just some c++libs! That’s cool! I’ll check your channel for more content like this, it’s my first time here
I'd love to see a video where you fix the memory leak. Should be a fun experience.
its so funny last time i watched this vid i knew nothing about game dev and now somehow im using SDL2 to make a game and now i can relate to everything in this vid lol
Congratz to 100K subs!!
“ I guess it was a learning experience or something” lol
It was a fun jam for sure. My brother and I participated as well
These challenge videos keep getting more interesting xD
Dham good vid, you just earned a sub my man!
thanks!!
When I saw you didn't unload your level when it's finished I knew something would happens with memory leaks lmao
lololololol
7:31 IM IN THE VIDEO
x)
@@YessoN-YT tu fais quoi ici ????
@@casters._. Toi aussi tu fais quoi ici x)
@@YessoN-YT tu connais ce youtuber ?
Nice, the first sprite you created was a perfectly timed ad for me! ^^
congratulations 100k!!!
How the hell are you so creative?
You don't need to fix memory leaks, just give it a description like: "Use less than () strokes or the game will crash" :)
Happy 100k Poly!
this was real informative, thanks for sharing
I highly recommend using visual studio instead since it shows the amount of memory being used by the application, or just have task manager running when you run the program
Looks sick. Did you figure out where the memory leak was coming from?
yeah, I apparently can't use SDL properly- I was creating a texture from raw pixel data every frame without destroying it
@@PolyMars I'm not a programmer >:(
@@PolyMars this applies for a lot of things in programming, but generally resource loading/initializing is very intensive, and you should do it just once somewhere in a constructor or something like that
Thank you for getting me into C++! Now I know what a real programming language feels like after using C# for years.
Congrats on 100K subs!!
0:22 *he touched the lens so many times...*
I wish I could be on your level of programming. I'm an amateur at Godot a separate game engine
Then learn to make a game without a game engine
Right now i am making my own simple engine with plain C and OpenGL with the GLFW library
I have learned so many things because of the decision to not use a game engine
@@user-hl7lr8ld2i Hello, im kinda new to programming. If i want to make my own game, should i first study using game engine such as unity or not using game engine like SDL with c++? Thank you
@@michaelsanjaya2553 well if you want to make a game you should use a game engine
But if you want to learn how to program and maybe get a job later, learning how to make a game engine (or how to make a game with a library) will teach you so many things about programming in general
If you use a game engine you will learn how to program in that game engine but most of your skills will be useless ouside of that engine
If you make your own game engine or use a library like for example: SFML, Allegro or SDL you learn how to reder object and make your own systems
TL;DR:
if you want to make a game, use a game engine like unity or godot BUT if you want to learn how to program, making your own engine or using a library will teach you so much and will maybe be able to get you a job.
Have a great day and tell me what you are gonna do
@@user-hl7lr8ld2i Thank you very much for the detailed explanation! I think im going to do the 2nd option that is make my own game engine because i love to code. Is there any recommendation for the library in c++ or just start learning SDL like in the video??
@@michaelsanjaya2553 you said you were new to programming, then i would go with SFML. There are a lot of tutorial here on youtube and it is a lot easier then SDL.
Wow amazing video great effort man..Inspiring to watch and learn and make myslef too Thanks for sharing 👌👍😊🎉
Congrats on 100k!
5:41 when the UI is sus
Next challenge: Learn to integrate LUA(or other scripting language) interpreter with any engine, then learn this scripting language and use it as main game logic code.
pretty sure he did that in the pixel art one
and then import the code to roblox. (Roblox code is in lua)
Nice work, I am using this project for learning the SDL2 C++ game programming.
Yo almost 100k! An early congrats !!
2:26 That's what she said.
LMAO
😳
Note for programmers:steal everyone's code
{yes}
Congrats on 100k subs
You smart af bruh ! Keep making stuff
3:20 ratio
99K subs, congrats in advance for 100K
Congrats! You hit 100k subscribers.
The ending made me laugh ;) Thanks! C++ rocks! :)