aliens have damage!

This commit is contained in:
2010-08-31 15:38:24 +04:00
parent 86e24ec276
commit 63a8de6c35
9 changed files with 127 additions and 48 deletions

View File

@@ -51,7 +51,8 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
brush.setColor(Qt::white); brush.setColor(Qt::white);
brush.setStyle(Qt::SolidPattern); brush.setStyle(Qt::SolidPattern);
int cel = data->map->cells().at(i).at(j); int cel = data->map->cells().at(i).at(j);
if (cel == Map::Wall) { if (cel == Map::Wall)
{
pen.setColor(Qt::black); pen.setColor(Qt::black);
brush.setColor(Qt::black); brush.setColor(Qt::black);
} }
@@ -63,35 +64,39 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
// pen.setColor(Qt::yellow); // pen.setColor(Qt::yellow);
// brush.setColor(Qt::yellow); // brush.setColor(Qt::yellow);
// } // }
if (cel >= Map::Player) { if (cel >= Map::Player || (cel <= Map::PlayerTower && cel !=Map::Wall))
pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50)); {
brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50)); pen.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
brush.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
} }
p->setPen(pen); p->setPen(pen);
p->setBrush(brush); p->setBrush(brush);
p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize); p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize);
} }
} }
qDebug() << "t:" << data->curTowers.size(); //qDebug() << "t:" << data->curTowers.size();
for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i) { for (QHash<QPoint, TowerType>::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i)
{
//qDebug() << "draw alien"; //qDebug() << "draw alien";
//p->rotate(-90); //p->rotate(-90);
//p->scale(cellSize, cellSize); //p->scale(cellSize, cellSize);
//p->translate(rec.width()/2, rec.height()/2); //p->translate(rec.width()/2, rec.height()/2);
//p->rotate(-90); //p->rotate(-90);
//p->translate(-rec.height()/2, -rec.width()/2); //p->translate(-rec.height()/2, -rec.width()/2);
QBrush brush; //QBrush brush;
brush.setColor(Qt::darkRed); //brush.setColor(Qt::darkRed);
brush.setStyle(Qt::DiagCrossPattern); //brush.setStyle(Qt::DiagCrossPattern);
p->translate((*i).pos * cellSize+QPointF(10,10)); p->translate((*i).pos * cellSize+QPointF(20,20));
p->rotate((*i).angle); p->rotate((*i).angle);
p->setPen(QColor(0,0,0,0)); //p->setPen(QColor(0,0,0,0));
p->setBrush(brush); //p->setBrush(brush);
p->drawRect(QRect(-10,-10,20,20)); //p->drawRect(QRect(-10,-10,20,20));
p->drawImage(QRect(-20,-20,40,40), images[itTowers][0]->at(0));
p->resetTransform(); p->resetTransform();
} }
qDebug() << "a:" << data->curAliens.size(); //qDebug() << "a:" << data->curAliens.size();
for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i) { for (QHash<int, AlienType>::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i)
{
//qDebug() << "draw alien"; //qDebug() << "draw alien";
//p->rotate(-90); //p->rotate(-90);
//p->scale(cellSize, cellSize); //p->scale(cellSize, cellSize);
@@ -103,22 +108,24 @@ void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
p->drawImage(QRect(-20,-20,40,40), images[itAliens][0]->at(0)); p->drawImage(QRect(-20,-20,40,40), images[itAliens][0]->at(0));
p->resetTransform(); p->resetTransform();
} }
qDebug() << "s:" << data->curSplashes.size(); //qDebug() << "s:" << data->curSplashes.size();
for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i) { for (QHash<int, SplashType>::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i)
{
//qDebug() << "draw alien"; //qDebug() << "draw alien";
//p->rotate(-90); //p->rotate(-90);
//p->scale(cellSize, cellSize); //p->scale(cellSize, cellSize);
//p->translate(rec.width()/2, rec.height()/2); //p->translate(rec.width()/2, rec.height()/2);
//p->rotate(-90); //p->rotate(-90);
//p->translate(-rec.height()/2, -rec.width()/2); //p->translate(-rec.height()/2, -rec.width()/2);
QBrush brush; //QBrush brush;
brush.setColor(Qt::red); //brush.setColor(Qt::red);
brush.setStyle(Qt::SolidPattern); //brush.setStyle(Qt::SolidPattern);
p->translate((*i).pos * cellSize+QPointF(10,10)); p->translate((*i).pos * cellSize+QPointF(10,10));
p->rotate((*i).angle); p->rotate((*i).angle);
p->setBrush(brush); //p->setBrush(brush);
p->setPen(QColor(0,0,0,0)); //p->setPen(QColor(0,0,0,0));
p->drawEllipse(QPoint(),5,5); //p->drawEllipse(QPoint(),5,5);
p->drawImage(QRect(-10,-10,20,20), images[itSplashes][0]->at(0));
p->resetTransform(); p->resetTransform();
} }
} }
@@ -138,8 +145,12 @@ void AD_Graphics::loadImages()
for (int i = 0; i < images.size(); i++) { for (int i = 0; i < images.size(); i++) {
switch ((imagesType)i) { switch ((imagesType)i) {
case itAliens: case itAliens:
images[i].push_back(new Animation(":/images/images/Aliens/Al_00_")); images[i].push_back(new Animation(":/images/images/Aliens/Al_00_0.png"));
break; break;
case itTowers:
images[i].push_back(new Animation(":/images/images/Towers/01_6.png"));
case itSplashes:
images[i].push_back(new Animation(":/images/images/Splashes/Rocket.png"));
default: break; default: break;
} }
} }

View File

@@ -24,11 +24,13 @@ AD_Core::AD_Core(QObject *parent) :
// adaliens->addAlien(0); // adaliens->addAlien(0);
// adaliens->AddAlien(0); // adaliens->AddAlien(0);
// adaliens->AddAlien(0); // adaliens->AddAlien(0);
adtowers->addTower(0,1,QPoint(9,9)); adtowers->addTower(0,0,QPoint(19,7));
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height()); i++) for (int i=0; i<20;i++)
adtowers->addTower(0,1,QPoint(i,i)); adtowers->addTower(0,0,QPoint(8,20-i));
for (int i=0; i<qMin(addata->map->rect().width(),addata->map->rect().height());i++) for (int i=0; i<20; i++)
adtowers->addTower(0,0,QPoint(addata->map->rect().width()-2,i)); adtowers->addTower(0,1,QPoint(12,i));
for (int i=0; i<20;i++)
adtowers->addTower(0,0,QPoint(16,20-i));
waveInProgress = false; waveInProgress = false;
startTimer(50); startTimer(50);
} }

View File

@@ -5,14 +5,18 @@
Animation::Animation(const QString & path) Animation::Animation(const QString & path)
{ {
int i = 0; // int i = 0;
QString s = path + QString::number(i) + ".png"; // QString s = path + QString::number(i) + ".png";
//qDebug() << "check " << s; // //qDebug() << "check " << s;
while (QFile::exists(s)) { // while (QFile::exists(s)) {
images.push_back(new QImage(s)); // images.push_back(new QImage(s));
s = path + QString::number(++i) + ".png"; // s = path + QString::number(++i) + ".png";
// }
// qDebug() << "found " << images.size() << " images";
if (QFile::exists(path))
{
images.push_back(new QImage(path));
} }
qDebug() << "found " << images.size() << " images";
} }

View File

@@ -1,9 +1,9 @@
<!DOCTYPE data> <!DOCTYPE data>
<ADdata> <ADdata>
<aliens> <aliens>
<alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="150"/> <alien flying="true" speed="0.3" imageType="31" prise="15" id="2" score="12" name="Monstr" health="20"/>
<alien flying="true" speed="0.05" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="60"/> <alien flying="true" speed="0.2" imageType="-1078580008" prise="1" id="4" score="10" name="test" health="50"/>
<alien speed="0.2" imageType="1" prise="4" id="10" score="99" name="first" health="100"/> <alien speed="0.1" imageType="1" prise="4" id="10" score="99" name="first" health="33"/>
<alien regeneration="3" speed="0.15" imageType="1" prise="10" armor="1.5" id="12" score="99" name="MONSTR" health="100"/> <alien regeneration="3" speed="0.15" imageType="1" prise="10" armor="1.5" id="12" score="99" name="MONSTR" health="100"/>
</aliens> </aliens>
<maps> <maps>
@@ -61,8 +61,8 @@
</wavesOnLevels> </wavesOnLevels>
<splashes> <splashes>
<splash speed="0.5" imageType="1" lifetime="9999" id="1" name="rocket"/> <splash speed="0.5" imageType="1" lifetime="9999" id="1" name="rocket"/>
<splash speed="0.3" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/> <splash speed="0.5" imageType="1" lifetime="9999" autoControl="true" id="2" name="smart rocket"/>
<splash speed="1" imageType="2" lifetime="4" id="3" name="bullet"/> <splash speed="1" imageType="2" lifetime="9999" autoControl="true" id="3" name="bullet"/>
<splash speed="1" imageType="3" lifetime="10" id="4" name="bum"/> <splash speed="1" imageType="3" lifetime="10" id="4" name="bum"/>
<splash speed="0" imageType="4" lifetime="10" id="5" name="smoke"/> <splash speed="0" imageType="4" lifetime="10" id="5" name="smoke"/>
</splashes> </splashes>
@@ -73,7 +73,7 @@
</towers> </towers>
<triggers> <triggers>
<trigger damage="5" childAim="noAim" delParent="true" type="onDestination" id="2" name="shot"/> <trigger damage="5" childAim="noAim" delParent="true" type="onDestination" id="2" name="shot"/>
<trigger damage="5" childAim="noAim" radius="1.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/> <trigger damage="21" childAim="noAim" radius="2.5" delParent="true" count="1" type="onDestination" id="3" name="explosion"/>
<trigger childAim="noAim" count="1" type="onTimer" id="4" name="smoke"/> <trigger childAim="noAim" count="1" type="onTimer" id="4" name="smoke"/>
</triggers> </triggers>
<chains> <chains>

View File

@@ -20,5 +20,8 @@
<file>images/Aliens/Al_00_17.png</file> <file>images/Aliens/Al_00_17.png</file>
<file>images/Aliens/Al_00_18.png</file> <file>images/Aliens/Al_00_18.png</file>
<file>images/Aliens/Al_00_19.png</file> <file>images/Aliens/Al_00_19.png</file>
<file>images/Towers/00_0.png</file>
<file>images/Splashes/Rocket.png</file>
<file>images/Towers/01_6.png</file>
</qresource> </qresource>
</RCC> </RCC>

30
map.cpp
View File

@@ -80,27 +80,44 @@ void Map::removeAliensPath()
bool Map::addTowerOnMap(int playerId, QPoint pos) bool Map::addTowerOnMap(int playerId, QPoint pos)
{ {
qDebug() << pos; //qDebug() << pos;
if (playerId < 0 || playerId > players) return false; if (playerId < 0 || playerId > players) return false;
QRect r(QPoint(),mapSize); QRect r(QPoint(),mapSize);
if (!r.contains(pos)) return false; if (!r.contains(pos) ||
if (Cells[pos.x()][pos.y()]==Player+playerId) !r.contains(pos+QPoint(1,0)) ||
!r.contains(pos+QPoint(0,1)) ||
!r.contains(pos+QPoint(1,1))) return false;
if (Cells[pos.x()][pos.y()]==Player+playerId &&
Cells[pos.x()+1][pos.y()]==Player+playerId &&
Cells[pos.x()][pos.y()+1]==Player+playerId &&
Cells[pos.x()+1][pos.y()+1]==Player+playerId)
{ {
Cells[pos.x()][pos.y()]=PlayerTower-playerId; Cells[pos.x()][pos.y()]=PlayerTower-playerId;
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
for (int i=0; i<Starts.size(); i++) { for (int i=0; i<Starts.size(); i++) {
for (int j=0; j<Finishs.size(); j++) { for (int j=0; j<Finishs.size(); j++) {
if (waveTrace(Starts.at(i),Finishs.at(j))<0) { if (waveTrace(Starts.at(i),Finishs.at(j))<0) {
qDebug("AAAAAA");
Cells[pos.x()][pos.y()]=Player+playerId; Cells[pos.x()][pos.y()]=Player+playerId;
Cells[pos.x()+1][pos.y()]=Player+playerId;
Cells[pos.x()][pos.y()+1]=Player+playerId;
Cells[pos.x()+1][pos.y()+1]=Player+playerId;
return false; return false;
} }
} }
} }
return true; return true;
} }
if (Cells[pos.x()][pos.y()]==AlienPath+playerId) if (Cells[pos.x()][pos.y()]==AlienPath+playerId &&
Cells[pos.x()+1][pos.y()]==AlienPath+playerId &&
Cells[pos.x()][pos.y()+1]==AlienPath+playerId &&
Cells[pos.x()+1][pos.y()+1]==AlienPath+playerId)
{ {
Cells[pos.x()][pos.y()]=PlayerTower-playerId; Cells[pos.x()][pos.y()]=PlayerTower-playerId;
Cells[pos.x()+1][pos.y()]=PlayerTower-playerId;
Cells[pos.x()][pos.y()+1]=PlayerTower-playerId;
Cells[pos.x()+1][pos.y()+1]=PlayerTower-playerId;
// bool ok=true; // bool ok=true;
// for (int i=0; i<Starts.size(); i++) // for (int i=0; i<Starts.size(); i++)
// for (int j=0; j<Finishs.size(); j++) // for (int j=0; j<Finishs.size(); j++)
@@ -121,6 +138,9 @@ bool Map::addTowerOnMap(int playerId, QPoint pos)
if (!pathOK) if (!pathOK)
{ {
Cells[pos.x()][pos.y()]=AlienPath+playerId; Cells[pos.x()][pos.y()]=AlienPath+playerId;
Cells[pos.x()+1][pos.y()]=AlienPath+playerId;
Cells[pos.x()][pos.y()+1]=AlienPath+playerId;
Cells[pos.x()+1][pos.y()+1]=AlienPath+playerId;
emit recreateAlienPath(pathOK); emit recreateAlienPath(pathOK);
return false; return false;
} }

View File

@@ -96,7 +96,9 @@ void Splashes::addSplash(QPoint curTowerId)
spl.trigsOnTimer.append(tot); spl.trigsOnTimer.append(tot);
break; break;
} }
} }
qDebug() << "t=" << src.triggerIndexes.size() << "d=" << spl.trigsOnDest.size();
gameData->curSplashes.insert(spl.id,spl); gameData->curSplashes.insert(spl.id,spl);
nextId++; nextId++;
} }
@@ -137,6 +139,23 @@ void Splashes::update()
for (int k=0; k<spl.trigsOnDest.size(); k++) for (int k=0; k<spl.trigsOnDest.size(); k++)
{ {
// TODO: activate trigger // TODO: activate trigger
srcTriggerType strig = gameData->players.at(spl.PlayerId)->srcTowers.at(spl.srcTower).triggers.at(spl.trigsOnDest.at(k).src);
if (strig.delParent) deadIndexes.push_back(spl.id);
if (strig.damage > 0)
{
if (!(strig.radius > 0))
{
if (!badAl)
{
float hh = gameData->curAliens[spl.AlienId].health -= strig.damage;
if (hh < 0)
gameData->curAliens.remove(spl.AlienId);
qDebug() << "health=" << hh;
}
} else {
processTrigger(strig,spl.pos);
}
}
} }
} }
arctg = std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y()); arctg = std::atan2(spl.pos.x() - spl.destination.x(),spl.pos.y() - spl.destination.y());
@@ -168,3 +187,21 @@ void Splashes::delSplash(int Id)
{ {
gameData->curSplashes.remove(Id); gameData->curSplashes.remove(Id);
} }
void Splashes::processTrigger(srcTriggerType srctrig, QPointF pos)
{
qDebug("trig proc");
QList <int> dead;
for (QHash<int, AlienType>::iterator i = gameData->curAliens.begin(); i != gameData->curAliens.end(); ++i)
{
if (distance2(pos, (*i).pos) < srctrig.radius*srctrig.radius)
{
(*i).health -= srctrig.damage;
//qDebug() << "health=" << hh;
if ((*i).health < 0) dead.append((*i).id);
}
}
for (int i=0; i<dead.size(); ++i)
gameData->curAliens.remove(dead.at(i));
}

View File

@@ -19,6 +19,8 @@ public slots:
private: private:
Game_Data *gameData; Game_Data *gameData;
int nextId; int nextId;
void processTrigger(srcTriggerType srctrig,QPointF pos);
}; };
#endif // SPLASHES_H #endif // SPLASHES_H

View File

@@ -34,7 +34,7 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos)
if (gameData->map->addTowerOnMap(playerId,pos)) if (gameData->map->addTowerOnMap(playerId,pos))
{ {
tw.pos = pos; tw.pos = pos;
qDebug() << "tw" << pos; //qDebug() << "tw" << pos;
//gameData->map->printMap(); //gameData->map->printMap();
gameData->curTowers.insert(tw.pos,tw); gameData->curTowers.insert(tw.pos,tw);
return true; return true;