Similar include guards, already checked and no :S..
An object is a game object, the class stores the object's position, the sprite instance it uses(Which in turn stores the object sprite's properties), the rotation, a boolean to test if its alive and so on. It also contains methods to move the object and rotate it.
The virtual method is because there are different types of objects. Here are two of the classes derived from object.
#ifndef SHIP_H#define SHIP_H#include <d3d9.h>#include <d3dx9.h>#include "Object.h"#include "SpriteInstance.h"#include "Application.h"#include "Object.h"#include "Input.h"#include <vector>class Ship: public Object{public: Ship(); Ship(D3DXVECTOR2, float, DWORD, SpriteInstance, bool); void update(Input&, Application&, std::vector<Object*>&);};#endif
#include <d3d9.h>#include <d3dx9.h>#include "Ship.h"#include "Application.h"#include "SpriteInstance.h"#include "Missile.h"#include "Object.h"#include "Input.h"#include <vector>float get_theta(){ return 3.0f;}float get_displacement(){ return 3.0f;}DWORD get_cooldown(){ return 170;}bool check_state(Object &object){ return object.get_state();}Ship::Ship():Object(){}Ship::Ship(D3DXVECTOR2 new_position, float new_rotation, DWORD new_time_since_last_shot, SpriteInstance new_sprite_instance, bool new_state): Object(new_position, new_rotation, new_time_since_last_shot, new_sprite_instance, new_state){}void Ship::update(Input &input, Application &application, std::vector<Object*> &game_objects){ //Move if(input.move_forward) { move(get_displacement()); } if(input.move_backward) { (-get_displacement()); } //Rotate if(input.turn_right) { rotate(get_theta()); } if(input.turn_left) { rotate(-get_theta()); } //Attack DWORD time = timeGetTime(); if(input.shooting == true) { if((time - get_time_since_last_shot()) > get_cooldown()) { set_time_since_last_shot(time); Object *object_pointer = new Missile(get_position(), get_rotation(), 0, (application.get_sprite("missile")), true); object_pointer->move(5); game_objects.push_back(object_pointer); } } std::vector<Object*>::iterator it; it = game_objects.begin(); for(; it != game_objects.end(); it++) { check_collision((*it)->get_position()); }}
#ifndef MISSILE_H#define MISSILE_H#include <d3d9.h>#include <d3dx9.h>#include "Object.h"#include "Input.h"#include "Application.h"#include "SpriteInstance.h"#include <vector>class Missile: public Object{public: Missile(); Missile(D3DXVECTOR2, float, DWORD, SpriteInstance, bool); void update(Input&, Application&, std::vector<Object*>&);};#endif
#include <d3d9.h>#include <d3dx9.h>#include "Missile.h"#include "Object.h"#include <vector>Missile::Missile():Object(){}Missile::Missile(D3DXVECTOR2 new_position, float new_rotation, DWORD new_time_since_last_shot, SpriteInstance new_sprite_instance, bool new_state): Object(new_position, new_rotation, new_time_since_last_shot, new_sprite_instance, new_state){}void Missile::update(Input &input, Application &application, std::vector<Object*> &game_objects){ move(5);}
Here's the collision function
//Check collisionvoid Object::check_collision(D3DXVECTOR2 &position2){ if((&position != &position2 && position.x < (position2.x + 32) && position.x > (position2.x - 32) && position.y < (position2.y + 32) && position.y > (position2.y - 32))) { set_state(false); }}
This is the entire list of errors.
>Compiling...
1>Direct3D.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\application.h(25) : error C2061: syntax error : identifier 'Direct3D'
1>Render.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : error C2061: syntax error : identifier 'Application'
1>Application.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : error C2061: syntax error : identifier 'Application'
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\application.cpp(96) : warning C4244: 'argument' : conversion from 'LONG_PTR' to 'LONG', possible loss of data
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\application.cpp(100) : warning C4312: 'reinterpret_cast' : conversion from 'LONG' to 'Application *' of greater size
1>Asteroid.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\direct3d.h(35) : error C2061: syntax error : identifier 'Object'
1>Logic.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : error C2061: syntax error : identifier 'Application'
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\logic.cpp(16) : error C2259: 'Ship' : cannot instantiate abstract class
1> due to following members:
1> 'void Object::update(Input &)' : is abstract
1> c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : see declaration of 'Object::update'
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\logic.cpp(20) : error C2259: 'Asteroid' : cannot instantiate abstract class
1> due to following members:
1> 'void Object::update(Input &)' : is abstract
1> c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : see declaration of 'Object::update'
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\logic.cpp(35) : error C2660: 'Object::update' : function does not take 3 arguments
1>Loop.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : error C2061: syntax error : identifier 'Application'
1>Missile.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\direct3d.h(35) : error C2061: syntax error : identifier 'Object'
1>Object.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\direct3d.h(35) : error C2061: syntax error : identifier 'Object'
1>Ship.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\direct3d.h(35) : error C2061: syntax error : identifier 'Object'
1>WinMain.cpp
1>c:\documents and settings\david\mis documentos\visual studio 2005\projects\dungeon\dungeon\object.h(33) : error C2061: syntax error : identifier 'Application'
1>Generating Code...
1>Build log was saved at "file://c:\Documents and Settings\David\Mis documentos\Visual Studio 2005\Projects\Dungeon\Dungeon\Debug\BuildLog.htm"
1>Dungeon - 13 error(s), 2 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========