Игра На С++ Наследование

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
уже есть объекты с наследованием Герои и оружие
хотелось бы собрать из этого игру но пока не ясно направление дальнейших действий
суть игры: игрок Jedi появляется в левом верхнем углу поля у него есть оружие.также на поле есть:стоящие на месте клоны,попадая на клетку к которым герой сражается с ними,эндорцы бегающие за героем и наносящие ему незначительный урон с помощью kick,Джаба медленно ползущий за героем способный нанести серьезный урон спомощью Sword.Цель игры убить всех врагов.
Есть недописанная функция Battle которая генерит кто наносит удар случайным образом.

Собственно вопрос: можно ли собрать функционал игру с ООП объектами,или как можно собрать подобную игру? :huh:


C++:
#include <iostream>
#include <conio.h>
#include <time.h>
#include <vector>
#include <math.h>

#define SIZE_X 20
#define SIZE_Y 10
using namespace std;
///////////////////////////////////////////////////////////////////
enum GameState
{Menu,Game_Move,Game_Shoot};

enum Directions
{Left,Right,Up,Down};

///////////////////////////////////////////////////////////////////
class Weapon
{
public:
int bullets;
char name[20];
Weapon():bullets(0)
{
}
Weapon(int power,int range,int bullets)
{
this->power = power;
this->range = range;
this->bullets = bullets;
}
unsigned int getRange() { return range;}
unsigned int getPower() { return power; }
virtual char * getName() { return name; }
private:
unsigned int power;
unsigned int range;
};


class Blaster:public Weapon
{
public:
Blaster():
Weapon(5,4,10)
{

}
virtual char * getName() { return name; }
char name[20];
};

class Sword:public Weapon
{
public:
Sword():
Weapon(10,1,-1)
{

}
virtual char * getName() { return name; }
char name[20];
};

class Power_of_the_Jedi:public Weapon
{
public:
Power_of_the_Jedi():
Weapon(50,2,1)
{

}
virtual char * getName() { return name; }
char name[20];
};

class Kick:public Weapon
{
public:
Kick():
Weapon(2,2,-1)
{

}
virtual char * getName() { return name; }
char name[20];
};
///////////////////////////////////////////////////////////////////
struct Coord
{
int x;
int y;
Coord()
{

}
Coord(int x,int y)
{
this->x = x;
this->y = y;
}
bool operator==(const Coord& coord)
{
return (x==coord.x)&&(y==coord.y);
}
};

template<class Stream>
Stream& operator<<(Stream& out,Coord p)
{
out<<"["<<p.x<<","<<p.y<<"]";
return out;
}

//////////////////////////////////////////////////////////////////

class Creature;
Creature * checkCollisions(Coord);
bool die(void*);
bool sectorIsFree(Coord);
void setMenu();

class Creature
{
public:
char correlation;
int power;
Weapon* weapon;
Weapon** weapons;
char weapon_index;
Creature( int h, int x, int y)
: health (h), position (x,y)
{
}
~Creature()
{
}
Coord getPos()
{
return position;
}
void addWeapons(Weapon* w1,Weapon* w2,Weapon* w3,Weapon* w4)
{
weapons[0] = w1;
weapons[1] = w2;
weapons[2] = w3;
weapons[3] = w4;
weapon = weapons[0];
weapon_index = 0;
}
void changeWeapon()
{
if(weapon_index = 0)
{
weapon = weapons[1];
weapon_index = 1;
}
if(weapon_index = 1)
{
weapon = weapons[2];
weapon_index = 2;
}
if((weapon_index = 2))
{
weapon = weapons[3];
weapon_index = 3;
}
if(weapon_index = 3)
{
weapon = weapons[0];
weapon_index = 0;
}
}
int getHealth()
{
return health;
}
bool goLeft()
{
if(position.x)
{
Coord p(position);
p.x--;
if(checkCollisions(p)!=NULL)
return false;
position.x--;
return true;
}
return false;
}
bool goRight()
{
Coord p(position);
p.x++;
if(checkCollisions(p)!=NULL)
return false;
if(position.x<SIZE_X-1)
{
position.x++;
return true;
}
return false;
}
bool goUp()
{
if(position.y)
{
Coord p(position);
p.y--;
if(checkCollisions(p)!=NULL)
return false;
position.y--;
return true;
}
return false;
}
bool goDown()
{
if(position.y<SIZE_Y-1)
{
Coord p(position);
p.y++;
if(checkCollisions(p)!=NULL)
return false;
position.y++;
return true;
}
return false;
}
virtual bool damage(int power)
{
health-=power;
// if(health<=0)
// return !die(this);//??????????????????????????????????????????????????????
return true;
}

bool shoot(Directions direction)
{
int sx = position.x;
int sy = position.y;
if(!weapon->bullets)
return false;
if(direction == Right){
sx++;
for(unsigned int i=sx;i<sx+weapon->getRange();++i){
if(i>SIZE_X-1)
break;
Coord p;
p.x = i;
p.y = sy;
Creature * aim = (Creature*)checkCollisions(p);

if(aim!=NULL){
aim->damage(weapon->getPower());
break;
}
}
}else if(direction == Left){
sx--;
for(unsigned int i=sx;i>sx-weapon->getRange();--i){
if(i<0)
break;
Coord p;
p.x = i;
p.y = sy;
Creature * aim = (Creature*)checkCollisions(p);

if(aim!=NULL){
aim->damage(weapon->getPower());
break;
}
}
}else if(direction == Up){
sy--;
for(unsigned int i=sy;i>sy-weapon->getRange();--i){
if(i<0)
break;
Coord p;
p.x = sx;
p.y = i;
Creature * aim = (Creature*)checkCollisions(p);

if(aim!=NULL){
aim->damage(weapon->getPower());
break;
}
}
}else{
sy++;
for(unsigned int i=sy;i<sy+weapon->getRange();++i){
if(i>SIZE_Y-1)
break;
Coord p;
p.x = sx;
p.y = i;
Creature * aim = checkCollisions(p);

if(aim!=NULL){
aim->damage(weapon->getPower());
break;
}
}
}
weapon->bullets--;
return true;
}
void kick(Creature* target)
{
target->damage(power);
}
/* void moveTo(Creature* target)
{
int repetitions = 0;
Coord p = target->getPos();
for(int i=0;i<speed;i++){
if(sqrt((float)abs(position.x - p.x)*abs(position.x - p.x) + abs(position.y - p.y)*abs(position.y - p.y))>1){
int shx = position.x - p.x;
int shy = position.y - p.y;
bool ok;
if((rand() % 10) >=5){
if(shx>0)
ok = goLeft();
else
ok = goRight();
}else{
if(shy>0)
ok = goUp();
else
ok = goDown();
}
if(!ok){
if(repetitions<3){
repetitions++;
i--;
}else{
repetitions = 0;
break;
}
}
}else{
kick(target);
//cout<<"KICK"<<target->getPos()<<getPos()<<endl;
break;
}
}
}*/

protected:
int speed;
int health;
Coord position;
};

class Player: public Creature
{
public:
Player():
Creature(100,0,0)
{
correlation = '@';
weapons = new Weapon*[2];
}

~Player()
{
for(int i=0;i<2;++i)
{
delete weapons[i];
}
delete[] weapons;
}
virtual bool damage(int power)
{
health-=power;
if(health<=0)
{
//setMenu();//?????????????????????????????????????????????????????
return false;
}
return true;
}
};

class Clones:public Creature
{
public:
Clones(int cx,int cy):
Creature(5,cx,cy)
{
speed = 0;
power = 4;
correlation = 'с';
}
};

class Endorses:public Creature
{
public:
Endorses(int cx,int cy):
Creature(1,cx,cy)
{
speed = 6;
power = 1;
correlation = 'e';
}
};

class Djabba:public Creature
{
public:
Djabba(int cx,int cy):
Creature(20,cx,cy)
{
speed = 1;
power = 30;
correlation = 'd';
}
};
/////////////////////////////////////////////
int Battle (int c)
{  srand((unsigned)time(NULL));
int s = rand()%3;
if (s==1)
{
}
if (s==2)
{
}
if (s==3)
{
}

}

int main()
{
char c[SIZE_X][SIZE_Y];
for(int i=0;i<SIZE_Y;++i)
for(int j=0;j<SIZE_X;++j)
c[i][j]='.';
for(int i=0;i<SIZE_Y;++i)
{cout<<endl;
for(int j=0;j<SIZE_X;++j)
cout<<c[i][j];
}
cout<<endl;


Player* player = new Player();
Sword* sword = new Sword();
Blaster* blaster = new Blaster();
Power_of_the_Jedi* power_of_the_Jedi = new Power_of_the_Jedi();
Kick* kick = new Kick();

player->addWeapons(sword,blaster,power_of_the_Jedi,kick);

}
 
Статус
Закрыто для дальнейших ответов.