#ifndef MILIT_H
#define MILIT_H
#include <vector>
#include <string>
using namespace std;
#define MAX_CAPITAL 10000
#define MAX_INTERVAL 1000
class MilitUnit; class BuildUnit;
class Player; class Object;
typedef int money_ty;
typedef int index_ty;
typedef vector<int> int_list;
typedef vector<string*> string_list;
typedef vector<Player*> player_list;
typedef vector<Object*> object_list;
//************************************************************
class Player{
public:
Player();
~Player();
private:
money_ty CurrMoney;
object_list *ObjectList;
};
//************************************************************
class Object{
public:
virtual int ToDo()=0;
virtual void Show()=0;
protected:
int_list *AccessList;
int_list *CoeffList;
string Name;
int Health;
Object *Purpose;
int RemainTime;
bool Prepare;
bool FireAbility;
int Number;
};
//************************************************************
class BuildUnit:public Object{
public:
virtual int ToDo()=0;
virtual void Show()=0;
};
//************************************************************
class MilitUnit:public Object{
public:
virtual int GetFirePower(){return FirePower;}
virtual int ToDo()=0;
virtual void Show()=0;
protected:
int FirePower;
};
//************************************************************
//GAME
class Generals{
public:
Generals();
~Generals();
private:
string_list *AccessList;
player_list *PlayerList;
int CurrPlayer;
};
//************************************************************
//военные единицы
//************************************************************
//Танк
class Tank: public MilitUnit{
public:
Tank();
~Tank();
int ToDo();
void Show();
protected:
int FirePower;
};
//************************************************************
#endif
здесь реализация классов, тоже кратко
#include "milit.h"
#include <vector>
#include <iostream>
#include <windows.h>
#include <time.h>
#include <string>
#include <stdlib.h>
using namespace std;
class Object; class Player;
typedef vector<string*> string_list;
typedef vector<Player*> player_list;
typedef vector<Object*> object_list;
string NAME[10]={"Тракторный завод",
"Военный завод",
"Барак",
"Аэропорт",
"Экскаватор",
"Танк",
"Ракетница",
"Бронетранспортер",
"Истребитель",
"Пехотинец"};
int FIRE_POWER[10]= {0,0,0,0,0,6,11,5,10,3};
int REMAIN_TIME[10]={30,20,15,20,7,6,10,5,10,3};
int HEALTH[10]= {800,600,500,400,300,300,150,250,150,100};
int DIPPER_FACTORY_COEFF[10] ={0,0,0,0,1,0,0,0,0,0};
int MILITARY_FACTORY_COEFF[10] ={0,0,0,0,0,1,1,1,0,0};
int BARRACKS_COEFF[10] ={0,0,0,0,0,0,0,0,0,1};
int AIRPORT_COEFF[10] ={0,0,0,0,0,0,0,0,1,0};
int DIPPER_COEFF[10] ={1,1,1,1,0,0,0,0,0,0};
int TANK_COEFF[10] ={6,7,8,8,7,6,6,3,0,3};
int ROCKET_COEFF[10] ={10,11,13,13,10,10,10,10,0,5};
int TROOP_CARRIER_COEFF[10] ={4,5,6,6,6,5,6,4,9,10};
int FLY_FIGHTER_COEFF[10] ={10,12,14,14,10,10,10,10,8,6};
int INFANTRY_COEFF[10] ={2,3,4,4,1,2,6,3,0,9};
//************************************************************
//PLAYER
Player::Player()
{
CurrMoney=MAX_CAPITAL;
ObjectList=new object_list();
Object *obj=CreateObject(0);
ObjectList->push_back(obj);
obj->SetPrepare(true);
}
Player::~Player()
{
delete ObjectList;
}
//************************************************************
//OBJECT
void Object::Show()
{
cout<<GetShowString();
}
string &Object::GetShowString()const
{
string s="";
s+=Name;
s+=": Здоровье: ";
char ch[5];
s+=string(itoa(Health,ch,10));
s+="Цель: ";
if (Purpose) s+=Purpose->GetName();
else s+="нет цели";
return s;
}
//************************************************************
//BUILDUNIT
int BuildUnit::ToDo()
{
if (IsPrepare() && IsPurpose())
if (!Purpose->DecRemainTime()) {SetPurpose(NULL);}
return 1; //объект не надо удалять
}
void BuildUnit::Show()
{
Object::Show();
}
//************************************************************
//MILITUNIT
int MilitUnit::ToDo()
{
if (IsPrepare() && IsPurpose()) {
int fire_pow=GetFirePower();
fire_pow*=Purpose->GetCoeffList()[Purpose->GetNumber()];
if (Purpose->GetHealth()<=fire_pow) {
//объект готов к удалению
Purpose->SetHealth(0);
return 0;
}
else Purpose->SetHealth(Purpose->GetHealth()-GetFirePower());
}
return 1;
}
void MilitUnit::Show()
{
Object::Show();
}
//************************************************************
//GAME
Generals::Generals()
{
CurrPlayer=0;
PlayerList=new player_list();
AccessList=new string_list();
for(int i=0;i<10;i++)
GetAccessList().push_back(&(::NAME[i]));
}
Generals::~Generals()
{
delete AccessList;
delete PlayerList;
}
//************************************************************
//военные единицы
//************************************************************
//Танк
Tank::Tank()
{
Number=5;
Name=NAME[GetNumber()];
Purpose=NULL;
FirePower=FIRE_POWER[GetNumber()];
Health=HEALTH[GetNumber()];
Prepare=false;
RemainTime=REMAIN_TIME[GetNumber()];
FireAbility=true;
AccessList=new int_list();
for(int i=0;i<10;i++)AccessList->push_back(i);
for(i=0;i<10;i++)CoeffList->push_back(::TANK_COEFF[i]);
}
Tank::~Tank(){delete AccessList;}
int Tank::ToDo(){return MilitUnit::ToDo();}
void Tank::Show(){MilitUnit::Show();}
//************************************************************