This is a simple game I'm writing to test the idea of using games to teach C++. https://learncodethehardway.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Zed A. Shaw 8b61f7b86b Create an extras directory with files that are not related to the build but that I need to keep around for reference. 1 month ago
PPP3 Create an extras directory with files that are not related to the build but that I need to keep around for reference. 1 month ago
sdl2demo Bring in a simple SDL2 demo for completeness. It's running in a main.cpp to test SDL2 in C++. 2 months ago
sfmldemo A bit more working on goc to support windows. 1 month ago
.gitignore Forgot the gitignore. 2 months ago
LICENSE Initial commit 2 months ago
README.md Now you can move the square around with the keyboard. 2 months ago

README.md

Simple C++ Game Study

This repository contains all of my research into C++ as the next intermediate language for Learn Code the Hard Way. You can read my first blog post Exploring the Replacement for C as an Educational Language to read my thoughts on C++ as a first test. The end goal of these projects is to learn C++ well enough to make simple 2D games for a course. The course will teach:

  1. C++ Basics -- Just like all my other courses.
  2. Game Dev Basics -- Keeping it simple and mostly as a vehicle to learn C++ and...
  3. Defensive Programming -- Learning how to crash C++, prevent crashing, test it, etc.

Another way to put this is I want to teach people how to make games that don't crash, and C++ is a great language for learning both...because it can make games and tends to crash.

Current Status

The sfmldemo currently contains a very bare build using Meson to build a SFML project. This currently builds on Windows with MinGW but I haven't tested it anywhere else. The build takes the example code from imgui-sfml and makes it work, so you have a game window with a working GUI in it already. That is actually remarkable feat on Windows.

Windows

To get this working the rough (ROUGH) steps on Windows are:

  1. Get MinGW and Meson installed.
  2. Run .\setup.ps1
  3. meson compile -C builddir
  4. .\builddir\sfmldemo -- That should run it and you see a window with ImGUI's demo panel.

WARNING: You should look in the setup.ps1 and reset_build.p1 files for how a build is actually configured. The most important line is at the bottom meson setup -Ddefault_library=static builddir which properly configures the build so that the sfmldemo.exe program actually runs. Without the -Ddefault_library=static the sfmldemo.exe file will not have the .dll files it needs and will silently fail. If it fails to start then run start builddir and double click on it to get the error messages. Then run reset_build.ps1 to get a good build.

OSX

  1. Get XCode and Meson installed.
  2. Run ./setup.sh
  3. meson compile -C builddir
  4. .\builddir\sfmldemo -- That should run it and you see a window with ImGUI's demo panel.

I'll have more extensive instructions in a later blog post, but if you have time try this out and let me know how it went at help@learncodethehardway.com. Please let me know if you tried a different compiler, Windows version, etc. If you're on OSX or Linux it should work the same but Linux people might want to use their package manager instead.

"Keyboard without any keys"

If you get a weird error message of, "We got a keyboard without any keys" it's because of a security feature in OSX. Go to Security settings->Input Monitoring and select your Terminal. Check it, enter your admin password, then restart your Terminal. Now you can...read the keyboard in your own software.

No, this does not enhance security at all. These people have gone full on insane at this point.

Linux

I actually don't have a Linux computer ready to test, but if you have a brand of Linux you like then try the OSX instructions and email me at help@learncodethehardway.com.

SDL2 Test

One of the goals is to use a simple framework that provides many things people need for a game. SFML fits this goal because it comes with graphics, audio, network, and threads in one C++ library. It's also useable from multiple languages, not just C++, so it has more potential for spin-off courses in the future. Finally, the same code seems to work the same on all platforms.

I added one more subproject sdl2demo since I know I'll get people asking, "Why don't you just use SDL2?!" This uses a similar build to the SFML build, but it just creates an SDL2 window without ImGUI. Why you may ask? Because SDL2 is not really cross platform. If you look at the ImGUI+SDL2 demos you'll notice this list:

  • example_sdl2_directx11
  • example_sdl2_metal
  • example_sdl2_opengl2
  • example_sdl2_opengl3

The list goes on, and on, and each of these has slightly different code. You have to make different contexts, different variables, different options, depending on if you're on OSX Metal vs. OpenGL2 and it looks like there's no "just render in the window" option. Add onto this the problem that SDL2 seems to be the only "Game Library" that doesn't have built-in audio? You have to use SDL_Mixer. Do you need to load images (very common in a game), you need SDL_Image.

Finally, SDL2 works fine in C++ (as demonstrated by the sdl2demo) but SFML is actually C++ so working with it is going to be easier. It can also be a nice study project for people who want to learn more. With SDL2 there's a constant mental translation going on between C and C++, so it's not going to be as attractive for education.

When you combine the lack of cross platform code, the lack of C++, and the need to use many different libraries just to make SDL2 as capable as SFML, I'm going with SFML for the course. If you have a nice demo that shows me a single piece of code that compiles everywhere and has everything like the SFML demo then show me. I'm always open to be proven wrong.

Next Test

A more complete demo that uses the various features of SFML, like audio and maybe joystick controls. The idea is to create a "spike" that runs the major features of SFML in order to make sure they're available on different platforms.