From 6a15fa0d6359f00226973a58bf87cf7ab5b90370 Mon Sep 17 00:00:00 2001 From: Georg Spar Date: Thu, 6 Oct 2022 20:31:15 +0200 Subject: [PATCH] Tut 10 --- CMakeLists.txt | 1 + bullet.cpp | 20 ++++++++++++++++++++ bullet.h | 14 ++++++++++++++ game.cpp | 13 ++++++++++++- game.h | 2 ++ missile.png | Bin 0 -> 7292 bytes res.qrc | 2 ++ 7 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 bullet.cpp create mode 100644 bullet.h create mode 100644 missile.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 01cfa48..b256c7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ set(PROJECT_SOURCES tower.h tower.cpp game.h game.cpp res.qrc + bullet.h bullet.cpp ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/bullet.cpp b/bullet.cpp new file mode 100644 index 0000000..0e2f9c1 --- /dev/null +++ b/bullet.cpp @@ -0,0 +1,20 @@ +#include "bullet.h" +#include +#include + +Bullet::Bullet(QGraphicsItem *parent) { + // set graphics + setPixmap(QPixmap(":/images/missile.png")); + QTimer *move_timer = new QTimer(this); + connect(move_timer, SIGNAL(timeout()), this, SLOT(move())); + move_timer->start(50); +} + +void Bullet::move() { + int STEP_SIZE = 30; + int theta = rotation(); // degrees + double dy = STEP_SIZE * qSin(qDegreesToRadians(theta)); + double dx = STEP_SIZE * qCos(qDegreesToRadians(theta)); + + setPos(x()+dx, y()+dy); +} diff --git a/bullet.h b/bullet.h new file mode 100644 index 0000000..5b79218 --- /dev/null +++ b/bullet.h @@ -0,0 +1,14 @@ +#ifndef BULLET_H +#define BULLET_H +#include +#include + +class Bullet: public QObject, public QGraphicsPixmapItem { + Q_OBJECT +public: + Bullet(QGraphicsItem *parent=0); +public slots: + void move(); +}; + +#endif // BULLET_H diff --git a/game.cpp b/game.cpp index 3c10417..d60b66e 100644 --- a/game.cpp +++ b/game.cpp @@ -1,10 +1,11 @@ #include "game.h" #include #include "tower.h" +#include "bullet.h" Game::Game() { scene = new QGraphicsScene(this); - + scene->setSceneRect(0,0,800,600); setScene(scene); // create a tower @@ -14,4 +15,14 @@ Game::Game() { scene->addItem(t); setFixedSize(800,600); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +} + +void Game::mousePressEvent(QMouseEvent *event) { + // create a bullet + Bullet *bullet = new Bullet(); + bullet->setPos(event->pos()); + bullet->setRotation(40); + scene->addItem(bullet); } diff --git a/game.h b/game.h index 561bebe..c95f295 100644 --- a/game.h +++ b/game.h @@ -2,11 +2,13 @@ #define GAME_H #include +#include class Game : public QGraphicsView { public: Game(); + void mousePressEvent(QMouseEvent *event); QGraphicsScene *scene; }; diff --git a/missile.png b/missile.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce58aef0a1f9b2e66aaaae5b4398aef5ef6e7f7 GIT binary patch literal 7292 zcmeHKc{tSj_n+)ZB_#^iG>Vd0&0wan6k{xny@ZM}i^ej88CfH1wk#2{@B6+d70Gfb zlqC`>B(zzQ6uv{e^L#$@`JDGTuXE1pocH^g6Jnr;-^qWF9{>RC z)Yj54V*i5K*FHWT_Wb~(dIJCuNc1o{$1)p@H;H&rvA?^o!)+vDa?v?IwV!3wX@N_aZ$J3zzT;P6Em_Km2YGY!&XOYoZ znf+-W?QVoQXBnbXD`vNHW0`v-Jl3%_ZHK8V|Z@*YuVgG-x1DEM zUIkN;yVv|WBlX97Z7rMEBhG54;TP(F&m^Z+FZyJ9-HG;jl;)j!d#NXHY0l+r^_cLL zuzMRRq_r2yRbghb8Kr52D-QGCuhA6#v<6kVlAyLUn8uxt&39U6xrM{O#(oKvk~TnB zXoSh9)_-(wZ57geu5at5Ma%JmF28uHwd0*NWIaNr23t9`D{k(=Md#IuIJZ0rqOxmk z_oMypNE}aCci8<^@AX-c?)jm%w-xq`{&S`}zuCvV>i8Pnu68(8-(ZSoWo~V4s-7yi zFS0VP16aPgD??~Qcl!c2W-;B-n+a3+CZHCaV1DlOBOt&Qu3HSRjx`VGs^sh?&m4=- z1`6VCRCJgi%=(S=RZy0+d6mS&PG4VPta*fP*wL-z7r2UzxYnzmzUqyY!)X*EXAtDU z^SU?9?TR3wRa0kErAulDJ;WTAU+BhP^qjjJse(Uv;7P0@UhGOZT!yKqnd;@a(3G5r zv@>+Cw(TobpY~HJk~4Fu8F+TC?*>I(wb;Ch-ts0wO!j>x<=N=vaZ(TGfS$J=+Ig0i zm*(_lcfU&c`ttgY{MOyJGoY#6wUYTxH8o|2GP^>QsDQXsp_7ehEXe`uVrwGhFs~ zR`vQHL=3mDjoQrig^e<%r!7ZUil#SOd`;dwHHtWUt038Udw{J9t*k~qvFea%s?>6J z(Z_p;;wOpJ(LIMBzo{5nHnxL9)P$l$Hn#dJtnMDF&Pnn8 zRFhS4b8(^It2?T%s*ooQpL!9Tl7L7mqb;@K%caHvcDpt>X057HT5+Aw5p>eycCRC;gyJm}X;%JBOoax|P$JbXk9KYN31LbNBrg7ry#IZi1!^YeGj~>YSLr z+n4u-j2*;34vu~YyfUJx9}(B+TzAdtHE1E2M`SL!>I5-LpZeLB1(ELlkW=xDyr;DvEE1qrLrE-5y2JuzrY-9z#$g0%#EH`rwa zS2dL!nDD)AG5iFzzqV;gyD_}exlBgL2en7|Ex~Q~WQ*~@3o~0uToN_}YRm&980m63 z4P3WEbPf$iP!Ue1mCc{~M0yT})J>M+K<9C@DE4#Y)O z-PN0|XAJYnh)I6dfK@v=ZlBzpo4-q7wYel_f7UjF{i5Kmz)lL?7Mpm1tGTTZe|5b4 zy_8LV=9R!Nk6;FUoK9C@Cf7s9;+h6t<>H39jpicFPpj)4c&p?W{v>Un=*y?Wvi)e+ z?{cD2#&g|GwRNqH6sy6PLM~t^|0LJQY(!A?QK>jX5wC9d&yYl}_r*tEAEO!_;b`i8 z$JNM(;}%Ukl(8a}b-4QclY~HKp#&*rf0Efvafz;|7j%(lvAjf1)q^p*qDyh*H{Ph7 z_$?RW)!RGPo&nDhV{k+Gm`T3d%=nH`j-W0%%Qp?q8(me*lc;=Y;g3?A8+fv^Y`78t z`Xn9~SySGnC&O(#@j~)?@Ir3K5WnfL_;GiLa81oX;Wb4iEz6q?xw%z7Q5XZ*SDt7Jr#r$3$Ci@F^TEf@UVLw#4*6MP^<0To1N4+QQo#eFVT4n z_Y;(hslMcq@m7rEalNJjNq5;jvaZ0NnXfkqcd{7{Y^r*RAbO3 z=^h8c$UP4tx;{iZom_zq<_APtalVwN)PyKmq7e7WfOQGqrNwc&F|YkAv`j8QD_L<&Fz zoCdHtF>)cj#N&9ICoTcuC$7{$f*8Phy>q9H z@V;tlaX%Q`aqG~T6JG>GYPm0G4wwdbX1vm%H1Cj!P-{qBjTGcO^+Z>uGDRp@?9fTW zv`+T_VB^pL||t9RNQHsebc6A_e-)RMEtW_ldS3{ie_Vsz>~{}Lg0dPJhsG+cxl^iU+> zVSa%1?cEpG_2lwa7{@+cZS4!S)N8#aY`yzl>4eAkZnu#lZSVqhu|55j-RX|64*k=S zmQXVxjF%@IBiJ90P}_SveJ)k>(heM>A^WK=r1n$q3V&L8!Ku%g%?sZ6(VhMg zC^wI5AuD}@nLy*YA;{79aS$x2f8lxJWq;q;$#x&zrsQA{i+6i5L@Hlr`)}vH23D5D zH6-i{^tnxq@&SJCAClEXN4?KSOEas)jeD@y@Ur*aP>5%z#LwHSwSfiM_ zI@_WN0Bj4SsjC}ktE>MprLbp{AyU6AeuOg+EfOWxqDn3&A4*p>U)y`VP#3Gc=`U+O)1 zSLP_Wi4s{?3(Yh!w*)J13m;ku6>R9eb~N`eb+#%q!Ebt{;aX&wt5fRKl@C2nvL*>U zD_pM+6(P8zRUvL9 z;ikY%H$SD^{DV{9svyUc>y(P7WbMXc?!%Iw#l_d_F$J~dtoDGoI`XYKDd&Rw3Ztz- zgm2q-Z(N-a`TaIo(d!X`U*>AJ$jG`Vhu+_DrYHi8;HXZyMAPzc zrWkwZnUFl}NN6%hRfQkxhG7FZP*_Bun}a=_iE&c~ZQ)|r&zoW>2)L!fvQq|~BNzbH z8O{_S5`u)lz&JPBWdultABc4(Q!z#wnm-}fZ_1!cES4h%3UzgLg}BN?7|u3OI2w(H z!Vpjd0?gI`Gu`Pdq8pgbl-h*&fuTWRlALLdEEU_(yyWjs(J= z@O0)+7TA11-H47*I0OcDaDe`5!DQhsvq63a^j|HQChX}OYD8f&T%1W1++_-#CG{%= zne?ZfsRyt%7lwwbDV5>6OUg3XpiPt6={AsaCfep>Uam$KL_TMyFH0obu{Vlf5 zm92Ds4TNp}C+^?0|HyqynXN@2U^Eycm(B3BHIzY{{xM_*iAKh3Jt|VrN+h%r9E?(e zlfXzSk_uKr%M-z5GKET3P$Z+|$qK(fY15f3BArCpgkpn3Xlxv!JQ78gmsbQUkcmhz z(psJjwkDEcU~3eKN+v5Q!6`~gzd-0a)7V`}wEs1#O(-%O3J#|tsALoj3`db*V5B@z z9&8PVp}{CJii(0G6ctHm#Vsf@38Tqyb|A9LNpm3DP@s-SenEaE1ca0LYvObMnauY^LuM1e z@jrXsnBw%~?Z+0dr)@0(fm>~hA(DPLVG=J>$Xkxsc0ZO#mxy#53VVP5Y^XovwEt2p zsv;3VLLd~tFc?A}j3goz!PW{eMKDZ}NU}zg*muPr#rhMS$)K`aiO!UhHtbB<*{~aE zD;wa^Eh>-wJr>tXlue#s?7a<#fnf?J2p9%|!pJKfhaoU97zp|^Vd&z z-BS4F7+~A|kg<;!_GtzE^SJuS*(Qzu!_UuJ{0}{_q5pOAkNEwUu7BzJM-2QU<$t^D zU%LJg1OG_*-|qT69A}QZ3$aHb9&25^24G|Jn|?PhhAr9dsAa|k z0Cw!%ytV-nlSSD=UY0fi$NPq#N9cew>aN~xwy0QJH`~fh50Go&E@5c)9 z^JhPwt%4ew*gkGheXOp^Cs7=5Ncv=Y-;8~9tK|U|0!$I6>Xp^+&QOV+$vmX_!6K)I zoAq|ulIO!d9i3chKrR{_AJ}-f99u@?#m*~TJgDG5G|PXWsV`&Zyzco(SI^Z;>kSzC z1u=y&aj|13{cxdA`sfofAxO^7%bMoy)y+R(}5hv-cIj literal 0 HcmV?d00001 diff --git a/res.qrc b/res.qrc index 45bf7a6..6ead141 100644 --- a/res.qrc +++ b/res.qrc @@ -1,5 +1,7 @@ tower.png + missile.png +