The main premise of the game is we are going to have a read view of a SpaceShip which the player can move around the screen in x and y. The user can also rotate the ship around the different axis.
The sketch above shows the view of the ship and the axis of rotation, the class sketch below show the initial design of the SpaceShip class
The SpaceShip will have a shield with initial value of 100% which will be changed based on the game play mechanic (for example collisions will reduce the shield and I may update the value based on collecting assets)
By default the player will have 3 ships which will be decreased based on gameplay / collisions and there will be opportunities to add more ships based on score etc.
The following class diagram is a more formal version of the above
And in code looks like this
#ifndef __SPACESHIP_H__ #define __SPACESHIP_H__ #include <ngl/Vec3.h> #include <ngl/Transformation.h> /// @file SpaceShip.h /// @brief the basic spaceship class used for the game /// @author Jonathan Macey /// @version 1.0 /// @date 13/2/12 /// @class SpaceShip /// @brief this class encapsulates the spaceship state, and also controls, it does /// not have a mesh assosiated with it this is stored in the Models class class SpaceShip { public : /// @brief the ctor SpaceShip(); /// @brief the dtor ~SpaceShip(); /// @brief move this will set the position of the ship /// @param[in] _dx the change in the x position /// @param[in] _dy the change in the y position void move( float _dx, float _dy ); /// @brief rotate the ship in the three axis /// @param[in] _dx the change in the x rotation /// @param[in] _dy the change in the y rotation /// @param[in] _dz the change in the z rotation void rotate( float _dx, float _dy, float _dz ); /// @brief draw the ship void draw() const; /// @brief get the life value inline int getLife() const {return m_numLives;} /// @brief remove life inline void removeLife(){m_numLives-=1;} /// @brief get the sheild strength inline int getShieldStrength()const {return m_shieldStrength;} /// @brief reduce the sheild strength inline void reduceShieldStrength(int _s){ m_shieldStrength-=_s;} private : /// @brief the position of the ship ngl::Vec3 m_pos; /// @brief the x,y,z rotation values of the ship ngl::Vec3 m_rotation; /// @brief our transformation used to load to the matrix ngl::Transformation m_transform; /// @brief load our matrices to OpenGL shader void loadMatricesToShader(); /// @brief the number of lives for the ship /// this is set to 3 initially and will then change as the game progresses int m_numLives; /// @brief the strength of the sheild starts at 100% and reduces during the game /// based on collisions int m_shieldStrength; }; #endifWe can now write most of the methods if we ignore the drawing elements of the class. These are as follows
SpaceShip::SpaceShip() { m_pos.set(0,0,0); m_rotation.set(0,0,0); m_numLives=3; m_shieldStrength=100; } SpaceShip::~SpaceShip() { } void SpaceShip::move(float _dx, float _dy) { m_pos.m_x+=_dx; m_pos.m_y+=_dy; } void SpaceShip::rotate(float _dx, float _dy, float _dz) { m_rotation.m_x+=_dx; m_rotation.m_y+=_dy; m_rotation.m_z+=_dz; }It is now possible to construct a simple SpaceShip class in the main GLWindow and use it for storing the data values for the ship However drawing the mesh for the class is going to be a lot more complex and this will be put into the next post. For now here is the basic code and part three is here
No comments:
Post a Comment