-rw-r--r-- | noncore/games/snake/interface.cpp | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/noncore/games/snake/interface.cpp b/noncore/games/snake/interface.cpp index c9b4931..c824543 100644 --- a/noncore/games/snake/interface.cpp +++ b/noncore/games/snake/interface.cpp | |||
@@ -18,207 +18,204 @@ | |||
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include "interface.h" | 21 | #include "interface.h" |
22 | 22 | ||
23 | #include <qpe/resource.h> | 23 | #include <qpe/resource.h> |
24 | 24 | ||
25 | #include <qpe/qpetoolbar.h> | 25 | #include <qpe/qpetoolbar.h> |
26 | #include <qtoolbutton.h> | 26 | #include <qtoolbutton.h> |
27 | #include <qstyle.h> | 27 | #include <qstyle.h> |
28 | #include <qapplication.h> | 28 | #include <qapplication.h> |
29 | #include <qmessagebox.h> | 29 | #include <qmessagebox.h> |
30 | 30 | ||
31 | SnakeGame::SnakeGame(QWidget* parent, const char* name, WFlags f) : | 31 | SnakeGame::SnakeGame(QWidget* parent, const char* name, WFlags f) : |
32 | QMainWindow(parent,name,f), | 32 | QMainWindow(parent,name,f), |
33 | canvas(232, 258) | 33 | canvas(232, 258) |
34 | { | 34 | { |
35 | setCaption( tr("Snake") ); | 35 | setCaption( tr("Snake") ); |
36 | QPixmap bg = Resource::loadPixmap("grass"); | 36 | QPixmap bg = Resource::loadPixmap("grass"); |
37 | canvas.setBackgroundPixmap(bg); | 37 | canvas.setBackgroundPixmap(bg); |
38 | canvas.setUpdatePeriod(100); | 38 | canvas.setUpdatePeriod(100); |
39 | snake = 0; | 39 | snake = 0; |
40 | 40 | ||
41 | cv = new QCanvasView(&canvas, this); | 41 | cv = new QCanvasView(&canvas, this); |
42 | 42 | ||
43 | pauseTimer = new QTimer(this); | 43 | pauseTimer = new QTimer(this); |
44 | connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) ); | 44 | connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) ); |
45 | 45 | ||
46 | setToolBarsMovable( FALSE ); | 46 | setToolBarsMovable( FALSE ); |
47 | 47 | ||
48 | QPEToolBar* toolbar = new QPEToolBar( this); | 48 | QPEToolBar* toolbar = new QPEToolBar( this); |
49 | toolbar->setHorizontalStretchable( TRUE ); | 49 | toolbar->setHorizontalStretchable( TRUE ); |
50 | 50 | ||
51 | QPixmap newicon = Resource::loadPixmap("ksnake"); | 51 | QPixmap newicon = Resource::loadPixmap("ksnake"); |
52 | setIcon(newicon); | 52 | setIcon(newicon); |
53 | (void)new QToolButton(newicon, tr("New Game"), 0, | 53 | (void)new QToolButton(newicon, tr("New Game"), 0, |
54 | this, SLOT(newGame()), toolbar, "New Game"); | 54 | this, SLOT(newGame()), toolbar, "New Game"); |
55 | 55 | ||
56 | scorelabel = new QLabel(toolbar); | 56 | scorelabel = new QLabel(toolbar); |
57 | showScore(0); | 57 | showScore(0); |
58 | scorelabel->setBackgroundMode( PaletteButton ); | 58 | scorelabel->setBackgroundMode( PaletteButton ); |
59 | scorelabel->setAlignment( AlignRight | AlignVCenter | ExpandTabs ); | 59 | scorelabel->setAlignment( AlignRight | AlignVCenter | ExpandTabs ); |
60 | toolbar->setStretchableWidget( scorelabel ); | 60 | toolbar->setStretchableWidget( scorelabel ); |
61 | 61 | ||
62 | setFocusPolicy(StrongFocus); | 62 | setFocusPolicy(StrongFocus); |
63 | 63 | ||
64 | setCentralWidget(cv); | 64 | setCentralWidget(cv); |
65 | 65 | ||
66 | welcomescreen(); | 66 | QTimer::singleShot( 16, this, SLOT(welcomescreen()) ); |
67 | gamestopped = true; | 67 | gamestopped = true; |
68 | waitover = true; | 68 | waitover = true; |
69 | } | 69 | } |
70 | 70 | ||
71 | SnakeGame::~SnakeGame() | 71 | SnakeGame::~SnakeGame() |
72 | { | 72 | { |
73 | delete snake; | 73 | delete snake; |
74 | } | 74 | } |
75 | 75 | ||
76 | void SnakeGame::resizeEvent(QResizeEvent *) | 76 | void SnakeGame::resizeEvent(QResizeEvent *) |
77 | { | 77 | { |
78 | QSize s = centralWidget()->size(); | 78 | QSize s = centralWidget()->size(); |
79 | int fw = style().defaultFrameWidth(); | 79 | int fw = style().defaultFrameWidth(); |
80 | canvas.resize( s.width() - fw - 2, s.height() - fw - 2); | 80 | canvas.resize( s.width() - fw - 2, s.height() - fw - 2); |
81 | } | 81 | } |
82 | 82 | ||
83 | void SnakeGame::welcomescreen() | 83 | void SnakeGame::welcomescreen() |
84 | { | 84 | { |
85 | QCanvasText* title = new QCanvasText(tr("SNAKE!"), &canvas); | 85 | QCanvasText* title = new QCanvasText(tr("SNAKE!"), &canvas); |
86 | title->setColor(yellow); | 86 | title->setColor(yellow); |
87 | title->setFont( QFont("times", 18, QFont::Bold) ); | 87 | title->setFont( QFont("times", 18, QFont::Bold) ); |
88 | int w = title->boundingRect().width(); | 88 | int w = title->boundingRect().width(); |
89 | title->move(canvas.width()/2 -w/2, canvas.height()/2-110); | 89 | title->move(canvas.width()/2 -w/2, canvas.height()/2-110); |
90 | title->show(); | 90 | title->show(); |
91 | QCanvasPixmapArray* titlearray = new QCanvasPixmapArray(Resource::findPixmap("title")); | 91 | QCanvasPixmapArray* titlearray = new QCanvasPixmapArray(Resource::findPixmap("snake/title")); |
92 | QCanvasSprite* titlepic = new QCanvasSprite(titlearray, &canvas); | 92 | QCanvasSprite* titlepic = new QCanvasSprite(titlearray, &canvas); |
93 | titlepic->move(canvas.width()/2 - 33, canvas.height()/2-85); | 93 | titlepic->move(canvas.width()/2 - 33, canvas.height()/2-85); |
94 | titlepic->show(); | 94 | titlepic->show(); |
95 | QCanvasText* instr = new QCanvasText(tr("Use the arrow keys to guide the\n" | 95 | QCanvasText* instr = new QCanvasText(tr("Use the arrow keys to guide the\n" |
96 | "snake to eat the mouse. You must not\n" | 96 | "snake to eat the mouse. You must not\n" |
97 | "crash into the walls, edges or its tail."), | 97 | "crash into the walls, edges or its tail."), |
98 | &canvas); | 98 | &canvas); |
99 | w = instr->boundingRect().width(); | 99 | w = instr->boundingRect().width(); |
100 | instr->move(canvas.width()/2-w/2, canvas.height()/2-20); | 100 | instr->move(canvas.width()/2-w/2, canvas.height()/2-20); |
101 | instr->setColor(white); | 101 | instr->setColor(white); |
102 | instr->show(); | 102 | instr->show(); |
103 | QCanvasText* cont = new QCanvasText(tr("Press Any Key To Start"), &canvas); | 103 | QCanvasText* cont = new QCanvasText(tr("Press Any Key To Start"), &canvas); |
104 | w = cont->boundingRect().width(); | 104 | w = cont->boundingRect().width(); |
105 | cont->move(canvas.width()/2-w/2, canvas.height()/2+80); | 105 | cont->move(canvas.width()/2-w/2, canvas.height()-20); |
106 | cont->setColor(yellow); | 106 | cont->setColor(yellow); |
107 | cont->show(); | 107 | cont->show(); |
108 | 108 | ||
109 | } | 109 | } |
110 | 110 | ||
111 | void SnakeGame::newGame() | 111 | void SnakeGame::newGame() |
112 | { | 112 | { |
113 | clear(); | 113 | clear(); |
114 | snake = new Snake(&canvas); | 114 | snake = new Snake(&canvas); |
115 | connect(snake, SIGNAL(dead()), this, SLOT(gameOver()) ); | 115 | connect(snake, SIGNAL(dead()), this, SLOT(gameOver()) ); |
116 | connect(snake, SIGNAL(targethit()), this, SLOT(levelUp()) ); | 116 | connect(snake, SIGNAL(targethit()), this, SLOT(levelUp()) ); |
117 | connect(snake, SIGNAL(scorechanged()), this, SLOT(scoreInc()) ); | 117 | connect(snake, SIGNAL(scorechanged()), this, SLOT(scoreInc()) ); |
118 | connect(this, SIGNAL(moveFaster()), snake, SLOT(increaseSpeed()) ); | 118 | connect(this, SIGNAL(moveFaster()), snake, SLOT(increaseSpeed()) ); |
119 | last = 0; | 119 | last = 0; |
120 | targetamount = 1; | 120 | targetamount = 1; |
121 | notargets = 1; | 121 | notargets = 1; |
122 | level = 1; | 122 | level = 1; |
123 | stage = 1; | 123 | stage = 1; |
124 | showScore(0); | 124 | showScore(0); |
125 | gamestopped = false; | 125 | gamestopped = false; |
126 | waitover = true; | 126 | waitover = true; |
127 | int x = canvas.width()/2 - 70; | ||
128 | x = x - x % 16; | ||
129 | int y = canvas.height()-50; | 127 | int y = canvas.height()-50; |
130 | y = y - y % 16; | 128 | (void)new Obstacle(&canvas, 32); |
131 | (void)new Obstacle(&canvas, x, 32); | 129 | (void)new Obstacle(&canvas, y); |
132 | (void)new Obstacle(&canvas, x, y); | ||
133 | createTargets(); | 130 | createTargets(); |
134 | } | 131 | } |
135 | 132 | ||
136 | 133 | ||
137 | void SnakeGame::showScore(int score) | 134 | void SnakeGame::showScore(int score) |
138 | { | 135 | { |
139 | scorelabel->setText(tr(" Score : %1 ").arg(score) ); | 136 | scorelabel->setText(tr(" Score : %1 ").arg(score) ); |
140 | } | 137 | } |
141 | 138 | ||
142 | 139 | ||
143 | void SnakeGame::scoreInc() | 140 | void SnakeGame::scoreInc() |
144 | { | 141 | { |
145 | showScore( snake->getScore() ); | 142 | showScore( snake->getScore() ); |
146 | } | 143 | } |
147 | 144 | ||
148 | void SnakeGame::levelUp() | 145 | void SnakeGame::levelUp() |
149 | { | 146 | { |
150 | notargets--; | 147 | notargets--; |
151 | if (notargets == 0) { | 148 | if (notargets == 0) { |
152 | stage++; | 149 | stage++; |
153 | if (stage == 3) { | 150 | if (stage == 3) { |
154 | level++; | 151 | level++; |
155 | emit moveFaster(); | 152 | emit moveFaster(); |
156 | targetamount++; | 153 | targetamount++; |
157 | stage = 0; | 154 | stage = 0; |
158 | } | 155 | } |
159 | createTargets(); | 156 | createTargets(); |
160 | } | 157 | } |
161 | } | 158 | } |
162 | 159 | ||
163 | void SnakeGame::createTargets() | 160 | void SnakeGame::createTargets() |
164 | { | 161 | { |
165 | for (int i = 0; i < targetamount; i++) | 162 | for (int i = 0; i < targetamount; i++) |
166 | (void)new Target(&canvas); | 163 | (void)new Target(&canvas); |
167 | notargets = targetamount; | 164 | notargets = targetamount; |
168 | } | 165 | } |
169 | 166 | ||
170 | void SnakeGame::clear() | 167 | void SnakeGame::clear() |
171 | { | 168 | { |
172 | delete snake; | 169 | delete snake; |
173 | snake = 0; | 170 | snake = 0; |
174 | QCanvasItemList l = canvas.allItems(); | 171 | QCanvasItemList l = canvas.allItems(); |
175 | for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) { | 172 | for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) { |
176 | delete *it; | 173 | delete *it; |
177 | } | 174 | } |
178 | } | 175 | } |
179 | 176 | ||
180 | void SnakeGame::gameOver() | 177 | void SnakeGame::gameOver() |
181 | { | 178 | { |
182 | int score = snake->getScore(); | 179 | int score = snake->getScore(); |
183 | QString scoreoutput=""; | 180 | QString scoreoutput=""; |
184 | scoreoutput.setNum(score); | 181 | scoreoutput.setNum(score); |
185 | QCanvasText* gameover = new QCanvasText(tr("GAME OVER!\n Your Score: %1").arg( scoreoutput), &canvas); | 182 | QCanvasText* gameover = new QCanvasText(tr("GAME OVER!\n Your Score: %1").arg( scoreoutput), &canvas); |
186 | 183 | ||
187 | gameover->setZ(100); | 184 | gameover->setZ(100); |
188 | gameover->setColor(yellow); | 185 | gameover->setColor(yellow); |
189 | gameover->setFont( QFont("times", 18, QFont::Bold) ); | 186 | gameover->setFont( QFont("times", 18, QFont::Bold) ); |
190 | int w = gameover->boundingRect().width(); | 187 | int w = gameover->boundingRect().width(); |
191 | gameover->move(canvas.width()/2 -w/2, canvas.height()/2 -50); | 188 | gameover->move(canvas.width()/2 -w/2, canvas.height()/2 -50); |
192 | gameover->show(); | 189 | gameover->show(); |
193 | gamestopped = true; | 190 | gamestopped = true; |
194 | waitover = false; | 191 | waitover = false; |
195 | pauseTimer->start(2500); | 192 | pauseTimer->start(1500); |
196 | } | 193 | } |
197 | 194 | ||
198 | void SnakeGame::wait() | 195 | void SnakeGame::wait() |
199 | { | 196 | { |
200 | waitover = true; | 197 | waitover = true; |
201 | pauseTimer->stop(); | 198 | pauseTimer->stop(); |
202 | QCanvasText* cont = new QCanvasText(tr("Press Any Key to Begin a New Game."), | 199 | QCanvasText* cont = new QCanvasText(tr("Press Any Key to Begin a New Game."), |
203 | &canvas); | 200 | &canvas); |
204 | cont->setZ(100); | 201 | cont->setZ(100); |
205 | cont->setColor(white); | 202 | cont->setColor(white); |
206 | int w = cont->boundingRect().width(); | 203 | int w = cont->boundingRect().width(); |
207 | cont->move(canvas.width()/2 -w/2, canvas.height()/2); | 204 | cont->move(canvas.width()/2 -w/2, canvas.height()/2); |
208 | cont->show(); | 205 | cont->show(); |
209 | } | 206 | } |
210 | 207 | ||
211 | void SnakeGame::keyPressEvent(QKeyEvent* event) | 208 | void SnakeGame::keyPressEvent(QKeyEvent* event) |
212 | { | 209 | { |
213 | if (gamestopped) { | 210 | if (gamestopped) { |
214 | if (waitover) | 211 | if (waitover) |
215 | newGame(); | 212 | newGame(); |
216 | else | 213 | else |
217 | return; | 214 | return; |
218 | } | 215 | } |
219 | else { | 216 | else { |
220 | int newkey = event->key(); | 217 | int newkey = event->key(); |
221 | snake->go(newkey); | 218 | snake->go(newkey); |
222 | } | 219 | } |
223 | } | 220 | } |
224 | 221 | ||