📄 article3.cpp
字号:
#include <iostream>
#include <vector>
#include <windows.h>
#include <time.h>
using namespace std;
class actor//基类
{
protected:
int m_iHealth;//血
const int m_iSpeed;//为了方便,这个值使用延时值,越大表示速度越慢
const int m_iHitPoint;//攻击力
char m_strName[260];
public:
actor(const char* strName,const int iHealth,const int iSpeed,const int iHitpoint);
int& Health(){ return m_iHealth; };
const char* getName(){ return m_strName; };
virtual void hit(actor *Actor) = 0;
bool isAlive();
};
actor::actor(const char* strName,const int iHealth,const int iSpeed,const int iHitpoint):
m_iHealth(iHealth),
m_iSpeed(iSpeed),
m_iHitPoint(iHitpoint)
{
strcpy(m_strName,strName);
}
bool actor::isAlive()
{
return (m_iHealth>0);
}
/////////////////////////////////////////////////////////
//类fighter
class fighter :public actor
{
public:
fighter(const char* strName);
virtual void hit(actor *Actor);
private:
};
fighter::fighter(const char* strName):
actor(strName,100,20,20)
{
}
void fighter::hit(actor *Actor)
{
Sleep(m_iSpeed);
if(!isAlive())
{
return ;
}
if(Actor&&Actor->isAlive())
{
if(isAlive())
Actor->Health() = Actor->Health() - m_iHitPoint;
}
}
/////////////////////////////////////////////////////////
//类knight
class knight :public actor
{
public:
knight(const char* strName);
virtual void hit(actor *Actor);
private:
};
knight::knight(const char* strName):
actor(strName,150,20,25)
{
}
void knight::hit(actor *Actor)
{
Sleep(m_iSpeed);
if(!isAlive())
{
return ;
}
if(Actor&&Actor->isAlive())
{
if(isAlive())
Actor->Health() = Actor->Health() - m_iHitPoint;
}
}
/////////////////////////////////////////////////////////
//类warrior
class warrior :public actor
{
public:
warrior(const char* strName);
virtual void hit(actor *Actor);
private:
};
warrior::warrior(const char* strName):
actor(strName,150,20,25)
{
}
void warrior::hit(actor *Actor)
{
Sleep(m_iSpeed);
if(!isAlive())
{
return ;
}
if(Actor&&Actor->isAlive())
{
//这里我们用一个函数做了左值,因为函数返回的是引用
if(isAlive())
Actor->Health() = Actor->Health() - m_iHitPoint;
}
}
vector<actor*> troop1;
vector<actor*> troop2;
BOOL bThread1,bThread2;
ULONG WINAPI battletp1(LPVOID pParams)
{
vector<actor *>::iterator it_tp1 = troop1.begin();
vector<actor *>::iterator it_tp2 = troop2.begin();
while( (it_tp1!=troop1.end()) && (it_tp2!=troop2.end()) )
{
while(((*it_tp1)->isAlive())&&(it_tp2!=troop2.end()))
{
(*it_tp1)->hit(*it_tp2);
if(!(*it_tp2)->isAlive())
it_tp2++;
}
it_tp1++;
}
bThread1 = true;
return 0;
}
ULONG WINAPI battletp2(LPVOID pParams)
{
vector<actor *>::iterator it_tp1 = troop1.begin();
vector<actor *>::iterator it_tp2 = troop2.begin();
while( (it_tp1!=troop1.end()) && (it_tp2!=troop2.end()) )
{
while(((*it_tp2)->isAlive())&&(it_tp1!=troop1.end()))
{
(*it_tp2)->hit(*it_tp1);
if(!(*it_tp1)->isAlive())
it_tp1++;
}
it_tp2++;
}
bThread2 = true;
return 0;
}
void main()
{
time_t t;
srand((unsigned) time(&t));
actor* tmp;
char name[100];
for(int i=0;i<10;i++)
{
switch(rand()%3)
{
case 0:
sprintf(name,"warrior No%d of troop1",i);
tmp = new warrior(name);
break;
case 1:
sprintf(name,"knight No%d of troop1",i);
tmp = new knight(name);
break;
case 2:
sprintf(name,"fighter No%d of troop1",i);
tmp = new fighter(name);
break;
default:
break;
}
troop1.push_back(tmp);
}
for(i=0;i<10;i++)
{
switch(rand()%3)
{
case 0:
sprintf(name,"warrior No%d of troop2",i);
tmp = new warrior(name);
break;
case 1:
sprintf(name,"knight No%d of troop2",i);
tmp = new knight(name);
break;
case 2:
sprintf(name,"fighter No%d of troop2",i);
tmp = new fighter(name);
break;
default:
break;
}
troop2.push_back(tmp);
}
DWORD x;
bThread1 = bThread2 = false;
CreateThread(NULL,0,battletp1,NULL,0,&x);
CreateThread(NULL,0,battletp2,NULL,0,&x);
while( (!bThread1) || (!bThread2) )
{
Sleep(100);
}
vector<actor *>::iterator it;
for(it=troop1.begin();it!=troop1.end();it++)
{
cout<<(*it)->getName()<<( (*it)->isAlive()?" is Alive!":" is Died!")<<endl;
}
for(it=troop2.begin();it!=troop2.end();it++)
{
cout<<(*it)->getName()<<( (*it)->isAlive()?" is Alive!":" is Died!")<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -