Sign in to follow this  
Goran Milovanovic

Wtetris: OpenGL tetris clone (for those who want/need an example).

Recommended Posts

I wrote this OpenGL tetris clone in C. Here's a quick video that shows the game in action:

[media]http://www.youtube.com/watch?v=vWmDVjVb9eM[/media]

There are many tutorials that cover OpenGL and various other libraries, along with tutorials that cover the basics of C, but there are very few approachable examples of actual games that one could study.

I by no means claim that this game is ideal from that perspective, but there's not a whole lot of abstraction to wade through, and it's relatively well organized ( ... I think - Any opinions to the contrary would be welcomed, of course ).

You can get the source code here: [url="https://github.com/GoranM/wtetris"]https://github.com/GoranM/wtetris[/url]

Also, if anyone has any specific questions relating to the code, or the design choices I made, feel free to ask.

Share this post


Link to post
Share on other sites
3Ddreamer    3826
Hi,

I like your concise video, Goran.

This is exactly the kind of creativity with simple games that we know can be done for learning. The newbies should really look into your coding because I see a bunch of good knowledge nuggets and some new things which I have yet to grasp, too. Hey! You guys have to see this!

It's also good to see the C language and SDL being used, encouraging people to not jump on the band wagon or run with the herd but other languages can be very effective!

Great stuff!

Thanks,

Clinton

Share this post


Link to post
Share on other sites
ultramailman    1720
Hello
Nice, I downloaded it, and noticed the source code is pretty short. That makes me feel like I am doing something wrong, because my game's source is about double of yours, and it's still not finished.

A question: I am not familiar with cmake, but the source looks like c89. Why not use c99?

Share this post


Link to post
Share on other sites
Thanks for the kind words.

[quote name='ultramailman' timestamp='1352339524' post='4998689']
A question: I am not familiar with cmake, but the source looks like c89. Why not use c99?
[/quote]

I didn't really try to follow any given C standard -> The C that I wrote is simply the C that I know.

Why does it look like c89?

Share this post


Link to post
Share on other sites
ultramailman    1720
[quote name='Goran Milovanovic' timestamp='1352411352' post='4999037']
Thanks for the kind words.

[quote name='ultramailman' timestamp='1352339524' post='4998689']
A question: I am not familiar with cmake, but the source looks like c89. Why not use c99?
[/quote]

I didn't really try to follow any given C standard -> The C that I wrote is simply the C that I know.

Why does it look like c89?
[/quote]

Ah, I see. Well, it looks like c89 to me, because the variables are all declared first, before any function calls or loops. On closer inspection though, that's not always the case; there is one variable declared after a function call in label.c. Perhaps it's a msvc feature? I have no idea, only used gcc here.

Share this post


Link to post
Share on other sites
I wrote and tested the game on Linux, using the gnu C compiler, so if you're using cmake to generate a visual studio project file, there's a possibility that something is falling through the cracks, since I didn't test that setup.

Although, it's more likely that you don't have the right relative paths in main.c, to both scene.rawd and those base shaders; the program has to be able to find and load those at runtime. Initially, things are setup assuming that there is a directory called build_wtetris in the same directory where the wtetris directory resides.

So, it's assumed that there's a directory tree looking like this:

[code]
somedir
-- build_wtetris
-- wtetris
[/code]

You didn't create the build_wtetris directory within wtetris, did you? The relevant files would not be found in that case, and since I didn't bother writing any error checking code to test that condition, it would result in a segfault.

Other than that, it's hard to say without a stack trace.

Share this post


Link to post
Share on other sites
ultramailman    1720
Haha thanks, I got it to work. My problem was that I misunderstood the readme, and mkdir'ed build_wtetris inside wtetris-master. And my other problem was that I didn't rename wtetris-master to wtetris. At first I even googled everywhere about ioftell, because gdb said thats the place where it was crashing.

On the game: nice and simple, I like wireframe. Cool ripple effect too. I'll definitely keep this for studying later.

On c99: Now I understand, you are using c89 with gcc extensions (I thought you were using windows).

Share this post


Link to post
Share on other sites
Glad you got it resolved.

If you want to provide a patch, on github, to check for "file not found", and to do the right thing when that's the case, feel free to do so.

Same goes for anyone else -> Small fixes, or even new features are a good way to learn about git and github, for those of you who are new to either.

[quote name='ultramailman' timestamp='1352751655' post='5000311']
On c99: Now I understand, you are using c89 with gcc extensions (I thought you were using windows).
[/quote]

Well, as I said, it's just C that I know, but in reading the following, I'm pretty sure that it's c99: http://cboard.cprogramming.com/c-programming/62227-c89-c99.html

Share this post


Link to post
Share on other sites
Sign in to follow this