I'm not all as familiar with linux as I used to be, so I might not be the best person to answer this. But you should probably go the OpenGL route. Here's their getting started guide, and there is also a binding for python if you'd prefer to do that. I'm not aware of many game engines that run on Linux per se, but since you probably want to code your own physics it might be better to write it all from the ground up. That's a lot to learn though, so it might just be better to use Wine and see if you can find something that would work with that.
Now I want to start on a big project for my winter break and I wanted to start making a diablo style top down RPG but the engines I have used wouldn't exactly work so any info would be awesome!
What engines have you already tried? In what way would they not work? I'm sure with at least some of them you can somehow kluge it around to get it to work for a top-down rpg.
But I would have to agree with Geraint about Unity if you want to go 3d. But if you're going for 2d (which may or may not be easier), since you already know Python, there's always Pygame. It's not technically an engine, just a set of modules on top of SDL, but it is definitely possible to make a full-fledged rpg with it. Both Unity and Pygame are pretty easy to work with (in my opinion), and have a lot of resources, info, and tutorials out on the Net.
There's also Panda3d. However, I haven't actually used this one before, so I can't tell you if it's decent or not. It has been used in several commercial games (some of which are almost like the top-down rpg thing you're going for). So you might want to give it a try, since it uses Python.
And I didn't think it existed, but google proved me wrong; there is a game engine with PHP as a scripting language, Raydium. I have no idea what it's like or if it will suit your purposes, though. But I guess it's something to check out if PHP is one of your strengths.
Just looking at your code, you tend to comment things that almost don't need it. While it's definitely better to be over commenting, you also tend to name variables and other things really well, so some of those comments seem redundant. That may just be my personal taste, but consider putting more relevant information in the comments instead of just repeating what's already said in the names you've given. I kinda don't like this game, because I lost against the computer when I first played haha! Other than that, it seems really well done!
I know Burgzergarcade has a series of tutorials on unity about making an RPG. His channel also has a short playlist of videos on C#, and I'm sure he'll be uploading more of those soon. I wouldn't recommend starting with an RPG, though. An RPG is a really big undertaking. You should try and finish several smaller projects, and then some medium sized ones first, so you can get an appreciation for just how much work an RPG would take. You can of course follow along with the tutorials about making a hack'n'slash, but make your own little games as you learn new stuff till you get the hang of it. As for an IDE, if you go with unity, it comes with MonoDevelop. Code::Blocks is usually just for c++ and isn't part of unity, however. You could try and learn both c++ and c# at the same time if you want, so long as you can keep them separate. Learning c++ will teach you a lot about what's going on underneath the higher level stuff, while c# with unity will get you a finished game easier and faster. But it's hard to keep languages apart when you're first learning. It can be done, however it might not be the best idea. That's up for you to decide.
Do you mean something like an inventory system? Or do want something where the player has to collect certain items before moving to the next area? Either way, you should probably make a class for those collectible items, and then make a list, or something similar, to store/keep track of what the player has collected. I wouldn't recommend getting an asset bundle, though. It wouldn't be exactly what you want for your game, and you might end up spending way more time trying to get to fit than you would had you just made it yourself.