work on winXp
This commit is contained in:
217
aliens.cpp
217
aliens.cpp
@@ -8,21 +8,23 @@ Aliens::Aliens(int TmpDestx, int TmpDesty, int afw, int afh, int alcellsize)
|
||||
DestPoint.setX(TmpDestx - 1);
|
||||
DestPoint.setY(TmpDesty);
|
||||
fw = afw;
|
||||
fh = afh;
|
||||
fh = afh;
|
||||
//AliensCnt = -1;
|
||||
CurWave = -1;
|
||||
Cells = new int*[fw];
|
||||
TmpCells = new int*[fw];
|
||||
for (int i = 0; i < fw; i++) {
|
||||
for (int i = 0; i < fw; i++) {
|
||||
Cells[i] = new int[fh];
|
||||
TmpCells[i] = new int[fh];
|
||||
}
|
||||
}
|
||||
clearCells();
|
||||
Alien al;
|
||||
al.PicType = 0;
|
||||
al.PathIndex = 1;
|
||||
al.PicIndex = 0;
|
||||
al.PicFrame = 0;
|
||||
al.Speed = 0.1;
|
||||
loadPixmaps(&al);
|
||||
srcAliens.push_back(al);
|
||||
CurWave = 0;
|
||||
}
|
||||
@@ -30,24 +32,23 @@ Aliens::Aliens(int TmpDestx, int TmpDesty, int afw, int afh, int alcellsize)
|
||||
|
||||
bool Aliens::loadPixmaps(Alien * al)
|
||||
{
|
||||
if (AliensPixmaps.size() != 0) {
|
||||
for (int i = 0; i < AliensPixmaps.size(); i++) {
|
||||
if (AliensPixmaps[i].type == al->PicType) {
|
||||
qDebug() << "Pictures exist!";
|
||||
return true;
|
||||
}
|
||||
bool load = true;
|
||||
int i = 0;
|
||||
while(load) {
|
||||
QVector<QPixmap> pixmaps;
|
||||
if (loadPixmap(i,&pixmaps) > 0) {
|
||||
AliensPixmaps.push_back(pixmaps);
|
||||
i++;
|
||||
}
|
||||
else load = false;
|
||||
}
|
||||
AlienImages * pixmaps;
|
||||
pixmaps = new AlienImages;
|
||||
if (loadPixmap(al->PicType,pixmaps) > 0) AliensPixmaps.push_back(* pixmaps);
|
||||
qDebug() << "Pictures loaded for" << AliensPixmaps.size() << "alien types!";
|
||||
if (AliensPixmaps.size() > 0) return true;
|
||||
else return false;
|
||||
qDebug() << "Pictures loaded!";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int Aliens::loadPixmap(int PicType, AlienImages * pixmaps)
|
||||
int Aliens::loadPixmap(int PicType, QVector<QPixmap> * pixmaps)
|
||||
{
|
||||
int i = 1;
|
||||
QString str1,str2;
|
||||
@@ -56,20 +57,17 @@ int Aliens::loadPixmap(int PicType, AlienImages * pixmaps)
|
||||
str2.setNum(PicType);
|
||||
qDebug() << PicType;
|
||||
while (i != 0) {
|
||||
str1.setNum(i);
|
||||
tmpAlPixmap.load("./images/Aliens/Al_" + str2 + "_" + str1 + ".png");
|
||||
//qDebug() << tmpAlPixmap.isNull();
|
||||
str1.setNum(i-1);
|
||||
tmpAlPixmap.load(":/images/Aliens/Al_" + str2 + "_" + str1 + ".png");
|
||||
if (!tmpAlPixmap.isNull()) {
|
||||
//AlienPix.push_back(tmpAlPixmap);
|
||||
pixmaps->pix.push_back(tmpAlPixmap);
|
||||
pixmaps->type = PicType;
|
||||
pixmaps->push_back(tmpAlPixmap);
|
||||
tmpAlPixmap = 0;
|
||||
i++;
|
||||
}
|
||||
else i = 0;
|
||||
}
|
||||
qDebug() << "pictures:" << pixmaps->pix.size();
|
||||
return pixmaps->pix.size();
|
||||
qDebug() << "pictures:" << pixmaps->size();
|
||||
return pixmaps->size();
|
||||
}
|
||||
|
||||
|
||||
@@ -81,12 +79,7 @@ void Aliens::clearCells()
|
||||
|
||||
bool Aliens::AddAlien()
|
||||
{
|
||||
//bool ok;
|
||||
//Alien al;
|
||||
//AliensCnt++;
|
||||
//if (CurWave < 0) CurWave = 0;
|
||||
//if (AliensCnt > curAliens.size()) ReDim Preserve Aliens(AliensCnt) As Alien
|
||||
//Aliens(AliensCnt) = SrcAliens(CurWave)
|
||||
curAliens.push_back(srcAliens.at(CurWave));
|
||||
//curAliens[AliensCnt].Level = CurWave + 1;
|
||||
curAliens[curAliens.size()-1].Position.pnt.setX(0*cellsize);
|
||||
@@ -94,12 +87,10 @@ bool Aliens::AddAlien()
|
||||
//DestPoint.setX(fw - 1);
|
||||
//DestPoint.setY(fh / 2); //curAliens[AliensCnt].Position.pnt.y();
|
||||
curAliens[curAliens.size()-1].DestPnt = DestPoint;
|
||||
// curAliens[AliensCnt].MaxFrame = 0; //srcAliens[CurWave].MaxFrame;
|
||||
// curAliens[AliensCnt].PicFrame = 0;
|
||||
for (int i = 0; i < fw; i++) {
|
||||
for (int j = 0; j < fh; j++) TmpCells[i][j] = Cells[i][j];
|
||||
}
|
||||
return (CreatePath(&curAliens[curAliens.size()-1]) && loadPixmaps(&curAliens[curAliens.size()-1]));
|
||||
return (CreatePath(&curAliens[curAliens.size()-1]));
|
||||
}
|
||||
|
||||
|
||||
@@ -117,19 +108,19 @@ bool Aliens::CreatePath(Alien * al)
|
||||
tmpPnt.push_back(tp);
|
||||
for (int i = 0; i < al->path.size() - 1; i++)
|
||||
{
|
||||
tp.setX((al->path[i].x() + al->path[i + 1].x()) / 2);
|
||||
tp.setY((al->path[i].y() + al->path[i + 1].y()) / 2);
|
||||
tp.setX((al->path[i].x() + al->path[i + 1].x()) / 2.0);
|
||||
tp.setY((al->path[i].y() + al->path[i + 1].y()) / 2.0);
|
||||
tmpPnt.push_back(tp);
|
||||
}
|
||||
tp = al->path[al->path.size() - 1];
|
||||
tmpPnt.push_back(tp);
|
||||
//qDebug() << tmpPnt.size();
|
||||
al->path = tmpPnt;
|
||||
al->Position.pnt.setX(al->path.at(0).x()*cellsize);
|
||||
al->Position.pnt.setY(al->path.at(0).y()*cellsize);
|
||||
}
|
||||
tmpPnt.clear();
|
||||
return true;
|
||||
al->Position.pnt.setX(al->path[0].x()*cellsize);
|
||||
al->Position.pnt.setY(al->path[0].y()*cellsize);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -137,6 +128,8 @@ bool Aliens::CreatePath(Alien * al)
|
||||
|
||||
void Aliens::updateAliens()
|
||||
{
|
||||
qDebug("=========");
|
||||
//qDebug() << curAliens[0].path;
|
||||
for (int i = 0; i < curAliens.size(); i++) updateAlienPos(&curAliens[i]);
|
||||
}
|
||||
|
||||
@@ -144,16 +137,22 @@ void Aliens::updateAliens()
|
||||
void Aliens::updateAlienPos(Alien * al)
|
||||
{
|
||||
float arctg = 0;
|
||||
qreal dx,dy,fdx,fdy;
|
||||
dx = (al->path[al->PathIndex - 1].x() - al->path.at(al->PathIndex).x());
|
||||
dy = (al->path[al->PathIndex - 1].y() - al->path.at(al->PathIndex).y());
|
||||
qDebug("=========");
|
||||
float px,py;
|
||||
float dx,dy,fdx,fdy;
|
||||
//qDebug() << cellsize;
|
||||
px = al->path[al->PathIndex].x() - al->path[al->PathIndex - 1].x();
|
||||
py = al->path[al->PathIndex].y() - al->path[al->PathIndex - 1].y();
|
||||
dx = al->Position.pnt.x() - al->path[al->PathIndex].x() * (cellsize);
|
||||
dy = al->Position.pnt.y() - al->path[al->PathIndex].y() * (cellsize);
|
||||
qDebug() << dx << ";" << dy;
|
||||
qDebug() << al->path[al->PathIndex];
|
||||
qDebug() << al->path[al->PathIndex-1];
|
||||
qDebug() << px << ";" << py;
|
||||
//qDebug() << al->path;//[al->PathIndex];
|
||||
//qDebug() << al->path.size();
|
||||
qDebug() << "PathIndex" << al->PathIndex;
|
||||
//qDebug() << al->path[al->PathIndex-1];
|
||||
if (al->PathIndex + 1 < al->path.size()) {
|
||||
fdx = al->Position.pnt.x() - al->path.at(al->PathIndex+1).x()*cellsize;
|
||||
fdy = al->Position.pnt.y() - al->path.at(al->PathIndex+1).y()*cellsize;
|
||||
fdx = al->Position.pnt.x() - al->path[al->PathIndex+1].x() * cellsize;
|
||||
fdy = al->Position.pnt.y() - al->path[al->PathIndex+1].y() * cellsize;
|
||||
if (fdy != 0) arctg = atanf(fdx/fdy);
|
||||
else if (fdx < 0) arctg = -3.1415/2;
|
||||
else arctg = 3.1415/2;
|
||||
@@ -161,21 +160,30 @@ void Aliens::updateAlienPos(Alien * al)
|
||||
//qDebug() << fdx << ";" << fdy;
|
||||
al->Position.angle = 180*(-arctg)/3.1415;
|
||||
if (fdy < 0) al->Position.angle = 180 + al->Position.angle;
|
||||
qDebug() << al->Position.angle;
|
||||
if (qAbs(dx) < 1 && qAbs(dy) < 1) al->PathIndex++;
|
||||
//qDebug() << al->Position.angle;
|
||||
qDebug() << al->Position.pnt;
|
||||
if (qAbs(dx) <= al->Speed && qAbs(dy) <= al->Speed) {
|
||||
qDebug("next");
|
||||
al->Position.pnt.setX(al->path[al->PathIndex].x() * cellsize);
|
||||
al->Position.pnt.setY(al->path[al->PathIndex].y() * cellsize);
|
||||
al->PathIndex++;
|
||||
}
|
||||
else {
|
||||
al->Position.pnt.setX(al->Position.pnt.x()-dx*al->Speed);
|
||||
al->Position.pnt.setY(al->Position.pnt.y()-dy*al->Speed);
|
||||
qDebug("go");
|
||||
al->Position.pnt.setX(al->Position.pnt.x()+px * al->Speed * cellsize);
|
||||
al->Position.pnt.setY(al->Position.pnt.y()+py * al->Speed * cellsize);
|
||||
}
|
||||
qDebug() << al->Position.pnt;
|
||||
al->PicIndex++;
|
||||
|
||||
if (al->PicIndex >= AliensPixmaps[al->PicType].pix.size()) al->PicIndex = 0;
|
||||
qDebug() << "PicIndex" << al->PicIndex;
|
||||
qDebug() << "PicType" << al->PicType;
|
||||
qDebug() << AliensPixmaps[al->PicType].size();
|
||||
if (al->PicIndex >= AliensPixmaps[al->PicType].size()) al->PicIndex = 0;
|
||||
if (al->PathIndex >= al->path.size()) {
|
||||
qDebug() << "run agan";
|
||||
al->PathIndex = 1;
|
||||
al->Position.pnt.setX(al->path.at(0).x()*cellsize);
|
||||
al->Position.pnt.setY(al->path.at(0).y()*cellsize);
|
||||
al->Position.pnt.setX(al->path.value(0).x()*cellsize);
|
||||
al->Position.pnt.setY(al->path.value(0).y()*cellsize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,107 +201,112 @@ void Aliens::updateAlienPos(Alien * al)
|
||||
|
||||
bool Aliens::recreatePath()
|
||||
{
|
||||
//QPointF ap;
|
||||
QVector <QPointF> tmpPath;
|
||||
bool trace;
|
||||
for (int i = 0; i < fw; i++)
|
||||
for (int j = 0; j < fh; j++) TmpCells[i][j] = Cells[i][j];
|
||||
for (int i = 0; i < curAliens.size(); i++) {
|
||||
//ap = curAliens[i].Position.pnt;
|
||||
//curAliens[i].Position.pnt.setX(0);
|
||||
//curAliens[i].Position.pnt.setY(fh/2);
|
||||
qDebug() << "Alinen N" << i;
|
||||
curAliens[i].Position.pnt.setX(curAliens[i].path[curAliens[i].PathIndex - 1].x() * cellsize);
|
||||
curAliens[i].Position.pnt.setY(curAliens[i].path[curAliens[i].PathIndex - 1].y() * cellsize);
|
||||
curAliens[i].PathIndex = 1;
|
||||
tmpPath = curAliens[i].path;
|
||||
curAliens[i].path.clear();
|
||||
trace = CreatePath(&curAliens[i]);
|
||||
if (!trace) return false;
|
||||
//curAliens[i].Position.pnt = ap;
|
||||
if (!trace) {
|
||||
curAliens[i].path = tmpPath;
|
||||
tmpPath.clear();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
qDebug() << trace;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Aliens::WaveTrace(Alien * al)
|
||||
{
|
||||
bool stop = false;
|
||||
int step = 2;
|
||||
bool stop = false;
|
||||
int step = 2;
|
||||
QPoint cp, tp;
|
||||
QRect fr(0, 0, fw, fh);
|
||||
QRect fr(0, 0, fw, fh);
|
||||
QVector<QPoint> tmpp, curp;
|
||||
cp.setX(al->Position.pnt.x()/cellsize);
|
||||
cp.setY(al->Position.pnt.y()/cellsize);
|
||||
curp.push_back(cp);
|
||||
TmpCells[cp.x()][cp.y()] = 1;
|
||||
while (!stop) {
|
||||
while (!stop) {
|
||||
//qDebug() << "trace";
|
||||
tmpp = curp;
|
||||
curp.clear();
|
||||
qDebug() << tmpp.size();
|
||||
stop = true;
|
||||
curp.clear();
|
||||
//qDebug() << tmpp.size();
|
||||
stop = true;
|
||||
for (int i = 0; i < tmpp.size(); i++) {
|
||||
cp = tmpp[i];
|
||||
if (cp == al->DestPnt) {
|
||||
cp = tmpp[i];
|
||||
if (cp == al->DestPnt) {
|
||||
TmpCells[cp.x()][cp.y()] = step;
|
||||
qDebug() << "Wawe trace done";
|
||||
InvWaveTrace(cp, step, al);
|
||||
qDebug() << al->path.size();
|
||||
return true;
|
||||
}
|
||||
tp.setX(cp.x() - 1);
|
||||
tp.setY(cp.y());
|
||||
InvWaveTrace(cp, step, al);
|
||||
qDebug() << al->path.size();
|
||||
return true;
|
||||
}
|
||||
tp.setX(cp.x() - 1);
|
||||
tp.setY(cp.y());
|
||||
if (fr.contains(tp) && TmpCells[tp.x()][tp.y()] == 0) {
|
||||
TmpCells[tp.x()][tp.y()] = step;
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setX(cp.x() + 1);
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setX(cp.x() + 1);
|
||||
if (fr.contains(tp) && TmpCells[tp.x()][tp.y()] == 0) {
|
||||
TmpCells[tp.x()][tp.y()] = step;
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setX(cp.x());
|
||||
tp.setY(cp.y() - 1);
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setX(cp.x());
|
||||
tp.setY(cp.y() - 1);
|
||||
if (fr.contains(tp) && TmpCells[tp.x()][tp.y()] == 0) {
|
||||
TmpCells[tp.x()][tp.y()] = step;
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setY(cp.y() + 1);
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
tp.setY(cp.y() + 1);
|
||||
if (fr.contains(tp) && TmpCells[tp.x()][tp.y()] == 0) {
|
||||
TmpCells[tp.x()][tp.y()] = step;
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
}
|
||||
step++;
|
||||
}
|
||||
curp.push_back(tp);
|
||||
stop = false;
|
||||
}
|
||||
}
|
||||
step++;
|
||||
}
|
||||
qDebug() << "false wawetrace";
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void Aliens::InvWaveTrace(QPoint cp, int cnt, Alien * al)
|
||||
{
|
||||
QPoint wp, Ppnt;
|
||||
QPoint wp, Ppnt;
|
||||
int Ind, c, AliensTmpDestX, AliensTmpDestY, xpp, ypp, xnn, ynn;
|
||||
unsigned char chk;
|
||||
Ppnt = wp = cp;
|
||||
unsigned char chk;
|
||||
Ppnt = wp = cp;
|
||||
xnn=0;
|
||||
xpp=0;
|
||||
ynn=0;
|
||||
ypp=0;
|
||||
cnt--;
|
||||
al->path.push_front(Ppnt);
|
||||
AliensTmpDestX = al->Position.pnt.x();
|
||||
AliensTmpDestY = al->Position.pnt.y();
|
||||
while (cnt > 1)
|
||||
AliensTmpDestX = al->Position.pnt.x();
|
||||
AliensTmpDestY = al->Position.pnt.y();
|
||||
while (cnt > 1)
|
||||
{
|
||||
cnt--;
|
||||
cnt--;
|
||||
chk = 0;
|
||||
Ind = 0;
|
||||
c = 0;
|
||||
if (wp.x() - 1 >= 0 && TmpCells[wp.x()-1][wp.y()] == cnt)
|
||||
{
|
||||
chk = chk | 0x01;
|
||||
chk = chk | 0x01;
|
||||
c++;
|
||||
}
|
||||
if (wp.x() + 1 < fw && TmpCells[wp.x()+1][wp.y()] == cnt)
|
||||
@@ -394,7 +407,7 @@ void Aliens::InvWaveTrace(QPoint cp, int cnt, Alien * al)
|
||||
ypp++;
|
||||
}
|
||||
}
|
||||
Ppnt = wp;
|
||||
Ppnt = wp;
|
||||
al->path.push_front(Ppnt);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user