Georg Spar
2 years ago
commit
091e7faaf5
11 changed files with 215 additions and 0 deletions
@ -0,0 +1,63 @@
|
||||
cmake_minimum_required(VERSION 3.5) |
||||
|
||||
project(TowerDefense VERSION 0.1 LANGUAGES CXX) |
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON) |
||||
|
||||
set(CMAKE_AUTOUIC ON) |
||||
set(CMAKE_AUTOMOC ON) |
||||
set(CMAKE_AUTORCC ON) |
||||
|
||||
set(CMAKE_CXX_STANDARD 17) |
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||
|
||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) |
||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) |
||||
|
||||
set(PROJECT_SOURCES |
||||
main.cpp |
||||
tower.h tower.cpp |
||||
game.h game.cpp |
||||
res.qrc |
||||
) |
||||
|
||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) |
||||
qt_add_executable(TowerDefense |
||||
MANUAL_FINALIZATION |
||||
${PROJECT_SOURCES} |
||||
) |
||||
# Define target properties for Android with Qt 6 as: |
||||
# set_property(TARGET TowerDefense APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR |
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/android) |
||||
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation |
||||
else() |
||||
if(ANDROID) |
||||
add_library(TowerDefense SHARED |
||||
${PROJECT_SOURCES} |
||||
) |
||||
# Define properties for Android with Qt 5 after find_package() calls as: |
||||
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") |
||||
else() |
||||
add_executable(TowerDefense |
||||
${PROJECT_SOURCES} |
||||
) |
||||
endif() |
||||
endif() |
||||
|
||||
target_link_libraries(TowerDefense PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) |
||||
|
||||
set_target_properties(TowerDefense PROPERTIES |
||||
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com |
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} |
||||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} |
||||
MACOSX_BUNDLE TRUE |
||||
WIN32_EXECUTABLE TRUE |
||||
) |
||||
|
||||
install(TARGETS TowerDefense |
||||
BUNDLE DESTINATION . |
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
||||
|
||||
if(QT_VERSION_MAJOR EQUAL 6) |
||||
qt_finalize_executable(TowerDefense) |
||||
endif() |
@ -0,0 +1,17 @@
|
||||
#include "game.h" |
||||
#include <QGraphicsScene> |
||||
#include "tower.h" |
||||
|
||||
Game::Game() { |
||||
scene = new QGraphicsScene(this); |
||||
|
||||
setScene(scene); |
||||
|
||||
// create a tower
|
||||
Tower *t = new Tower(); |
||||
|
||||
// add tower
|
||||
scene->addItem(t); |
||||
|
||||
setFixedSize(800,600); |
||||
} |
@ -0,0 +1,13 @@
|
||||
#ifndef GAME_H |
||||
#define GAME_H |
||||
|
||||
#include <QGraphicsView> |
||||
|
||||
class Game : public QGraphicsView |
||||
{ |
||||
public: |
||||
Game(); |
||||
QGraphicsScene *scene; |
||||
}; |
||||
|
||||
#endif // GAME_H
|
@ -0,0 +1,15 @@
|
||||
#include "game.h" |
||||
|
||||
#include <QApplication> |
||||
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) |
||||
{ |
||||
QApplication a(argc, argv); |
||||
|
||||
Game *game = new Game(); |
||||
game->show(); |
||||
|
||||
return a.exec(); |
||||
} |
@ -0,0 +1,5 @@
|
||||
<RCC> |
||||
<qresource prefix="/images"> |
||||
<file>tower.png</file> |
||||
</qresource> |
||||
</RCC> |
@ -0,0 +1,33 @@
|
||||
#include "tower.h" |
||||
#include <QPixmap> |
||||
#include <QVector> |
||||
#include <QPointF> |
||||
|
||||
Tower::Tower(QGraphicsItem *parent) { |
||||
setPixmap(QPixmap(":/images/tower.png")); |
||||
|
||||
// create points vectors
|
||||
QVector<QPointF> points; |
||||
points << QPoint(1,0) << QPoint(2,0) << QPoint(3,1) << QPoint(3,2) << QPoint(2,3) << QPoint(1,3) << QPoint(0,2) << QPoint(0,1); |
||||
|
||||
// scale points
|
||||
int SCALE_FACTOR = 70; |
||||
for (size_t i = 0, n = points.size(); i <n; i++) { |
||||
points[i] *= SCALE_FACTOR; |
||||
} |
||||
|
||||
// create a polygon from these points
|
||||
QPolygonF polygon(points); |
||||
|
||||
// create the QGraphicsPolygonItem
|
||||
attack_area = new QGraphicsPolygonItem(QPolygonF(points), this); |
||||
|
||||
// move the polygon
|
||||
QPointF poly_center(1.5, 1.5); |
||||
poly_center *= SCALE_FACTOR; |
||||
poly_center = mapToScene(poly_center); |
||||
QPointF tower_center(x()+34, y()+64); |
||||
QLineF ln(poly_center, tower_center); |
||||
attack_area->setPos(x()+ln.dx(), y()+ln.dy()); |
||||
|
||||
} |
@ -0,0 +1,14 @@
|
||||
#ifndef TOWER_H |
||||
#define TOWER_H |
||||
|
||||
#include <QGraphicsPixmapItem> |
||||
#include <QGraphicsPolygonItem> |
||||
|
||||
class Tower : public QGraphicsPixmapItem { |
||||
public: |
||||
Tower(QGraphicsItem *parent=0); |
||||
private: |
||||
QGraphicsPolygonItem *attack_area; |
||||
}; |
||||
|
||||
#endif // TOWER_H
|
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,15 @@
|
||||
#include "widget.h" |
||||
#include "./ui_widget.h" |
||||
|
||||
Widget::Widget(QWidget *parent) |
||||
: QWidget(parent) |
||||
, ui(new Ui::Widget) |
||||
{ |
||||
ui->setupUi(this); |
||||
} |
||||
|
||||
Widget::~Widget() |
||||
{ |
||||
delete ui; |
||||
} |
||||
|
@ -0,0 +1,21 @@
|
||||
#ifndef WIDGET_H |
||||
#define WIDGET_H |
||||
|
||||
#include <QWidget> |
||||
|
||||
QT_BEGIN_NAMESPACE |
||||
namespace Ui { class Widget; } |
||||
QT_END_NAMESPACE |
||||
|
||||
class Widget : public QWidget |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
Widget(QWidget *parent = nullptr); |
||||
~Widget(); |
||||
|
||||
private: |
||||
Ui::Widget *ui; |
||||
}; |
||||
#endif // WIDGET_H
|
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<ui version="4.0"> |
||||
<class>Widget</class> |
||||
<widget class="QWidget" name="Widget"> |
||||
<property name="geometry"> |
||||
<rect> |
||||
<x>0</x> |
||||
<y>0</y> |
||||
<width>800</width> |
||||
<height>600</height> |
||||
</rect> |
||||
</property> |
||||
<property name="windowTitle"> |
||||
<string>Widget</string> |
||||
</property> |
||||
</widget> |
||||
<resources/> |
||||
<connections/> |
||||
</ui> |
Loading…
Reference in new issue