diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c53011..a74bc8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,8 @@ set(PROJECT_SOURCES MyRect.cpp bullet.h bullet.cpp + enemy.h + enemy.cpp ) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index f4ff5dd..450734a 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,10 +1,10 @@ - + EnvironmentId - {e6ee6a48-b810-4fb5-bc4f-5e4838e40a27} + {a3fb5f65-3126-4f75-bf07-1a91899fc9d6} ProjectExplorer.Project.ActiveTarget @@ -56,6 +56,32 @@ true + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + + + + true + + + ProjectExplorer.Project.Target.0 @@ -76,7 +102,6 @@ -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - 0 /home/sparg/programming/qt/build-GameTut-Desktop_Qt_6_4_0_GCC_64bit-Debug @@ -84,11 +109,12 @@ all true + Erstellen CMakeProjectManager.MakeStep 1 - Build - Build + Erstellen + Erstellen ProjectExplorer.BuildSteps.Build @@ -97,11 +123,12 @@ clean true + Erstellen CMakeProjectManager.MakeStep 1 - Clean - Clean + Bereinigen + Bereinigen ProjectExplorer.BuildSteps.Clean 2 @@ -132,8 +159,8 @@ CMakeProjectManager.MakeStep 1 - Build - Build + Erstellen + Erstellen ProjectExplorer.BuildSteps.Build @@ -145,8 +172,8 @@ CMakeProjectManager.MakeStep 1 - Clean - Clean + Bereinigen + Bereinigen ProjectExplorer.BuildSteps.Clean 2 @@ -177,8 +204,8 @@ CMakeProjectManager.MakeStep 1 - Build - Build + Erstellen + Erstellen ProjectExplorer.BuildSteps.Build @@ -190,8 +217,8 @@ CMakeProjectManager.MakeStep 1 - Clean - Clean + Bereinigen + Bereinigen ProjectExplorer.BuildSteps.Clean 2 @@ -223,8 +250,8 @@ CMakeProjectManager.MakeStep 1 - Build - Build + Erstellen + Erstellen ProjectExplorer.BuildSteps.Build @@ -236,8 +263,8 @@ CMakeProjectManager.MakeStep 1 - Clean - Clean + Bereinigen + Bereinigen ProjectExplorer.BuildSteps.Clean 2 @@ -268,8 +295,8 @@ CMakeProjectManager.MakeStep 1 - Build - Build + Erstellen + Erstellen ProjectExplorer.BuildSteps.Build @@ -281,8 +308,8 @@ CMakeProjectManager.MakeStep 1 - Clean - Clean + Bereinigen + Bereinigen ProjectExplorer.BuildSteps.Clean 2 @@ -297,8 +324,8 @@ 0 - Deploy - Deploy + Deployment + Deployment ProjectExplorer.BuildSteps.Deploy 1 diff --git a/MyRect.cpp b/MyRect.cpp index f221206..9e82163 100644 --- a/MyRect.cpp +++ b/MyRect.cpp @@ -4,30 +4,28 @@ #include "bullet.h" #include "qgraphicsscene.h" #include +#include "enemy.h" void MyRect::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Left) { - setPos(x() -10, y()); + if (pos().x() >0) + setPos(x() -10, y()); } else if( event->key() == Qt::Key_Right ) { - setPos(x() +10, y()); - } - - else if( event->key() == Qt::Key_Up ) { - setPos(x(), y() -10); - } - - else if(event->key() == Qt::Key_Down) { - setPos(x(), y() +10); + if (pos().x() + 100 < 800) + setPos(x() +10, y()); } else if(event->key() == Qt::Key_Space) { Bullet* bullet = new Bullet(); bullet->setPos(x(),y()); scene()->addItem(bullet); - - } } + +void MyRect::spawn(){ + Enemy* enemy = new Enemy(); + scene()->addItem(enemy); +} diff --git a/MyRect.h b/MyRect.h index c701786..351e0cf 100644 --- a/MyRect.h +++ b/MyRect.h @@ -2,10 +2,14 @@ #define MYRECT_H #include +#include -class MyRect: public QGraphicsRectItem { +class MyRect: public QObject, public QGraphicsRectItem { + Q_OBJECT public: void keyPressEvent(QKeyEvent* event); +public slots: + void spawn(); }; #endif // MYRECT_H diff --git a/bullet.cpp b/bullet.cpp index 5649075..47f4e6a 100644 --- a/bullet.cpp +++ b/bullet.cpp @@ -1,5 +1,9 @@ #include "bullet.h" #include +#include +#include +#include "enemy.h" + Bullet::Bullet() { @@ -9,7 +13,22 @@ Bullet::Bullet() timer->start(50); } -void Bullet::move() -{ +void Bullet::move(){ + // if bullet collides with enemy, destroy both + QList colliding_items = collidingItems(); + for (int i = 0, n = colliding_items.size(); i < n; i++) { + if (typeid(*(colliding_items[i])) == typeid(Enemy)) { + scene()->removeItem(colliding_items[i]); + scene()->removeItem(this); + delete colliding_items[i]; + delete this; + return; + } + } this->setPos(x(), y()-10); + if(pos().y() + rect().height() < 0) { + scene()->removeItem(this); + delete this; + qDebug() << "bullet deleted"; + } } diff --git a/enemy.cpp b/enemy.cpp new file mode 100644 index 0000000..f0dd7d1 --- /dev/null +++ b/enemy.cpp @@ -0,0 +1,27 @@ +#include "enemy.h" +#include +#include +#include + +Enemy::Enemy() +{ + int random_number = rand() % 700; + setPos(random_number,0); + setRect(0,0,100,100); + QTimer* timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(move())); + timer->start(50); +} + + +void Enemy::move() +{ + this->setPos(x(), y()+5); + if(pos().y() + rect().height() < 0) { + scene()->removeItem(this); + delete this; + qDebug() << "bullet deleted"; + } +} + + diff --git a/enemy.h b/enemy.h new file mode 100644 index 0000000..66f6e68 --- /dev/null +++ b/enemy.h @@ -0,0 +1,15 @@ +#ifndef ENEMY_H +#define ENEMY_H +#include +#include + + +class Enemy : public QObject, public QGraphicsRectItem { + Q_OBJECT +public: + Enemy(); +public slots: + void move(); +}; + +#endif // ENEMY_H diff --git a/main.cpp b/main.cpp index 8ae58bf..8c84e0e 100644 --- a/main.cpp +++ b/main.cpp @@ -2,21 +2,30 @@ #include #include #include "MyRect.h" +#include int main(int argc, char *argv[]) { QApplication a(argc, argv); - MyRect* rect = new MyRect(); - rect->setRect(0,0,100,100); - rect->setFlag(QGraphicsItem::ItemIsFocusable); - rect->setFocus(); + MyRect* player = new MyRect(); + player->setRect(0,0,100,100); + player->setFlag(QGraphicsItem::ItemIsFocusable); + player->setFocus(); QGraphicsScene* scene = new QGraphicsScene(); - scene->addItem(rect); + scene->addItem(player); QGraphicsView* view = new QGraphicsView(scene); view->show(); + view->setFixedSize(800,600); + scene->setSceneRect(0,0,800,600); + player->setPos(view->width()/2, view->height() - player->rect().height()); + + // spawn enemies + QTimer* timer = new QTimer(); + QObject::connect(timer, SIGNAL(timeout()), player, SLOT(spawn())); + timer->start(2000); return a.exec(); }