1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#include "game.h"
GameState::GameState(Renderer* renderer, float scale_):
closed_ {false},
paused_ {false},
timeAdvance_ {1000},
timeCounterAdvance_ {1000},
timeLevelUp_ {20000},
renderer_ {renderer},
piece_ {Piece::PieceType::LINE, 4},
blockTexture_ {renderer_->renderer()} {
renderer->setScale(scale_, scale_);
blockTexture_.loadFromFile("assets/block.png");
for(int i=0; i < GRID_WIDTH; i++){
for(int j=0; j < GRID_HEIGHT; j++){
grid[j][i] = 0;
}
}
grid[1][1] = 1;
grid[0][1] = 1;
grid[0][2] = 1;
grid[9][9] = 1;
xdirection_ = Direction::NONE;
yspeed_ = 1;
}
void GameState::close(){
closed_ = true;
}
void GameState::pause(){
paused_ = true;
}
void GameState::resume(){
paused_ = false;
}
bool GameState::isPaused(){
return paused_;
}
bool GameState::isClosed(){
return closed_;
}
void GameState::update( unsigned int dt ){
timeCounterAdvance_ -= dt * yspeed_;
if ( timeCounterAdvance_ <= 0 ){
timeCounterAdvance_ = timeAdvance_;
Piece tmp = piece_;
tmp.advance();
Point* p;
tmp.initIterator();
// Check if there's space to move forward
bool canadvance;
while ( p = tmp.nextAbsBlockPos() ){
if ( grid[p->y][p->x] == 0 ){
canadvance = true;
} else {
canadvance = false;
}
}
if ( canadvance ){
piece_ = tmp;
}
}
// If timer finished, level up
timeCounterLevelUp_ -= dt;
if ( timeCounterLevelUp_ <= 0 ){
// Make pieces go faster
timeAdvance_ *= 0.95;
timeCounterLevelUp_ = timeLevelUp_;
}
}
void GameState::render(){
// TODO
renderer_->clear();
SDL_Rect rect;
rect.x = 0;
rect.y = 0;
rect.w = SQUARE_SIZE;
rect.h = SQUARE_SIZE;
// Render piece
Point* b;
piece_.initIterator();
while( b = piece_.nextAbsBlockPos() ){
blockTexture_.render( b->x * SQUARE_SIZE, b->y * SQUARE_SIZE, &rect );
}
// Render grid
for(int i=0; i < GRID_WIDTH; i++){
for(int j=0; j < GRID_HEIGHT; j++){
if( grid[j][i] != 0){
blockTexture_.render( i * SQUARE_SIZE, j * SQUARE_SIZE , &rect);
}
}
}
renderer_->update();
}
void GameState::pressRotate(){}
void GameState::pressDown(){
yspeed_ = 4;
}
void GameState::releaseDown(){
yspeed_ = 1;
}
void GameState::pressLeft(){}
void GameState::releaseLeft(){}
void GameState::pressRight(){}
void GameState::releaseRight(){}
|