Diffstat (limited to 'noncore/games/fifteen/fifteen.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/games/fifteen/fifteen.cpp | 83 |
1 files changed, 55 insertions, 28 deletions
diff --git a/noncore/games/fifteen/fifteen.cpp b/noncore/games/fifteen/fifteen.cpp index 2e4ed94..b4e0308 100644 --- a/noncore/games/fifteen/fifteen.cpp +++ b/noncore/games/fifteen/fifteen.cpp | |||
@@ -1,7 +1,7 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
@@ -20,8 +20,8 @@ | |||
20 | 20 | ||
21 | #include "fifteen.h" | 21 | #include "fifteen.h" |
22 | 22 | ||
23 | #include <qpe/resource.h> | 23 | #include <qtopia/resource.h> |
24 | #include <qpe/config.h> | 24 | #include <qtopia/config.h> |
25 | 25 | ||
26 | #include <qvbox.h> | 26 | #include <qvbox.h> |
27 | #include <qaction.h> | 27 | #include <qaction.h> |
@@ -29,50 +29,53 @@ | |||
29 | #include <qpainter.h> | 29 | #include <qpainter.h> |
30 | #include <qpopupmenu.h> | 30 | #include <qpopupmenu.h> |
31 | #include <qmessagebox.h> | 31 | #include <qmessagebox.h> |
32 | #include <qpe/qpetoolbar.h> | 32 | #include <qtoolbar.h> |
33 | #include <qmenubar.h> | 33 | #include <qmenubar.h> |
34 | #include <qstringlist.h> | 34 | #include <qstringlist.h> |
35 | #include <qapplication.h> | 35 | #include <qapplication.h> |
36 | #include <qtoolbutton.h> | ||
36 | 37 | ||
37 | #include <stdlib.h> | 38 | #include <stdlib.h> |
38 | #include <time.h> | 39 | #include <time.h> |
39 | 40 | ||
40 | FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name) | 41 | FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name, WFlags fl) |
41 | : QMainWindow( parent, name ) | 42 | : QMainWindow( parent, name, fl ) |
42 | { | 43 | { |
43 | // random seed | 44 | // random seed |
44 | srand(time(0)); | 45 | srand(time(0)); |
45 | 46 | setCaption( tr("Fifteen Pieces") ); | |
46 | setToolBarsMovable( FALSE ); | ||
47 | QVBox *vbox = new QVBox( this ); | ||
48 | PiecesTable *table = new PiecesTable( vbox ); | ||
49 | setCentralWidget(vbox); | ||
50 | 47 | ||
51 | QToolBar *toolbar = new QToolBar(this); | 48 | QToolBar *toolbar = new QToolBar(this); |
52 | toolbar->setHorizontalStretchable( TRUE ); | 49 | toolbar->setHorizontalStretchable( FALSE ); |
53 | addToolBar(toolbar); | ||
54 | |||
55 | QMenuBar *menubar = new QMenuBar( toolbar ); | 50 | QMenuBar *menubar = new QMenuBar( toolbar ); |
56 | menubar->setMargin(0); | 51 | menubar->setMargin(0); |
57 | |||
58 | QPopupMenu *game = new QPopupMenu( this ); | 52 | QPopupMenu *game = new QPopupMenu( this ); |
59 | 53 | ||
60 | QWidget *spacer = new QWidget( toolbar ); | 54 | QWidget *spacer = new QWidget( toolbar ); |
61 | spacer->setBackgroundMode( PaletteButton ); | 55 | spacer->setBackgroundMode( PaletteButton ); |
62 | toolbar->setStretchableWidget( spacer ); | 56 | toolbar->setStretchableWidget( spacer ); |
63 | 57 | ||
58 | |||
59 | setToolBarsMovable( FALSE ); | ||
60 | QVBox *vbox = new QVBox( this ); | ||
61 | PiecesTable *table = new PiecesTable( vbox ); | ||
62 | setCentralWidget(vbox); | ||
63 | |||
64 | |||
65 | |||
64 | QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ), | 66 | QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ), |
65 | QString::null, 0, this, 0 ); | 67 | QString::null, 0, this, 0 ); |
66 | connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) ); | 68 | connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) ); |
67 | a->addTo( game ); | 69 | a->addTo( game ); |
68 | a->addTo( toolbar ); | 70 | a->addTo( toolbar ); |
69 | 71 | ||
70 | a = new QAction( tr( "Solve" ), Resource::loadPixmap( "repeat" ), | 72 | /* This is pointless and confusing. |
73 | a = new QAction( tr( "Solve" ), Resource::loadIconSet( "repeat" ), | ||
71 | QString::null, 0, this, 0 ); | 74 | QString::null, 0, this, 0 ); |
72 | connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) ); | 75 | connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) ); |
73 | a->addTo( game ); | 76 | a->addTo( game ); |
74 | a->addTo( toolbar ); | 77 | a->addTo( toolbar ); |
75 | 78 | */ | |
76 | menubar->insertItem( tr( "Game" ), game ); | 79 | menubar->insertItem( tr( "Game" ), game ); |
77 | } | 80 | } |
78 | 81 | ||
@@ -109,7 +112,7 @@ void PiecesTable::writeConfig() | |||
109 | Config cfg("Fifteen"); | 112 | Config cfg("Fifteen"); |
110 | cfg.setGroup("Game"); | 113 | cfg.setGroup("Game"); |
111 | QStringList map; | 114 | QStringList map; |
112 | for (unsigned int i = 0; i < 16; i++) | 115 | for (int i = 0; i < 16; i++) |
113 | map.append( QString::number( _map[i] ) ); | 116 | map.append( QString::number( _map[i] ) ); |
114 | cfg.writeEntry("Map", map, '-'); | 117 | cfg.writeEntry("Map", map, '-'); |
115 | cfg.writeEntry("Randomized", _randomized ); | 118 | cfg.writeEntry("Randomized", _randomized ); |
@@ -121,7 +124,7 @@ void PiecesTable::readConfig() | |||
121 | cfg.setGroup("Game"); | 124 | cfg.setGroup("Game"); |
122 | QStringList map = cfg.readListEntry("Map", '-'); | 125 | QStringList map = cfg.readListEntry("Map", '-'); |
123 | _randomized = cfg.readBoolEntry( "Randomized", FALSE ); | 126 | _randomized = cfg.readBoolEntry( "Randomized", FALSE ); |
124 | unsigned int i = 0; | 127 | int i = 0; |
125 | for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) { | 128 | for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) { |
126 | _map[i] = (*it).toInt(); | 129 | _map[i] = (*it).toInt(); |
127 | i++; | 130 | i++; |
@@ -146,18 +149,18 @@ void PiecesTable::paintCell(QPainter *p, int row, int col) | |||
146 | p->setPen(NoPen); | 149 | p->setPen(NoPen); |
147 | p->drawRect(0, 0, w, h); | 150 | p->drawRect(0, 0, w, h); |
148 | 151 | ||
152 | if (number == 16) return; | ||
153 | |||
149 | // draw borders | 154 | // draw borders |
150 | if (height() > 40) { | 155 | if (height() > 40) { |
151 | p->setPen(colorGroup().text()); | 156 | p->setBrush(_colors[number-1].light(130)); |
152 | if(col < numCols()-1) | 157 | p->drawPolygon(light_border); |
153 | p->drawLine(x2, 0, x2, y2); // right border line | ||
154 | 158 | ||
155 | if(row < numRows()-1) | 159 | p->setBrush(_colors[number-1].dark(130)); |
156 | p->drawLine(0, y2, x2, y2); // bottom boder line | 160 | p->drawPolygon(dark_border); |
157 | } | 161 | } |
158 | 162 | ||
159 | // draw number | 163 | // draw number |
160 | if (number == 16) return; | ||
161 | p->setPen(black); | 164 | p->setPen(black); |
162 | p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number)); | 165 | p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number)); |
163 | } | 166 | } |
@@ -168,6 +171,30 @@ void PiecesTable::resizeEvent(QResizeEvent *e) | |||
168 | 171 | ||
169 | setCellWidth(contentsRect().width()/ numRows()); | 172 | setCellWidth(contentsRect().width()/ numRows()); |
170 | setCellHeight(contentsRect().height() / numCols()); | 173 | setCellHeight(contentsRect().height() / numCols()); |
174 | |||
175 | // | ||
176 | // Calculate 3d-effect borders | ||
177 | // | ||
178 | intcell_w = cellWidth(); | ||
179 | intcell_h = cellHeight(); | ||
180 | int x_offset = cell_w - int(cell_w * 0.9);// 10% should be enough | ||
181 | inty_offset = cell_h - int(cell_h * 0.9); | ||
182 | |||
183 | light_border.setPoints(6, | ||
184 | 0, 0, | ||
185 | cell_w, 0, | ||
186 | cell_w - x_offset, y_offset, | ||
187 | x_offset, y_offset, | ||
188 | x_offset, cell_h - y_offset, | ||
189 | 0, cell_h); | ||
190 | |||
191 | dark_border.setPoints(6, | ||
192 | cell_w, 0, | ||
193 | cell_w, cell_h, | ||
194 | 0, cell_h, | ||
195 | x_offset, cell_h - y_offset, | ||
196 | cell_w - x_offset, cell_h - y_offset, | ||
197 | cell_w - x_offset, y_offset); | ||
171 | } | 198 | } |
172 | 199 | ||
173 | void PiecesTable::initColors() | 200 | void PiecesTable::initColors() |
@@ -181,7 +208,7 @@ void PiecesTable::initColors() | |||
181 | void PiecesTable::initMap() | 208 | void PiecesTable::initMap() |
182 | { | 209 | { |
183 | _map.resize(16); | 210 | _map.resize(16); |
184 | for (unsigned int i = 0; i < 16; i++) | 211 | for ( int i = 0; i < 16; i++) |
185 | _map[i] = i; | 212 | _map[i] = i; |
186 | 213 | ||
187 | _randomized = false; | 214 | _randomized = false; |
@@ -241,8 +268,8 @@ void PiecesTable::randomizeMap() | |||
241 | } | 268 | } |
242 | // move free cell to click position | 269 | // move free cell to click position |
243 | _map[pos=(col + row * numCols())] = 15; | 270 | _map[pos=(col + row * numCols())] = 15; |
244 | repaint(); | ||
245 | } | 271 | } |
272 | repaint(); | ||
246 | } | 273 | } |
247 | 274 | ||
248 | void PiecesTable::checkwin() | 275 | void PiecesTable::checkwin() |