Murdocki
Gebruiker
- Lid geworden
- 7 jun 2007
- Berichten
- 449
jullie kennen vas allemaal wel het spel xennon, ik probeer dit na te maken en nu ben ik bij het bouwen van de levels met hun bijbehorende vlagen van schepen. ik heb verschillende classes gemaakt namelijk:
point = een x,y punt
Enemy = bevat de locatie en beweging van een schip
Wave = bevat de informatie over een vlaag (nr schepen, type schepen, snelheid, enz enz)
ook zit hier een deque in waar alle schepen in zitten.
Level = bevat de waves die dit level gebruikt
het declareren gaat allemaal goed maar zodra ik vanuit de class Level een Wave toe wil voegen aan een deque dan crasht mijn programma, ik ben erachter gekomen dat m'n programma crasht zodra ik een Wave toe voeg aan EEN (ook in main() geprobeerd) deque of queue.
mijn vraag is of iemand iets weet of ziet wat ik fout doe, ikzelf weet het niet meer aangezien ik wel de structs point en enemy toe mag voegen.
wat ik geprobeerd heb:
x.push_back( *(new Wave()) );
x.push_back( Wave() );
Wave waves[20];
int x = 0;
x.push_back( waves[x] );
x++;
en nog meer dingen maar die weet ik niet meer
DE HEADER
DE CPP
GEBRUIKdit werkt dus niet
bij voorbaat dank,
Murdocki
point = een x,y punt
Enemy = bevat de locatie en beweging van een schip
Wave = bevat de informatie over een vlaag (nr schepen, type schepen, snelheid, enz enz)
ook zit hier een deque in waar alle schepen in zitten.
Level = bevat de waves die dit level gebruikt
het declareren gaat allemaal goed maar zodra ik vanuit de class Level een Wave toe wil voegen aan een deque dan crasht mijn programma, ik ben erachter gekomen dat m'n programma crasht zodra ik een Wave toe voeg aan EEN (ook in main() geprobeerd) deque of queue.
mijn vraag is of iemand iets weet of ziet wat ik fout doe, ikzelf weet het niet meer aangezien ik wel de structs point en enemy toe mag voegen.
wat ik geprobeerd heb:
x.push_back( *(new Wave()) );
x.push_back( Wave() );
Wave waves[20];
int x = 0;
x.push_back( waves[x] );
x++;
en nog meer dingen maar die weet ik niet meer
DE HEADER
Code:
#ifndef _HWAVE_H_
#define _HWAVE_H_
#include <ddraw.h>
#include <deque>
#include "EVideo.h"
struct point
{
int x, y;
};
struct Enemy
{
std::deque<point>::iterator Node;
int locx, locy;
int TicksToMove;//how many times Wave::Run should be called for me to move
int CurrTicks;//how many times Wave::Run has been called allready
Enemy( std::deque<point>::iterator pos, int tickstomove )
: Node( pos ), TicksToMove( tickstomove ), CurrTicks( 1 )
{
locx = (*pos).x;
locy = (*pos).y;
}
};
class Wave
{
private:
//variables loaded from file
LPDIRECTDRAWSURFACE7 lpDDSMyShipType;
int StartTime;
int TravelTime;
int Count;//number of ships in this wave
int Delay;//delay between ship spawns
int DelayCounter;
int HitPoints;
int Value;
//variables generated by class
std::deque<point> NodeList;
std::deque<Enemy> Ships;
public:
void SetStartTime( int var )
{StartTime = var;}
int GetStartTime()
{return StartTime;}
void SetTravelTime( int var )
{TravelTime = var;}
int GetTravelTime()
{return TravelTime;}
void SetCount( int var )
{Count = var;}
int GetCount()
{return Count;}
void SetDelay( int var )
{Delay = var;}
int GetDelay()
{return Delay;}
void SetHitPoints( int var )
{HitPoints = var;}
int GetHitPoints()
{return HitPoints;}
void SetValue( int var )
{Value = var;}
int GetValue()
{return Value;}
void AddNode( point var )
{NodeList.push_back(var);}
point GetNode( std::deque<point>::iterator x )
{return *x;}
void Init();
void Run();
void LoadSurface( CEVideo& Video, char* name );
void Draw( CEVideo& Video );
~Wave()
{lpDDSMyShipType -> Release();}
};
#endif
Code:
#include "hWave.h"
#include "resource.h"
void Wave::LoadSurface( CEVideo& Video, char* name )
{
if( *name == *"LittleBitch" )
lpDDSMyShipType = Video.CreateSurfaceFromResource(BMP_BITCH);
else
lpDDSMyShipType = Video.CreateSurfaceFromResource(BMP_BITCH);
Video.SetColorKey(lpDDSMyShipType, 255, 0, 255);
}
void Wave::Init()
{
//add the first ship
Ships.push_back( Enemy( NodeList.begin(), (int)(TravelTime/NodeList.size()/1000*30) ) );
//set the delaycounter
DelayCounter = Delay;
}
void Wave::Run()
{
DelayCounter--;
if( DelayCounter <= 0 )//its time to spawn a new ship
{
if( Count > 0 )
{
Ships.push_back( Enemy( NodeList.begin(), (int)(TravelTime/NodeList.size()/40) ) );//spawn a ship at the start of the nodelist
Count--;
}
DelayCounter = Delay/40;//reset the counter to let us wait with spawning
}
std::deque<Enemy>::iterator pos,
end = Ships.end();
//for all enemy ships
for( pos = Ships.begin(); pos != end; pos++ )
{
(*pos).CurrTicks++;
if( (*pos).CurrTicks > (*pos).TicksToMove )
{
(*pos).Node++;
(*pos).locx = (*((*pos).Node)).x;
(*pos).locy = (*((*pos).Node)).y;
(*pos).CurrTicks = 1;
}
else
{
(*pos).locx += ( (*((*pos).Node+1)).x - (*((*pos).Node)).x ) /(*pos).TicksToMove;
(*pos).locy += ( (*((*pos).Node+1)).y - (*((*pos).Node)).y ) /(*pos).TicksToMove;
}
//(*pos).Node++;
if( (*pos).Node == NodeList.end() )//if the ship is at the end of the nodelist
Ships.erase(pos, pos+1);//remove it from our list of ships
}
}
void Wave::Draw( CEVideo& Video )
{
std::deque<Enemy>::iterator pos,
end = Ships.end();
//for all enemy ships
for( pos = Ships.begin(); pos != end; pos++ )
{
Video.Draw( lpDDSMyShipType, (*pos).locx, (*pos).locy, NULL );
}
}
Code:
std::deque<Wave> MyWaves;
MyWaves.push_back( Wave() );
bij voorbaat dank,
Murdocki