Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

148 Neutral

About greerws

  • Rank
  1. greerws

    Greetings, Tyberthia here

    Tyberthia, One thing to add on is that no matter what rode you take, go in small steps. If you already have a great game idea, I'd reccomend not starting with it. You want to get to figure out the right path (from the great information above, or any other that you decide), and work on learning a bit first. Once you've got a good understanding, and maybe a couple really simple games done and polished (like Tetris and/or Breakout clones) then start in on that first original game. By starting on something like Tetris, you can learn how to create a game without having to worry about coming up with any of the specifics yourself. There's a great article on gameDev about this progressive approach, here. Your own path might be different, depending on if you start programming from scratch, or start with a higher level. Regardless, the basic principles still hold. Best of luck! Shawn
  2. greerws

    Where Should I Start?

    Danny, Your question is a bit open ended so hard to answer, especially as there are so many different ways to answer it. The best (although generic) answer is to find a way to learn it while keeping yourself motivated. That in itself can be a big challenge. With that in mind, I'd reccomend taking a look at the C++ workshop that was run here. While the actual workshop itself was conducted some time ago, all of the material is still here on Gamedev and still relevant. You can find the forum section for it here, and there introduction is here It does require a text be purchased, but on Amazon you can get it for less then $10 used, or for $20 on Kindle. I didn't take the C++ workshop, but I did do a large percentage of the C# workshop, which looked to mirror it with regard to the projects, etc. Is this the best first step? Maybe not. But I don't think it's a bad one. Shawn
  3. greerws

    Starting with game development

    Vibeth, I can't take credit for it, but the article here lays out a good path toward developing games. It talks about a lot of important things and can serve as a good guide. Shawn
  4. So the first thing you may notice is the Hermes tag on this post. I'm big on not coming up with title for a game until it's about done. After all, how you can name something when it doesn't exist. However, you have to call the project something. When I'm talking to my co-designer/artist/brother, I can't keep stating "Hey, in the Pac-Man clone with Om Nom Game...". So, as is popular with development, we gave the project a working title. The use of Greek God names as project titles came in a rather roundabout way, but it works. With that aside, we've started planning out the game. While I'm not quite ready to start programming the game (there is still a bit more I want to pick up from the Android Game Development book I've been working through), the more the game is planned out ahead of time, the easier it will actually be to create when I'm ready. The up side of this project is that since it's a Pac-Man clone, we don't have to worry about any of the actual rules in the game. I'm using the Pac-Man Dossier by Jamey Pittman (http://home.comcast.net/~jpittman2/pacman/pacmandossier.html) as my bible on all things Pac-Man. After reading through it a number of times, I can think I can make an identical clone, implementing all of the game mechanics covered in the dossier. The game screen is represented by a 28x36 grid (with the map covering 28x31). Have the extra outside the map included with the grid is important for the ghost targeting and path finding logic. Each of these grid blocks is composed of an 8x8 grid. These smaller units will be used to track exactly where Om Nom (Pac-Man) and the Spider (Ghosts) are at a given point. The map itself will be tracked and rendered using a 28x31 array of tiles. It will include which texture to use, and how much to rotate it by (degrees of 90). A null texture value simply means don't render anything there. I'm going to use a separate 28x31 array of Booleans to determine if a tile is traversable. Because all walls are placed between traversable squares, this will work (you will never have a wall between two adjacent squares. If two squares are adjacent and traversable, you can move from one square to the other). Spider (Ghost) movement shouldn't be too hard. Each of the 4 ghost AIs (when in 2 of the game's modes) will always move toward their given target tile. So a single spider class can hold all this information. Then I can inherit from this to create each of the 4 spider's logic in how they place their target. This should keep the code repetition for spiders minimal. My initial thought for controlling Om Nom is to split the playable area with an X. Touching the top quadrant (is it a quadrant if it's split with an X and not a cross?) will turn Om Nom up, if possible. Touching right will turn him that way, etc. I think this should keep the control pretty straightforward and easy. I'm also thinking on having both Om Nom and the Spiders inherit from a single drawable object class. This class will include the Texture and vertices to be used when drawing it. The vertices will be combined with the objects world coordinate offset to place everything on the screen. That brings me to my last subject of the day. I had a discussion with my artists, and we came up with a list of assets that we'll need for the game play (there will be some other things needed, but this is what we need to make the foundational game itself playable). Art assets: 32x32 pixels Om Nom (forward, left, back ) walking animation [Pac-Man] Om Nom death animation Spider (forward, left, back) walking animation [the ghost] Star [the power up] Donut [first fruit bonus points] Cupcake [second fruit bonus points] Tiles (curve spike, straight spike) [the walls] (We're currently undecided on what the Spider entrance area will look like). 8x8 Candy [the pellets] We couldn't think of any other art assets needed in the game play section. That wraps it up for today. Shawn
  5. greerws

    New Beginnings

    Matt, I like the idea of using the different boxes to represent different worlds in the game. Great idea! I'll look at using string for the map borders, but I was thinking about using spike strips (from Cut the Rope as well). I appreciate the feedback. Shawn
  6. greerws

    New Beginnings

    So as this is my first entry, in my first blog, it's actually a bit intimidating as to what type out. Do I rework this until I come up with something meaningful, or just throw out the first thing that comes to mind? Do I go into some great depth with what my purpose is here, or do I simply let the blog speak for itself over time. In the end, I think I'll take the lazy route and just throw this out there and let it be what it will. With that, I have begun a new endeavor. I have dabbled in game development for some time now. I've done straight C++ and then went on to poke around Ogre some. I then looked to going to more "refined" (read 'easier') route and delved into some XNA. That spark kind of fizzed out and I got busy, and didn't do much game programming for some time. Finally, a few weeks ago I got the bug again, and when trying to decide how to apply it, I decided to give the Android a shot. I had learned Java, so thought this might be a good way to try and apply it. I picked up an Android Game Development book, and have been plugging away for some time. So, now I'm at the point where I'm looking to dig into my first couple of projects outside of the book. While I have a couple games in mind (in increasing difficulty), I'm going to start with something known. A Pac-Man clone. I did not realize prior to researching how in depth some of the AI is for Pac-Man. Each of the 4 ghosts has very distinct and specific AIs that they utilize. It's actually a pretty interesting system, and implementing all of this logic will be a good "work out". This gives me a game to create that's a little bit beyond a simple pong or Tetris (which I've done), but I don't have to worry about coming up with the game design. The only real change I'm planning on making from the original Pac-Man is the art assets. At the recommendation of my brother (who is my artists for everything I'll be developing), we'll be borrowing Om-Nom from one of my favorite android games, cut the rope. He'll be eating candy and stars, and getting chased by spiders. With a short term test bed game and a couple of original game designs planned (to be revealed at a later time), my brother and my game development venture is under way. Face Punch Games. Shawn
  7. Thank you for the quick response. I'll give some of these a try and see if I can generate the look I'm going for.
  8. greerws

    Android - Partial Transparency

    Simon, I appreciate the quick response. I think your last idea is even better then what I was originally picturing. I think I'll give that a try and see how it works out. Thank you! Shawn
  9. Hello all. I'm laying out the design for a game on the Android using openGL ES, and I've stumbled upon an issue that I can't seem to find a solution for. I'm looking to be able to draw something on the screen, like a wall, then have a character pass behind the wall. When the character is behind the wall, I'm looking to apply an auro of transparency on the wall in front of the character, enabling you to see the character behind, without making the entire wall transparent. Any help anyone could offer any help, or at least point me in the right direction, I'd greatly appreciate it. Shawn
  10. Hello all. I'm laying out the design for a game on the Android using openGL ES, and I've stumbled upon an issue that I can't seem to find a solution for. I'm looking to be able to draw something on the screen, like a wall, then have a character pass behind the wall. When the character is behind the wall, I'm looking to apply an auro of transparency on the wall in front of the character, enabling you to see the character behind, without making the entire wall transparent. Any help anyone could offer any help, or at least point me in the right direction, I'd greatly appreciate it. Shawn
  11. greerws

    State management

    First off, I know there's already a lot out about state management. However, I couldn't find anything that could help answer the question. I've got the basic idea of the states down, using the method put forth here: http://gamedevgeek.com/tutorials/managing-game-states-in-c/ Basically create a vector of states. The problem I'm having, is that I don't know how to go about filling out the handleEvents function of the state itself, specifically regarding any of the windows and message events. Do I have to write my own message handler class, then push messages through to it? Any help, or a nudge in the right direction would be appreciated. The applicable code is here. Most of it is just an empty shell as I've just been trying to get the handleEvents function working. <gameState.h> #ifndef GAMESTATE_H #define GAMESTATE_H #include "gameEngine.h" #include "windows.h" class GameState { public: virtual void init() = 0; virtual void cleanUp() = 0; virtual void pause() = 0; virtual void resume() = 0; virtual void handleEvents(GameEngine* game) = 0; virtual void update(GameEngine* game) = 0; virtual void draw(GameEngine* game) = 0; void changeState(GameEngine* game, GameState* state) { game->changeState(state); } protected: GameState() {} }; #endif introState.h #ifndef INTROSTATE_H #define INTROSTATE_H #include "gameState.h" #include "windows.h" class IntroState : public GameState { public: void init(); void cleanUp(); void pause(); void resume(); void handleEvents(GameEngine* game); void update(GameEngine* game); void draw(GameEngine* game); static IntroState* instance() { static IntroState m_IntroState; return &m_IntroState; } protected: IntroState() {} }; #endif gameEngine.h #ifndef GAMEENGINE_H #define GAMEENGINE_H #include <vector> #include "windows.h" using namespace std; class GameState; class GameEngine { public: bool init(HINSTANCE& hInstance, int& showCmd); void cleanUp(); void changeState(GameState* state); void pushState(GameState* state); void popState(); void handleEvents(); void update(); void draw(); bool running(); bool quit(); private: vector<GameState*> states; bool mRunning; WNDCLASSEX wcx; HWND ghMainWnd; HINSTANCE ghAppInst; }; #endif gameEngine.cpp #include "gameEngine.h" #include "gameState.h" void GameEngine::init(HINSTANCE& hInstance, int& showCmd) { mRunning = true; ghAppInst = hInstance; wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wcx.lpfnWndProc = WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = ghAppInst; wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcx.hCursor = LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wcx.lpszMenuName = NULL; wcx.lpszClassName="Tetris Clone"; wcx.hIconSm = NULL; RegisterClassEx(&wcx); ghMainWnd = CreateWindowEx(0, "Tetris Clone", "Tetris Clone", WS_BORDER | WS_SYSMENU | WS_CAPTION| WS_VISIBLE, 500, 200, 320, 272, NULL, NULL, ghAppInst, NULL); ShowWindow(ghMainWnd, showCmd); UpdateWindow(ghMainWnd); } void GameEngine::cleanUp() { while ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } } void GameEngine::changeState(GameState *state) { if ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } states.push_back(state); states.back()->init(); } void GameEngine::pushState(GameState *state) { if ( !states.empty() ) { states.back()->pause(); } states.push_back(state); states.back()->init(); } void GameEngine::popState() { if ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } if (!states.empty() ) { states.back()->resume(); } } void GameEngine::handleEvents() { // let the state handle events states.back()->handleEvents(this); } winMain.cpp #include "windows.h" #include "gameEngine.h" #include "introState.h" #include "gameState.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR cmdLine, int showCmd) { GameEngine game; game.init(hInstance, showCmd); game.changeState( IntroState::instance() ); while (game.running()) { game.handleEvents(); } game.cleanUp(); return 0; }
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!