Diffstat (limited to 'noncore/games/tetrix/qtetrix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/tetrix/qtetrix.cpp | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/noncore/games/tetrix/qtetrix.cpp b/noncore/games/tetrix/qtetrix.cpp index 20cf1a7..a6a5f34 100644 --- a/noncore/games/tetrix/qtetrix.cpp +++ b/noncore/games/tetrix/qtetrix.cpp | |||
@@ -17,24 +17,25 @@ | |||
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | 21 | ||
22 | #include "qtetrix.h" | 22 | #include "qtetrix.h" |
23 | 23 | ||
24 | #include <qpe/resource.h> | 24 | #include <qpe/resource.h> |
25 | 25 | ||
26 | #include <qlabel.h> | 26 | #include <qlabel.h> |
27 | #include <qdatetime.h> | 27 | #include <qdatetime.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #include <qtimer.h> | ||
29 | 30 | ||
30 | #include "ohighscoredlg.h" | 31 | #include "ohighscoredlg.h" |
31 | 32 | ||
32 | 33 | ||
33 | void drawTetrixButton( QPainter *p, int x, int y, int w, int h, | 34 | void drawTetrixButton( QPainter *p, int x, int y, int w, int h, |
34 | const QColor *color ) | 35 | const QColor *color ) |
35 | { | 36 | { |
36 | QColor fc; | 37 | QColor fc; |
37 | if ( color ) { | 38 | if ( color ) { |
38 | QPointArray a; | 39 | QPointArray a; |
39 | a.setPoints( 3, x,y+h-1, x,y, x+w-1,y ); | 40 | a.setPoints( 3, x,y+h-1, x,y, x+w-1,y ); |
40 | p->setPen( color->light() ); | 41 | p->setPen( color->light() ); |
@@ -98,77 +99,110 @@ QTetrix::QTetrix( QWidget *parent, const char *name, WFlags f ) | |||
98 | { | 99 | { |
99 | setIcon( Resource::loadPixmap( "tetrix_icon" ) ); | 100 | setIcon( Resource::loadPixmap( "tetrix_icon" ) ); |
100 | setCaption( tr("Tetrix" ) ); | 101 | setCaption( tr("Tetrix" ) ); |
101 | 102 | ||
102 | QTime t = QTime::currentTime(); | 103 | QTime t = QTime::currentTime(); |
103 | TetrixPiece::setRandomSeed( (((double)t.hour())+t.minute()+t.second())/ | 104 | TetrixPiece::setRandomSeed( (((double)t.hour())+t.minute()+t.second())/ |
104 | (24+60+60) ); | 105 | (24+60+60) ); |
105 | 106 | ||
106 | QWidget *gameArea = new QWidget( this ); | 107 | QWidget *gameArea = new QWidget( this ); |
107 | setCentralWidget( gameArea ); | 108 | setCentralWidget( gameArea ); |
108 | 109 | ||
109 | QGridLayout *gl = new QGridLayout( gameArea, 5, 3, 8 ); | 110 | QGridLayout *gl = new QGridLayout( gameArea, 5, 3, 8 ); |
111 | gl->setColStretch( 1, 5 ); | ||
112 | gl->setColStretch( 2, 10 ); | ||
110 | 113 | ||
111 | QLabel *l; | 114 | QLabel *l; |
112 | l = new QLabel( tr("Next"), gameArea ); | 115 | l = new QLabel( tr("Next"), gameArea ); |
113 | gl->addWidget( l, 0, 0 ); | 116 | gl->addWidget( l, 0, 0 ); |
114 | showNext = new ShowNextPiece(gameArea); | 117 | showNext = new ShowNextPiece(gameArea); |
115 | showNext->setBackgroundColor(QColor(0,0,0)); | 118 | showNext->setBackgroundColor(QColor(0,0,0)); |
116 | gl->addWidget( showNext, 0, 1 ); | 119 | gl->addWidget( showNext, 0, 1 ); |
117 | 120 | ||
118 | l = new QLabel( tr("Score"), gameArea ); | 121 | l = new QLabel( tr("Score"), gameArea ); |
119 | gl->addWidget( l, 1, 0 ); | 122 | gl->addWidget( l, 1, 0 ); |
120 | showScore = new QLabel(gameArea); | 123 | showScore = new QLabel(gameArea); |
121 | gl->addWidget( showScore, 1, 1 ); | 124 | gl->addWidget( showScore, 1, 1 ); |
122 | l = new QLabel( tr("Level"), gameArea ); | 125 | l = new QLabel( tr("Level"), gameArea ); |
123 | gl->addWidget( l, 2, 0 ); | 126 | gl->addWidget( l, 2, 0 ); |
124 | showLevel = new QLabel(gameArea); | 127 | showLevel = new QLabel(gameArea); |
125 | gl->addWidget( showLevel, 2, 1 ); | 128 | gl->addWidget( showLevel, 2, 1 ); |
126 | l = new QLabel( tr("Removed"), gameArea ); | 129 | l = new QLabel( tr("Removed"), gameArea ); |
127 | gl->addWidget( l, 3, 0 ); | 130 | gl->addWidget( l, 3, 0 ); |
128 | showLines = new QLabel(gameArea); | 131 | showLines = new QLabel(gameArea); |
129 | gl->addWidget( showLines, 3, 1 ); | 132 | gl->addWidget( showLines, 3, 1 ); |
130 | 133 | ||
131 | board = new QTetrixBoard(gameArea); | 134 | board = new QTetrixBoard(gameArea); |
132 | board->setBackgroundColor(QColor(0,0,0)); | 135 | board->setBackgroundColor(QColor(0,0,0)); |
133 | board->setFixedWidth( 124 ); | ||
134 | gl->addMultiCellWidget( board, 0, 4, 2, 2 ); | 136 | gl->addMultiCellWidget( board, 0, 4, 2, 2 ); |
135 | gl->addColSpacing( 2, 100 ); | ||
136 | gl->addColSpacing( 1, 35 ); | ||
137 | gl->addRowSpacing( 0, 35 ); | ||
138 | 137 | ||
139 | QPushButton *pb = new QPushButton( tr("Start"), gameArea ); | 138 | QPushButton *pb = new QPushButton( tr("Start"), gameArea ); |
140 | pb->setFocusPolicy( NoFocus ); | 139 | pb->setFocusPolicy( NoFocus ); |
141 | connect( pb, SIGNAL( clicked() ), board, SLOT( start() ) ); | 140 | connect( pb, SIGNAL( clicked() ), board, SLOT( start() ) ); |
142 | gl->addMultiCellWidget( pb, 4, 4, 0, 1 ); | 141 | gl->addMultiCellWidget( pb, 4, 4, 0, 1 ); |
143 | 142 | ||
144 | connect( board, SIGNAL(gameOverSignal()), SLOT(gameOver()) ); | 143 | connect( board, SIGNAL(gameOverSignal()), SLOT(gameOver()) ); |
145 | connect( board, SIGNAL(drawNextSquareSignal(int,int,QColor*)), showNext, | 144 | connect( board, SIGNAL(drawNextSquareSignal(int,int,QColor*)), this, |
146 | SLOT(drawNextSquare(int,int,QColor*)) ); | 145 | SLOT(setNext(int,int,QColor*)) ); |
147 | connect( showNext, SIGNAL(update()), board, SLOT(updateNext()) ); | 146 | connect( showNext, SIGNAL(update()), board, SLOT(updateNext()) ); |
148 | connect( board, SIGNAL(updateScoreSignal(int)), showScore, | 147 | connect( board, SIGNAL(updateScoreSignal(int)), showScore, SLOT(setNum(int)) ); |
149 | SLOT(setNum(int)) ); | 148 | connect( board, SIGNAL(updateLevelSignal(int)), showLevel, SLOT(setNum(int)) ); |
150 | connect( board, SIGNAL(updateLevelSignal(int)), showLevel, | 149 | connect( board, SIGNAL(updateRemovedSignal(int)), showLines, SLOT(setNum(int)) ); |
151 | SLOT(setNum(int))); | ||
152 | connect( board, SIGNAL(updateRemovedSignal(int)), showLines, | ||
153 | SLOT(setNum(int))); | ||
154 | 150 | ||
155 | showScore->setNum( 0 ); | 151 | showScore->setNum( 0 ); |
156 | showLevel->setNum( 0 ); | 152 | showLevel->setNum( 0 ); |
157 | showLines->setNum( 0 ); | 153 | showLines->setNum( 0 ); |
158 | board->revealNextPiece(TRUE); | 154 | board->revealNextPiece(TRUE); |
159 | board->setFocusPolicy( StrongFocus ); | 155 | board->setFocusPolicy( StrongFocus ); |
156 | |||
157 | QTimer::singleShot( -1, this, SLOT(setup()) ); | ||
158 | } | ||
159 | |||
160 | void QTetrix::setup() | ||
161 | { | ||
162 | resizeEvent( 0x0 ); | ||
160 | } | 163 | } |
161 | 164 | ||
162 | void QTetrix::gameOver() | 165 | void QTetrix::gameOver() |
163 | { | 166 | { |
164 | OHighscore *hs = new OHighscore( showScore->text().toInt() , showLevel->text().toInt() ); | 167 | OHighscore *hs = new OHighscore( showScore->text().toInt() , showLevel->text().toInt() ); |
165 | if ( hs->isNewhighscore ) | 168 | if ( hs->isNewhighscore ) |
166 | hs->insertData( hs->getName(), showScore->text().toInt() , showLevel->text().toInt() ); | 169 | hs->insertData( hs->getName(), showScore->text().toInt() , showLevel->text().toInt() ); |
167 | OHighscoreDialog hscdlg( hs, this, "OHighscoreDialog", true ); | 170 | OHighscoreDialog hscdlg( hs, this, "OHighscoreDialog", true ); |
168 | hscdlg.exec(); | 171 | hscdlg.exec(); |
169 | } | 172 | } |
170 | 173 | ||
171 | void QTetrix::quit() | 174 | void QTetrix::quit() |
172 | { | 175 | { |
173 | close(); | 176 | close(); |
174 | } | 177 | } |
178 | |||
179 | void QTetrix::setNext( int x, int y, QColor *color ) | ||
180 | { | ||
181 | resizeEvent( 0x0 ); | ||
182 | showNext->drawNextSquare( x, y, color ); | ||
183 | } | ||
184 | |||
185 | void QTetrix::resizeEvent( QResizeEvent * ) | ||
186 | { | ||
187 | // Set size of board | ||
188 | int widthFactor = board->QFrame::width() / board->boardWidth(); | ||
189 | if ( widthFactor < 1 ) | ||
190 | widthFactor = 1; | ||
191 | int heightFactor = board->QFrame::height() / board->boardHeight(); | ||
192 | if ( heightFactor < 1 ) | ||
193 | heightFactor = 1; | ||
194 | widthFactor > heightFactor ? board->resize( heightFactor * board->boardWidth() + 2, | ||
195 | heightFactor * board->boardHeight() + 2 ) | ||
196 | : board->resize( widthFactor * board->boardWidth() + 2, | ||
197 | widthFactor * board->boardHeight() + 2 ); | ||
198 | |||
199 | // Set size of preview widget | ||
200 | widthFactor = showNext->width() / 5; | ||
201 | if ( widthFactor < 1 ) | ||
202 | widthFactor = 1; | ||
203 | heightFactor = showNext->height() / 6; | ||
204 | if ( heightFactor < 1 ) | ||
205 | heightFactor = 1; | ||
206 | widthFactor > heightFactor ? showNext->resize( heightFactor * 5 + 2, heightFactor * 6 + 2 ) | ||
207 | : showNext->resize( widthFactor * 5 + 2, widthFactor * 6 + 2 ); | ||
208 | } | ||