| 17916a2e |
sago007 |
2010-11-07 11:26 |
1 |
/* |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2 |
=========================================================================== |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
3 |
blockattack - Block Attack - Rise of the Blocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
4 |
Copyright (C) 2005-2012 Poul Sander |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
5 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
6 |
This program is free software: you can redistribute it and/or modify |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
7 |
it under the terms of the GNU General Public License as published by |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
8 |
the Free Software Foundation, either version 2 of the License, or |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
9 |
(at your option) any later version. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
10 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
11 |
This program is distributed in the hope that it will be useful, |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
12 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
14 |
GNU General Public License for more details. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
15 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
16 |
You should have received a copy of the GNU General Public License |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
17 |
along with this program. If not, see http://www.gnu.org/licenses/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
18 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
19 |
Source information and contacts persons can be found at |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
20 |
http://blockattack.sf.net |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
21 |
=========================================================================== |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
22 |
*/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
23 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
24 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
25 |
#include "BlockGame.hpp" |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
26 |
#include<boost/lexical_cast.hpp> |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
27 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
28 |
|
| 444cec07 |
sago007 |
2012-05-05 16:42 |
29 |
static stringstream ss; //Used for internal formatting |
| 444cec07 |
sago007 |
2012-05-05 16:42 |
30 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
31 |
//////////////////////////////////////////////////////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
32 |
//The BloackGame class represents a board, score, time etc. for a single player/ |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
33 |
//////////////////////////////////////////////////////////////////////////////// |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
34 |
Uint16 BlockGame::rand2() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
35 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
36 |
nextRandomNumber = nextRandomNumber*1103515245 + 12345; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
37 |
return ((Uint16)(nextRandomNumber/65536)) % 32768; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
38 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
39 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
40 |
int BlockGame::firstUnusedChain() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
41 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
42 |
bool found=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
43 |
int i = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
44 |
while (!found) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
45 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
46 |
if (!chainUsed[++i]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
47 |
found=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
48 |
if (i>NUMBEROFCHAINS-2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
49 |
found=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
50 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
51 |
return i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
52 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
53 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
54 |
//Constructor |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
55 |
BlockGame::BlockGame() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
56 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
57 |
srand((int)time(NULL)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
58 |
nrFellDown = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
59 |
nrPushedPixel = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
60 |
garbageTarget = this; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
61 |
nrStops=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
62 |
//topx = tx; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
63 |
//topy = ty; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
64 |
cursorx = 2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
65 |
cursory = 3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
66 |
stop = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
67 |
pixels = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
68 |
score = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
69 |
bGameOver = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
70 |
bDraw = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
71 |
bReplaying=false; //No replay by default |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
72 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
73 |
bDisconnected=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
74 |
bNetworkPlayer = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
75 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
76 |
timetrial = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
77 |
stageClear = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
78 |
vsMode = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
79 |
puzzleMode = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
80 |
linesCleared = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
81 |
AI_Enabled = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
82 |
AI_MoveSpeed=100; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
83 |
hasWonTheGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
84 |
combo=0; //counts |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
85 |
chain=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
86 |
hangTicks = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
87 |
baseSpeed = 0.5; //All other speeds are relative to this |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
88 |
speed = baseSpeed; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
89 |
speedLevel = 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
90 |
ticks = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
91 |
gameStartedAt = ticks; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
92 |
gameEndedAfter = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
93 |
pushedPixelAt = gameStartedAt; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
94 |
nextGarbageNumber = 10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
95 |
handicap=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
96 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
97 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
98 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
99 |
board[i][j] = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
100 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
101 |
for (int i=0; i<NUMBEROFCHAINS; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
102 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
103 |
chainUsed[i]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
104 |
chainSize[i] = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
105 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
106 |
theReplay = Replay(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
107 |
showGame = true; //The game is now active |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
108 |
lastCounter = -1; //To prevent the final chunk to be played when stating the program |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
109 |
} //Constructor |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
110 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
111 |
//Deconstructor, never really used... game used to crash when called, cause of the way sBoard was created |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
112 |
//It should work now and can be used if we want to assign more players in network games that we need to free later |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
113 |
BlockGame::~BlockGame() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
114 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
115 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
116 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
117 |
void BlockGame::setGameSpeed(Uint8 globalSpeedLevel) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
118 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
119 |
format f("%1%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
120 |
f % globalSpeedLevel; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
121 |
ActionPerformed(ACTION_GAMESPEED,f.str()); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
122 |
switch (globalSpeedLevel) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
123 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
124 |
case 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
125 |
baseSpeed=0.5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
126 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
127 |
case 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
128 |
baseSpeed=0.4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
129 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
130 |
case 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
131 |
baseSpeed=0.3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
132 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
133 |
case 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
134 |
baseSpeed=0.25; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
135 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
136 |
case 4: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
137 |
baseSpeed=0.2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
138 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
139 |
default: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
140 |
baseSpeed=0.15; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
141 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
142 |
}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
143 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
144 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
145 |
void BlockGame::setHandicap(Uint8 globalHandicap) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
146 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
147 |
format f("%1%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
148 |
f % globalHandicap; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
149 |
ActionPerformed(ACTION_HANDICAP, f.str()); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
150 |
handicap=1000*((Uint32)globalHandicap); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
151 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
152 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
153 |
//Set the move speed of the AI based on the aiLevel parameter |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
154 |
//Also enables AI |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
155 |
void BlockGame::setAIlevel(Uint8 aiLevel) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
156 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
157 |
AI_Enabled = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
158 |
AI_MoveSpeed=120-(20*(aiLevel-3)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
159 |
}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
160 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
161 |
Uint8 BlockGame::getAIlevel() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
162 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
163 |
return (120-AI_MoveSpeed)/20+3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
164 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
165 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
166 |
int BlockGame::GetScore() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
167 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
168 |
return score; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
169 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
170 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
171 |
int BlockGame::GetHandicap() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
172 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
173 |
return handicap; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
174 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
175 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
176 |
bool BlockGame::isGameOver() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
177 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
178 |
return bGameOver; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
179 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
180 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
181 |
int BlockGame::GetTopX() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
182 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
183 |
return topx; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
184 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
185 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
186 |
int BlockGame::GetTopY() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
187 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
188 |
return topy; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
189 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
190 |
|
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
191 |
Sint32 BlockGame::GetGameStartedAt() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
192 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
193 |
return gameStartedAt; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
194 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
195 |
|
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
196 |
Sint32 BlockGame::GetGameEndedAt() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
197 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
198 |
return gameEndedAfter; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
199 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
200 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
201 |
bool BlockGame::isTimeTrial() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
202 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
203 |
return timetrial; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
204 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
205 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
206 |
bool BlockGame::isStageClear() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
207 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
208 |
return stageClear; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
209 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
210 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
211 |
bool BlockGame::isVsMode() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
212 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
213 |
return vsMode; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
214 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
215 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
216 |
bool BlockGame::isPuzzleMode() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
217 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
218 |
return puzzleMode; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
219 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
220 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
221 |
int BlockGame::GetLinesCleared() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
222 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
223 |
return linesCleared; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
224 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
225 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
226 |
int BlockGame::GetStageClearLimit() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
227 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
228 |
return stageClearLimit; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
229 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
230 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
231 |
int BlockGame::GetChains() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
232 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
233 |
return chain; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
234 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
235 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
236 |
int BlockGame::GetPixels() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
237 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
238 |
return pixels; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
239 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
240 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
241 |
int BlockGame::GetSpeedLevel() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
242 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
243 |
return speedLevel; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
244 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
245 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
246 |
int BlockGame::GetTowerHeight() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
247 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
248 |
return TowerHeight; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
249 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
250 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
251 |
int BlockGame::GetCursorX() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
252 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
253 |
return cursorx; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
254 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
255 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
256 |
int BlockGame::GetCursorY() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
257 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
258 |
return cursory; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
259 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
260 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
261 |
void BlockGame::MoveCursorTo(int x, int y) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
262 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
263 |
format f("%1% %2%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
264 |
f % x % y; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
265 |
ActionPerformed(ACTION_MOVECURSORTO,f.str()); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
266 |
cursorx = x; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
267 |
cursory = y; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
268 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
269 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
270 |
bool BlockGame::GetIsWinner() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
271 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
272 |
return hasWonTheGame; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
273 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
274 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
275 |
#if NETWORK |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
276 |
#define garbageStackSize 10 |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
277 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
278 |
void BlockGame::emptyGarbageStack() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
279 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
280 |
for (int i=0; i<10; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
281 |
for (int j=0; j<3; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
282 |
garbageStack[i][j] = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
283 |
garbageStackUsed = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
284 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
285 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
286 |
bool BlockGame::pushGarbage(Uint8 width, Uint8 height, Uint8 type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
287 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
288 |
if (garbageStackUsed>=garbageStackSize) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
289 |
return false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
290 |
garbageStack[garbageStackUsed][0]=width; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
291 |
garbageStack[garbageStackUsed][1]=height; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
292 |
garbageStack[garbageStackUsed][2]=type; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
293 |
garbageStackUsed++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
294 |
return true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
295 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
296 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
297 |
bool BlockGame::popGarbage(Uint8 *width, Uint8 *height, Uint8 *type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
298 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
299 |
if (garbageStackUsed<1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
300 |
return false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
301 |
garbageStackUsed--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
302 |
*width=garbageStack[garbageStackUsed][0]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
303 |
*height=garbageStack[garbageStackUsed][1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
304 |
*type=garbageStack[garbageStackUsed][2]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
305 |
return true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
306 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
307 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
308 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
309 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
310 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
311 |
//Instead of creating new object new game is called, to prevent memory leaks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
312 |
void BlockGame::NewGame(int tx, int ty, unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
313 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
314 |
this->ticks = ticks; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
315 |
stageButtonStatus = SBdontShow; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
316 |
bReplaying = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
317 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
318 |
bNetworkPlayer=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
319 |
bDisconnected =false; |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
320 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
321 |
nrFellDown = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
322 |
lastNrOfPlayers = 1; //At least one player :-) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
323 |
nrPushedPixel = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
324 |
nrStops = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
325 |
topx = tx; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
326 |
topy = ty; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
327 |
cursorx = 2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
328 |
cursory = 3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
329 |
stop = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
330 |
pixels = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
331 |
score = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
332 |
bGameOver = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
333 |
bDraw = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
334 |
timetrial = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
335 |
stageClear = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
336 |
linesCleared = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
337 |
hasWonTheGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
338 |
vsMode = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
339 |
puzzleMode = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
340 |
combo=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
341 |
chain=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
342 |
AI_Enabled = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
343 |
baseSpeed= 0.5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
344 |
speed = baseSpeed; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
345 |
speedLevel = 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
346 |
gameStartedAt = ticks+3000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
347 |
pushedPixelAt = gameStartedAt; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
348 |
nextGarbageNumber = 10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
349 |
handicap=0; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
350 |
actionIndex = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
351 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
352 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
353 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
354 |
board[i][j] = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
355 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
356 |
for (int i=0; i<NUMBEROFCHAINS; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
357 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
358 |
chainUsed[i]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
359 |
chainSize[i] = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
360 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
361 |
lastAImove = ticks+3000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
362 |
showGame = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
363 |
theReplay = Replay(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
364 |
ActionPerformed(ACTION_NEW,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
365 |
} //NewGame |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
366 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
367 |
void BlockGame::NewTimeTrialGame(int x,int y, unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
368 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
369 |
NewGame(x,y,ticks); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
370 |
ActionPerformed(ACTION_NEWTT,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
371 |
timetrial = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
372 |
putStartBlocks(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
373 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
374 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
375 |
//Starts a new stage game, takes level as input! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
376 |
void BlockGame::NewStageGame(int level, int tx, int ty,unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
377 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
378 |
if (level > -1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
379 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
380 |
NewGame(tx, ty,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
381 |
stageClear = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
382 |
Level = level; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
383 |
Stats::getInstance()->addOne("PlayedStageLevel"+itoa2(level)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
384 |
stageClearLimit = 30+(Level%6)*10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
385 |
baseSpeed = 0.5/((double)(Level*0.5)+1.0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
386 |
speed = baseSpeed; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
387 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
388 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
389 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
390 |
void BlockGame::NewPuzzleGame(int level, int tx, int ty, unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
391 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
392 |
if (level>-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
393 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
394 |
NewGame(tx, ty,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
395 |
puzzleMode = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
396 |
Level = level; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
397 |
MovesLeft = nrOfMovesAllowed[Level]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
398 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
399 |
for (int j=0; j<12; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
400 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
401 |
board[i][j+1] = puzzleLevels[Level][i][j]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
402 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
403 |
baseSpeed = 100000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
404 |
speed = 100000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
405 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
406 |
//Now push the blines up |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
407 |
for (int i=19; i>0; i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
408 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
409 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
410 |
board[j][i] = board[j][i-1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
411 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
412 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
413 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
414 |
board[j][0] = rand() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
415 |
if (j > 0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
416 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
417 |
if (board[j][0] == board[j-1][0]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
418 |
board[j][0] = rand() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
419 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
420 |
if (board[j][0] == board[j][1]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
421 |
board[j][0] = 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
422 |
if (board[j][0] == board[j][1]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
423 |
board[j][0] = 6; |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
424 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
425 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
426 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
427 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
428 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
429 |
//Replay the current level |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
430 |
void BlockGame::retryLevel(unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
431 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
432 |
if(puzzleMode) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
433 |
NewPuzzleGame(Level,topx,topy,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
434 |
else if(stageClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
435 |
NewStageGame(Level,topx,topy,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
436 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
437 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
438 |
//Play the next level |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
439 |
void BlockGame::nextLevel(unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
440 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
441 |
if(puzzleMode) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
442 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
443 |
if(Level<nrOfPuzzles-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
444 |
NewPuzzleGame(Level+1,topx,topy,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
445 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
446 |
else if(stageClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
447 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
448 |
if(Level<50-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
449 |
NewStageGame(Level+1,topx,topy,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
450 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
451 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
452 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
453 |
//Starts new Vs Game (two Player) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
454 |
void BlockGame::NewVsGame(int tx, int ty, BlockGame *target,unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
455 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
456 |
NewGame(tx, ty,ticks); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
457 |
ActionPerformed(ACTION_NEWVS,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
458 |
vsMode = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
459 |
putStartBlocks(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
460 |
garbageTarget = target; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
461 |
Stats::getInstance()->addOne("VSgamesStarted"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
462 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
463 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
464 |
//Starts new Vs Game (two Player) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
465 |
void BlockGame::NewVsGame(int tx, int ty, BlockGame *target, bool AI,unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
466 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
467 |
NewGame(tx, ty,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
468 |
vsMode = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
469 |
AI_Enabled = AI; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
470 |
if(!AI) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
471 |
Stats::getInstance()->addOne("VSgamesStarted"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
472 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
473 |
strcpy(name,"CPU\0"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
474 |
putStartBlocks(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
475 |
garbageTarget = target; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
476 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
477 |
//Go in Demonstration mode, no movement |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
478 |
void BlockGame::Demonstration(bool toggle) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
479 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
480 |
speed=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
481 |
baseSpeed = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
482 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
483 |
//We want to play the replay (must have been loaded beforehand) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
484 |
void BlockGame::playReplay(int tx, int ty, unsigned int ticks, Replay r) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
485 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
486 |
if(r.getActions().size()==0) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
487 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
488 |
cout << "Empty replay data" << endl; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
489 |
return; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
490 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
491 |
NewGame(tx, ty,ticks); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
492 |
gameStartedAt = ticks+3000; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
493 |
replayIndex = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
494 |
bReplaying = true; //We are playing, no calculations |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
495 |
theReplay = r; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
496 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
497 |
bNetworkPlayer = false; //Take input from replay file |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
498 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
499 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
500 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
501 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
502 |
#if NETWORK |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
503 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
504 |
//network play |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
505 |
void BlockGame::playNetwork(int tx, int ty,unsigned int ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
506 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
507 |
NewGame(tx, ty,ticks); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
508 |
gameStartedAt = ticks; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
509 |
bReplaying = false; //We are playing, no calculations |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
510 |
bNetworkPlayer = true; //Don't Take input from replay file |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
511 |
emptyGarbageStack(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
512 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
513 |
#endif |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
514 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
515 |
//Prints "winner" and ends game |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
516 |
void BlockGame::setPlayerWon() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
517 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
518 |
ActionPerformed(ACTION_WIN,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
519 |
if (!bGameOver) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
520 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
521 |
gameEndedAfter = ticks-gameStartedAt; //We game ends now! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
522 |
if(!AI_Enabled && !bReplaying) |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
523 |
{ |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
524 |
TimeHandler::addTime("playTime",TimeHandler::ms2ct(gameEndedAfter)); |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
525 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
526 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
527 |
bGameOver = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
528 |
hasWonTheGame = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
529 |
showGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
530 |
if (SoundEnabled)Mix_PlayChannel(1, applause, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
531 |
if(!AI_Enabled && !bReplaying) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
532 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
533 |
Stats::getInstance()->addOne("totalWins"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
534 |
if(garbageTarget->AI_Enabled && !(garbageTarget->bReplaying)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
535 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
536 |
//We have defeated an AI |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
537 |
Stats::getInstance()->addOne("defeatedAI"+itoa(garbageTarget->getAIlevel())); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
538 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
539 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
540 |
if(AI_Enabled && !(garbageTarget->AI_Enabled) && garbageTarget->bReplaying==false) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
541 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
542 |
//The AI have defeated a human player |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
543 |
Stats::getInstance()->addOne("defeatedByAI"+itoa(getAIlevel())); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
544 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
545 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
546 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
547 |
//void SetGameOver(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
548 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
549 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
550 |
//Sets disconnected: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
551 |
void BlockGame::setDisconnect() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
552 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
553 |
bDisconnected = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
554 |
SetGameOver(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
555 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
556 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
557 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
558 |
//Prints "draw" and ends the game |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
559 |
void BlockGame::setDraw() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
560 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
561 |
ActionPerformed(ACTION_DRAW, ""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
562 |
bGameOver = true; |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
563 |
if(!AI_Enabled && !bReplaying) |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
564 |
{ |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
565 |
TimeHandler::addTime("playTime",TimeHandler::ms2ct(gameEndedAfter)); |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
566 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
567 |
hasWonTheGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
568 |
bDraw = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
569 |
showGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
570 |
Mix_HaltChannel(1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
571 |
if(!AI_Enabled && !bReplaying) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
572 |
Stats::getInstance()->addOne("totalDraws"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
573 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
574 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
575 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
576 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
577 |
//Test if LineNr is an empty line, returns false otherwise. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
578 |
bool BlockGame::LineEmpty(int lineNr) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
579 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
580 |
bool empty = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
581 |
for (int i = 0; i <7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
582 |
if (board[i][lineNr] != -1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
583 |
empty = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
584 |
return empty; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
585 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
586 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
587 |
//Test if the entire board is empty (used for Puzzles) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
588 |
bool BlockGame::BoardEmpty() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
589 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
590 |
bool empty = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
591 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
592 |
for (int j=1; j<13; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
593 |
if (board[i][j] != -1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
594 |
empty = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
595 |
return empty; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
596 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
597 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
598 |
//Anything that the user can't move? In that case Game Over cannot occur |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
599 |
bool BlockGame::hasStaticContent() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
600 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
601 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
602 |
for (int j=1; j<13; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
603 |
if (board[i][j] >= 10000000) //Higher than this means combos (garbage is static, but the stack is static but nothing to do about it) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
604 |
return true; //They are static |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
605 |
return false; //Return false if no static object found |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
606 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
607 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
608 |
/* |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
609 |
* Generates some blocks so the user don't see a board without blocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
610 |
*/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
611 |
//void putStartBlocks(Uint32); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
612 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
613 |
void BlockGame::putStartBlocks() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
614 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
615 |
putStartBlocks(time(0)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
616 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
617 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
618 |
void BlockGame::putStartBlocks(Uint32 n) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
619 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
620 |
format f("%1%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
621 |
f % n; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
622 |
ActionPerformed(ACTION_STARTBLOCKS ,f.str()); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
623 |
cout << n << ":" << f.str() << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
624 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
625 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
626 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
627 |
board[i][j] = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
628 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
629 |
nextRandomNumber = n; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
630 |
int choice = rand2()%3; //Pick a random layout |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
631 |
switch (choice) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
632 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
633 |
case 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
634 |
//row 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
635 |
board[0][0]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
636 |
board[1][0]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
637 |
board[2][0]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
638 |
board[3][0]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
639 |
board[4][0]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
640 |
board[5][0]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
641 |
//row 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
642 |
board[0][1]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
643 |
board[1][1]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
644 |
board[2][1]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
645 |
board[3][1]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
646 |
board[4][1]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
647 |
board[5][1]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
648 |
//row 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
649 |
board[0][2]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
650 |
board[1][2]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
651 |
board[2][2]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
652 |
board[3][2]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
653 |
board[4][2]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
654 |
board[5][2]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
655 |
//row 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
656 |
board[0][3]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
657 |
board[1][3]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
658 |
board[2][3]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
659 |
board[3][3]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
660 |
board[4][3]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
661 |
board[5][3]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
662 |
//row 4: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
663 |
board[0][4]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
664 |
board[1][4]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
665 |
board[2][4]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
666 |
board[3][4]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
667 |
board[4][4]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
668 |
board[5][4]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
669 |
//row 5: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
670 |
board[0][5]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
671 |
board[1][5]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
672 |
board[2][5]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
673 |
board[3][5]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
674 |
board[4][5]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
675 |
board[5][5]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
676 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
677 |
case 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
678 |
//row 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
679 |
board[0][0]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
680 |
board[1][0]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
681 |
board[2][0]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
682 |
board[3][0]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
683 |
board[4][0]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
684 |
board[5][0]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
685 |
//row 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
686 |
board[0][1]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
687 |
board[1][1]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
688 |
board[2][1]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
689 |
board[3][1]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
690 |
board[4][1]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
691 |
board[5][1]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
692 |
//row 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
693 |
board[0][2]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
694 |
board[1][2]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
695 |
board[2][2]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
696 |
board[3][2]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
697 |
board[4][2]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
698 |
board[5][2]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
699 |
//row 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
700 |
board[0][3]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
701 |
board[5][3]=3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
702 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
703 |
default: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
704 |
//row 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
705 |
board[0][0]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
706 |
board[1][0]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
707 |
board[2][0]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
708 |
board[3][0]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
709 |
board[4][0]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
710 |
board[5][0]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
711 |
//row 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
712 |
board[0][1]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
713 |
board[1][1]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
714 |
board[2][1]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
715 |
board[3][1]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
716 |
board[4][1]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
717 |
board[5][1]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
718 |
//row 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
719 |
board[0][2]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
720 |
board[1][2]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
721 |
board[2][2]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
722 |
board[3][2]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
723 |
board[4][2]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
724 |
board[5][2]=5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
725 |
//row 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
726 |
board[0][3]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
727 |
board[1][3]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
728 |
board[2][3]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
729 |
board[3][3]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
730 |
board[4][3]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
731 |
board[5][3]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
732 |
//row 4: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
733 |
board[0][4]=4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
734 |
board[1][4]=2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
735 |
board[2][4]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
736 |
board[3][4]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
737 |
board[4][4]=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
738 |
board[5][4]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
739 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
740 |
}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
741 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
742 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
743 |
//decreases hang for all hanging blocks and wait for waiting blocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
744 |
void BlockGame::ReduceStuff() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
745 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
746 |
Uint32 howMuchHang = (ticks - FRAMELENGTH*hangTicks)/FRAMELENGTH; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
747 |
if (howMuchHang>0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
748 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
749 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
750 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
751 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
752 |
if ((board[i][j]/BLOCKHANG)%10==1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
753 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
754 |
int hangNumber = (board[i][j]/10)%100; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
755 |
if (hangNumber<=howMuchHang) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
756 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
757 |
board[i][j]-=BLOCKHANG; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
758 |
board[i][j]-=hangNumber*10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
759 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
760 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
761 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
762 |
board[i][j]-=10*howMuchHang; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
763 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
764 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
765 |
if ((board[i][j]/BLOCKWAIT)%10==1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
766 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
767 |
int hangNumber = (board[i][j]/10)%100; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
768 |
if (hangNumber<=howMuchHang) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
769 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
770 |
//The blocks must be cleared |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
771 |
board[i][j]-=hangNumber*10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
772 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
773 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
774 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
775 |
board[i][j]-=10*howMuchHang; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
776 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
777 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
778 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
779 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
780 |
hangTicks+=howMuchHang; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
781 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
782 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
783 |
//Creates garbage using a given wide and height |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
784 |
bool BlockGame::CreateGarbage(int wide, int height) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
785 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
786 |
format f("%1% %2%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
787 |
f % wide % height; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
788 |
ActionPerformed(ACTION_CREATEGARBAGE,f.str()); |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
789 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
790 |
if (bNetworkPlayer) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
791 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
792 |
pushGarbage(wide, height, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
793 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
794 |
else |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
795 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
796 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
797 |
if (wide>6) wide = 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
798 |
if (height>12) height = 12; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
799 |
int startPosition = 12; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
800 |
while ((!(LineEmpty(startPosition))) || (startPosition == 29)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
801 |
startPosition++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
802 |
if (startPosition == 29) return false; //failed to place blocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
803 |
if (29-startPosition<height) return false; //not enough space |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
804 |
int start, end; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
805 |
if (bGarbageFallLeft) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
806 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
807 |
start=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
808 |
end=start+wide; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
809 |
bGarbageFallLeft = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
810 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
811 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
812 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
813 |
start=6-wide; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
814 |
end = 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
815 |
bGarbageFallLeft = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
816 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
817 |
for (int i = startPosition; i <startPosition+height; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
818 |
for (int j = start; j < end; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
819 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
820 |
board[j][i] = 1000000+nextGarbageNumber; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
821 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
822 |
nextGarbageNumber++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
823 |
if (nextGarbageNumber>999999) nextGarbageNumber = 10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
824 |
//bGarbageFallLeft = !(bGarbageFallLeft); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
825 |
return true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
826 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
827 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
828 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
829 |
//Creates garbage using a given wide and height |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
830 |
bool BlockGame::CreateGreyGarbage() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
831 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
832 |
ActionPerformed(ACTION_CREATEGRAYGARBAGE,""); |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
833 |
#if NETWORK |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
834 |
if (bNetworkPlayer) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
835 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
836 |
pushGarbage(6, 1, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
837 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
838 |
else |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
839 |
#endif |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
840 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
841 |
int startPosition = 12; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
842 |
while ((!(LineEmpty(startPosition))) || (startPosition == 29)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
843 |
startPosition++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
844 |
if (startPosition == 29) return false; //failed to place blocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
845 |
if (29-startPosition<1) return false; //not enough space |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
846 |
int start, end; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
847 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
848 |
start=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
849 |
end=6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
850 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
851 |
for (int i = startPosition; i <startPosition+1; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
852 |
for (int j = start; j < end; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
853 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
854 |
board[j][i] = 2*1000000+nextGarbageNumber; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
855 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
856 |
nextGarbageNumber++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
857 |
if (nextGarbageNumber>999999) nextGarbageNumber = 10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
858 |
return true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
859 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
860 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
861 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
862 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
863 |
//Clears garbage, must take one the lower left corner! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
864 |
int BlockGame::GarbageClearer(int x, int y, int number, bool aLineToClear, int chain) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
865 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
866 |
if ((board[x][y])%1000000 != number) return -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
867 |
if (aLineToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
868 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
869 |
board[x][y] = rand() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
870 |
board[x][y] += 10*HANGTIME+BLOCKHANG+CHAINPLACE*chain; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
871 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
872 |
garbageToBeCleared[x][y] = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
873 |
GarbageClearer(x+1, y, number, aLineToClear, chain); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
874 |
GarbageClearer(x, y+1, number, false, chain); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
875 |
return 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
876 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
877 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
878 |
//Marks garbage that must be cleared |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
879 |
int BlockGame::GarbageMarker(int x, int y) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
880 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
881 |
if ((x>6)||(x<0)||(y<0)||(y>29)) return -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
882 |
if (((board[x][y])/1000000 == 1)&&(garbageToBeCleared[x][y] == false)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
883 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
884 |
garbageToBeCleared[x][y] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
885 |
//Float fill |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
886 |
GarbageMarker(x-1, y); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
887 |
GarbageMarker(x+1, y); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
888 |
GarbageMarker(x, y-1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
889 |
GarbageMarker(x, y+1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
890 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
891 |
return 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
892 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
893 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
894 |
int BlockGame::FirstGarbageMarker(int x, int y) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
895 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
896 |
if ((x>6)||(x<0)||(y<0)||(y>29)) return -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
897 |
if (((board[x][y])/1000000 == 2)&&(garbageToBeCleared[x][y] == false)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
898 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
899 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
900 |
garbageToBeCleared[i][y] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
901 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
902 |
else if (((board[x][y])/1000000 == 1)&&(garbageToBeCleared[x][y] == false)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
903 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
904 |
garbageToBeCleared[x][y] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
905 |
//Float fill |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
906 |
GarbageMarker(x-1, y); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
907 |
GarbageMarker(x+1, y); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
908 |
GarbageMarker(x, y-1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
909 |
GarbageMarker(x, y+1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
910 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
911 |
return 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
912 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
913 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
914 |
//Clear Blocks if 3 or more is alligned (naive implemented) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
915 |
void BlockGame::ClearBlocks() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
916 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
917 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
918 |
bool toBeCleared[7][30]; //true if blok must be removed |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
919 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
920 |
int previus=-1; //the last block checked |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
921 |
int combo=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
922 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
923 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
924 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
925 |
toBeCleared[j][i] = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
926 |
garbageToBeCleared[j][i] = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
927 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
928 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
929 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
930 |
bool faaling = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
931 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
932 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
933 |
if ((faaling)&&(board[i][j]>-1)&&(board[i][j]%10000000<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
934 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
935 |
board[i][j]+=BLOCKFALL; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
936 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
937 |
if ((!faaling)&&((board[i][j]/BLOCKFALL)%10==1)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
938 |
board[i][j]-=BLOCKFALL; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
939 |
if (!((board[i][j]>-1)&&(board[i][j]%10000000<7))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
940 |
faaling=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
941 |
if (((board[i][j]/1000000)%10==1)||((board[i][j]/1000000)%10==2)||((board[i][j]/BLOCKHANG)%10==1)||((board[i][j]/BLOCKWAIT)%10==1)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
942 |
faaling = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
943 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
944 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
945 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
946 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
947 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
948 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
949 |
previus = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
950 |
combo=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
951 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
952 |
for (int i=1; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
953 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
954 |
if ((board[j][i]>-1)&&(board[j][i]%10000000<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
955 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
956 |
if (board[j][i]%10000000 == previus) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
957 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
958 |
combo++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
959 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
960 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
961 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
962 |
if (combo>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
963 |
for (int k = i-combo; k<i; k++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
964 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
965 |
toBeCleared[j][k] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
966 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
967 |
combo=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
968 |
previus = board[j][i]%10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
969 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
970 |
} //if board |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
971 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
972 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
973 |
if (combo>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
974 |
for (int k = i-combo; k<i; k++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
975 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
976 |
toBeCleared[j][k] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
977 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
978 |
combo = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
979 |
previus = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
980 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
981 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
982 |
} //for i |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
983 |
} //for j |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
984 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
985 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
986 |
combo = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
987 |
chain = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
988 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
989 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
990 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
991 |
//Clears blocks marked for clearing |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
992 |
Sint32 temp=board[i][j]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
993 |
if (1==((temp/BLOCKWAIT)%10)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
994 |
if (((temp/10)%100)==0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
995 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
996 |
if (chainSize[chain]<chainSize[board[i][j]/10000000]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
997 |
chain = board[i][j]/10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
998 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
999 |
theBallManeger.addBall(topx+40+i*bsize, topy+bsize*12-j*bsize, true, board[i][j]%10); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1000 |
theBallManeger.addBall(topx+i*bsize, topy+bsize*12-j*bsize, false, board[i][j]%10); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1001 |
theExplosionManeger.addExplosion(topx-10+i*bsize, topy+bsize*12-10-j*bsize); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1002 |
board[i][j]=-2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1003 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1004 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1005 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1006 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1007 |
bool setChain=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1008 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1009 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1010 |
if (board[i][j]==-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1011 |
setChain=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1012 |
if (board[i][j]==-2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1013 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1014 |
board[i][j]=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1015 |
setChain=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1016 |
if (SoundEnabled)Mix_PlayChannel(0, boing, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1017 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1018 |
if (board[i][j]!=-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1019 |
if ((setChain)&&((board[i][j]/GARBAGE)%10!=1)&&((board[i][j]/GARBAGE)%10!=2)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1020 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1021 |
board[i][j]=((board[i][j]%CHAINPLACE)+CHAINPLACE*chain); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1022 |
//somethingsGottaFall = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1023 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1024 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1025 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1026 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1027 |
combo=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1028 |
int startvalue; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1029 |
if (pixels == 0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1030 |
startvalue=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1031 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1032 |
startvalue=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1033 |
for (int i=startvalue; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1034 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1035 |
previus=-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1036 |
combo=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1037 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1038 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1039 |
if (((board[j][i]>-1)&&(board[j][i]%10000000<7))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1040 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1041 |
if (board[j][i]%10000000 == previus) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1042 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1043 |
combo++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1044 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1045 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1046 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1047 |
if (combo>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1048 |
for (int k = j-combo; k<j; k++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1049 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1050 |
toBeCleared[k][i] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1051 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1052 |
combo=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1053 |
previus = board[j][i]%10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1054 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1055 |
} //if board |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1056 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1057 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1058 |
if (combo>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1059 |
for (int k = j-combo; k<j; k++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1060 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1061 |
toBeCleared[k][i] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1062 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1063 |
combo = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1064 |
previus = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1065 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1066 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1067 |
} //for j |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1068 |
} //for i |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1069 |
bool blockIsFalling[6][30]; //See that is falling |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1070 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1071 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1072 |
blockIsFalling[j][i] = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1073 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1074 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1075 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1076 |
combo = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1077 |
chain = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1078 |
int grey = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1079 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1080 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1081 |
if (toBeCleared[j][i]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1082 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1083 |
//see if any garbage is around: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1084 |
FirstGarbageMarker(j-1, i); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1085 |
FirstGarbageMarker(j+1, i); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1086 |
FirstGarbageMarker(j, i-1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1087 |
FirstGarbageMarker(j, i+1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1088 |
//that is checked now :-) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1089 |
if (board[j][i]%10000000==6) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1090 |
grey++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1091 |
if ((vsMode) && (grey>2) && (board[j][i]%10000000==6)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1092 |
garbageTarget->CreateGreyGarbage(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1093 |
if ((board[j][i]>-1)&&(board[j][i]%10000000<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1094 |
board[j][i]+=BLOCKWAIT+10*FALLTIME; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1095 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1096 |
if (chainSize[board[j][i]/10000000]>chainSize[chain]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1097 |
chain=board[j][i]/10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1098 |
combo++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1099 |
stop+=140*combo; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1100 |
score +=10; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1101 |
if (combo>3) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1102 |
score+=3*combo; //More points if more cleared simontanously |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1103 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1104 |
score+=chainSize[chain]*100; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1105 |
if (chain==0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1106 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1107 |
chain=firstUnusedChain(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1108 |
chainSize[chain]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1109 |
chainUsed[chain]=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1110 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1111 |
chainSize[chain]++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1112 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1113 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1114 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1115 |
//if(board[j][i]/10==(BLOCKWAIT+10*FALLTIME)/10) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1116 |
if (toBeCleared[j][i]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1117 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1118 |
board[j][i]=(board[j][i]%10000000)+chain*10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1119 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1120 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1121 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1122 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1123 |
//This is here we add text to screen! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1124 |
bool dead = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1125 |
for (int i=29; i>=0; i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1126 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1127 |
if (toBeCleared[j][i]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1128 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1129 |
if (!dead) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1130 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1131 |
dead=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1132 |
string tempS = itoa(chainSize[chain]); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1133 |
if (chainSize[chain]>1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1134 |
theTextManeger.addText(topx-10+j*bsize, topy+12*bsize-i*bsize, tempS, 1000); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1135 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1136 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1137 |
} //This was there text was added |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1138 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1139 |
if (vsMode) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1140 |
switch (combo) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1141 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1142 |
case 0: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1143 |
case 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1144 |
case 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1145 |
case 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1146 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1147 |
case 4: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1148 |
garbageTarget->CreateGarbage(3, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1149 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1150 |
case 5: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1151 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1152 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1153 |
case 6: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1154 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1155 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1156 |
case 7: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1157 |
garbageTarget->CreateGarbage(6, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1158 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1159 |
case 8: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1160 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1161 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1162 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1163 |
case 9: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1164 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1165 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1166 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1167 |
case 10: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1168 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1169 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1170 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1171 |
case 11: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1172 |
garbageTarget->CreateGarbage(6, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1173 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1174 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1175 |
case 12: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1176 |
garbageTarget->CreateGarbage(6, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1177 |
garbageTarget->CreateGarbage(6, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1178 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1179 |
case 13: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1180 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1181 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1182 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1183 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1184 |
default: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1185 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1186 |
garbageTarget->CreateGarbage(5, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1187 |
garbageTarget->CreateGarbage(4, 1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1188 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1189 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1190 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1191 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1192 |
if (garbageToBeCleared[j][i]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1193 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1194 |
GarbageClearer(j, i, board[j][i]%1000000, true, chain); //Clears the blocks and all blocks connected to it. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1195 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1196 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1197 |
chain=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1198 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1199 |
//Break chains (if a block is stable it is resetted to (chain == 0)): |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1200 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1201 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1202 |
bool faaling = false; //In the beginning we are NOT falling |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1203 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1204 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1205 |
if ((faaling)&&(board[i][j]>-1)&&(board[i][j]<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1206 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1207 |
board[i][j]+=BLOCKFALL; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1208 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1209 |
if ((!faaling)&&((board[i][j]/BLOCKFALL)%10==1)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1210 |
board[i][j]-=BLOCKFALL; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1211 |
if ((!faaling)&&(board[i][j]>0)&&(board[i][j]/10000000!=0)&&((board[i][j]/BLOCKWAIT)%10!=1)&&((board[i][j]/BLOCKHANG)%10!=1)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1212 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1213 |
if (chainSize[board[i][j]/10000000]>chainSize[chain]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1214 |
chain=board[i][j]/10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1215 |
board[i][j]=board[i][j]%10000000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1216 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1217 |
if (!((board[i][j]>-1)&&(board[i][j]<7))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1218 |
faaling=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1219 |
if (((board[i][j]/1000000)%10==1)||((board[i][j]/BLOCKHANG)%10==1)||((board[i][j]/BLOCKWAIT)%10==1)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1220 |
faaling = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1221 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1222 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1223 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1224 |
//Create garbage as a result |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1225 |
//if((vsMode)&&(chainSize[chain]>1)) garbageTarget->CreateGarbage(6,chainSize[chain]-1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1226 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1227 |
//Calculate chain |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1228 |
chain=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1229 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1230 |
for (int j=0; j<30; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1231 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1232 |
if (chainSize[board[i][j]/10000000]>chain) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1233 |
chain=chainSize[board[i][j]/10000000]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1234 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1235 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1236 |
//Make space in table for more things |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1237 |
if (chain==0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1238 |
for (int i=0; i<NUMBEROFCHAINS; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1239 |
if (chainUsed[i]==true) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1240 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1241 |
if ((vsMode)&&(chainSize[i]>1)) garbageTarget->CreateGarbage(6, chainSize[i]-1); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1242 |
if ((SoundEnabled)&&(chainSize[i]>4))Mix_PlayChannel(1, applause, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1243 |
if(chainSize[i]>1 && !puzzleMode && !AI_Enabled) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1244 |
Stats::getInstance()->addOne((string)"chainX"+itoa(chainSize[i])); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1245 |
chainUsed[i]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1246 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1247 |
} //ClearBlocks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1248 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1249 |
//prints "Game Over" and ends game |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1250 |
void BlockGame::SetGameOver() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1251 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1252 |
ActionPerformed(ACTION_GAMEOVER ,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1253 |
if (!bGameOver) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1254 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1255 |
gameEndedAfter = ticks-gameStartedAt; //We game ends now! |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1256 |
if(!AI_Enabled && !bReplaying) |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1257 |
{ |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1258 |
TimeHandler::addTime("playTime",TimeHandler::ms2ct(gameEndedAfter)); |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1259 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1260 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1261 |
if(bReplaying) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1262 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1263 |
bReplaying = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1264 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1265 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1266 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1267 |
theReplay.setName(name); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1268 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1269 |
bGameOver = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1270 |
showGame = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1271 |
if(stageClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1272 |
stageButtonStatus = SBstageClear; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1273 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1274 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1275 |
bool BlockGame::GetAIenabled() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1276 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1277 |
return AI_Enabled; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1278 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1279 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1280 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1281 |
//Moves all peaces a spot down if possible |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1282 |
int BlockGame::FallBlock(int x, int y, int number) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1283 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1284 |
if (y == 0) return -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1285 |
if (x>0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1286 |
if (board[x-1][y] == number) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1287 |
return -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1288 |
int i=x; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1289 |
bool canFall = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1290 |
//checks a line of a garbage block and see if something is under it |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1291 |
while ((board[i][y] == number)&&(canFall)&&(i<6)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1292 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1293 |
if (board[i][y-1] != -1) canFall = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1294 |
i++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1295 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1296 |
if (canFall) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1297 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1298 |
//cout << "Now falling" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1299 |
for (int j = x; j<i; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1300 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1301 |
board[j][y-1] = board[j][y]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1302 |
board[j][y] = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1303 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1304 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1305 |
return 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1306 |
} //FallBlock |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1307 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1308 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1309 |
//Makes all Garbage fall one spot |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1310 |
void BlockGame::GarbageFall() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1311 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1312 |
for (int i=0; i<30; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1313 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1314 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1315 |
if ((((board[j][i]/1000000)%10) == 1)||(((board[j][i]/1000000)%10) == 2)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1316 |
FallBlock(j, i, board[j][i]); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1317 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1318 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1319 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1320 |
//Makes the blocks fall (it doesn't test time, this must be done before hand) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1321 |
void BlockGame::FallDown() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1322 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1323 |
bool falling =false; //nothing is moving unless proven otherwise |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1324 |
for (int i=0; i<29; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1325 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1326 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1327 |
if ((board[j][i]==-1) && (board[j][i+1]!=-1) && (board[j][i+1]%BLOCKFALL<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1328 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1329 |
board[j][i] = board[j][i+1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1330 |
board[j][i+1] = -1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1331 |
falling = true; //something is moving! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1332 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1333 |
if ((board[j][i]/BLOCKWAIT)%10==1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1334 |
falling=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1335 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1336 |
if (!falling) //If nothing is falling |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1337 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1338 |
if ((puzzleMode)&&(!bGameOver)&&(MovesLeft==0)&&(!(BoardEmpty()))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1339 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1340 |
//Puzzle not won |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1341 |
SetGameOver(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1342 |
stageButtonStatus = SBpuzzleMode; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1343 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1344 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1345 |
GarbageFall(); //Makes the garbage fall |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1346 |
nrFellDown++; //Sets number of this fall, so we know then the next will occur |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1347 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1348 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1349 |
//Moves the cursor, receaves N,S,E or W as a char an moves as desired |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1350 |
void BlockGame::MoveCursor(char way) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1351 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1352 |
format f("%1%"); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
1353 |
f % way; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1354 |
ActionPerformed(ACTION_MOVECURSOR,f.str()); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1355 |
if (!bGameOver) //If game over nothing happends |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1356 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1357 |
if ((way == 'N') && ((cursory<10)||(TowerHeight>12) ||(((pixels==bsize)||(pixels==0)) && (cursory<11)))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1358 |
cursory++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1359 |
if ((way == 'S') && (cursory>0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1360 |
cursory--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1361 |
if ((way == 'W') && (cursorx>0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1362 |
cursorx--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1363 |
if ((way == 'E') && (cursorx<4)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1364 |
cursorx++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1365 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1366 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1367 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1368 |
//switches the two blocks at the cursor position, unless game over |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1369 |
void BlockGame::SwitchAtCursor() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1370 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1371 |
ActionPerformed(ACTION_SWITCH,""); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1372 |
if ((board[cursorx][cursory+1]<7) && (board[cursorx+1][cursory+1]<7) && (!bGameOver) && ((!puzzleMode)||(MovesLeft>0)) && (gameStartedAt<ticks)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1373 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1374 |
int temp = board[cursorx][cursory+1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1375 |
board[cursorx][cursory+1] = board[cursorx+1][cursory+1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1376 |
board[cursorx+1][cursory+1] = temp; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1377 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1378 |
if ((puzzleMode)&&(gameStartedAt<ticks)&&(MovesLeft>0)) MovesLeft--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1379 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1380 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1381 |
void BlockGame::PushLine() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1382 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1383 |
ActionPerformed(ACTION_PUSH,""); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1384 |
PushLineInternal(); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1385 |
} |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1386 |
|
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1387 |
//Generates a new line and moves the field one block up (restart puzzle mode) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1388 |
void BlockGame::PushLineInternal() |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1389 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1390 |
//If not game over, not high tower and not puzzle mode |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1391 |
if ((!bGameOver) && TowerHeight<13 && (!puzzleMode) && (gameStartedAt<ticks)&&(chain==0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1392 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1393 |
for (int i=19; i>0; i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1394 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1395 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1396 |
board[j][i] = board[j][i-1]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1397 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1398 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1399 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1400 |
board[j][0] = rand2() % 4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1401 |
if (j > 0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1402 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1403 |
if (board[j][0] == board[j-1][0]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1404 |
board[j][0] = rand2() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1405 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1406 |
if (board[j][0] == board[j][1]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1407 |
board[j][0] = rand2() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1408 |
if (board[j][0] == board[j][1]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1409 |
board[j][0] = rand2() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1410 |
while ((j>0)&&(board[j][0]==board[j-1][0])) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1411 |
board[j][0] = rand2() % 6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1412 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1413 |
score+=1; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1414 |
if(!bReplaying) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1415 |
MoveCursor('N'); //Workaround for this being done registred too |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1416 |
if (vsMode) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1417 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1418 |
if (rand2()%6==1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1419 |
board[rand2()%6][0]=6; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1420 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1421 |
pixels = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1422 |
stop=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1423 |
pushedPixelAt = ticks; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1424 |
linesCleared++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1425 |
AI_LineOffset++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1426 |
nrPushedPixel=(int)((double)(pushedPixelAt-gameStartedAt)/(1000.0*speed)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1427 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1428 |
if(!AI_Enabled && !bReplaying) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1429 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1430 |
Stats::getInstance()->addOne("linesPushed"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1431 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1432 |
} //if !bGameOver |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1433 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1434 |
//Restart Puzzle mode |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1435 |
if (puzzleMode && !bGameOver) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1436 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1437 |
//Reloads level |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1438 |
MovesLeft = nrOfMovesAllowed[Level]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1439 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1440 |
for (int j=0; j<12; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1441 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1442 |
board[i][j+1] = puzzleLevels[Level][i][j]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1443 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1444 |
score=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1445 |
bGameOver=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1446 |
showGame = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1447 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1448 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1449 |
if ((TowerHeight>12) && (!puzzleMode)&&(!bGameOver)&&(chain==0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1450 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1451 |
if ((!vsMode)&&(theTopScoresEndless.isHighScore(score))&&(!AI_Enabled)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1452 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1453 |
if (SoundEnabled)Mix_PlayChannel(1, applause, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1454 |
theTopScoresEndless.addScore(name, score); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1455 |
cout << "New high score!" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1456 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1457 |
SetGameOver(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1458 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1459 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1460 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1461 |
}//PushLine |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1462 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1463 |
//Pushes a single pixel, so it appears to scrool |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1464 |
void BlockGame::PushPixels() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1465 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1466 |
nrPushedPixel++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1467 |
if ((pixels < bsize) && TowerHeight<13) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1468 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1469 |
pixels++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1470 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1471 |
else |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1472 |
PushLineInternal(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1473 |
if (pixels>bsize) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1474 |
pixels=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1475 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1476 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1477 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1478 |
//See how high the tower is, saved in integer TowerHeight |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1479 |
void BlockGame::FindTowerHeight() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1480 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1481 |
/* |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1482 |
* Old implementation, used until I find the bug in the other. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1483 |
* This function has a bug in stage clear! if an empty line appears. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1484 |
*/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1485 |
prevTowerHeight = TowerHeight; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1486 |
bool found = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1487 |
TowerHeight = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1488 |
while (!found) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1489 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1490 |
found = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1491 |
for (int j=0; j<6; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1492 |
if (board[j][TowerHeight] != -1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1493 |
found = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1494 |
TowerHeight++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1495 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1496 |
TowerHeight--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1497 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1498 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1499 |
/////////////////////////////////////////////////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1500 |
/////////////////////////// AI starts here! /////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1501 |
/////////////////////////////////////////////////////////////////////////// |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1502 |
//First the helpet functions: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1503 |
int BlockGame::nrOfType(int line, int type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1504 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1505 |
// cout << "Start_ nrOfType" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1506 |
int counter = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1507 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1508 |
if (board[i][line]==type)counter++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1509 |
return counter; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1510 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1511 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1512 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1513 |
//See if a combo can be made in this line |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1514 |
int BlockGame::horiInLine(int line) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1515 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1516 |
//cout << "Start_ hori in line" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1517 |
int nrOfType[7] = {0, 0, 0, 0, 0, 0, 0}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1518 |
int iTemp; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1519 |
int max = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1520 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1521 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1522 |
iTemp = board[i][line]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1523 |
if ((iTemp>-1)&&(iTemp<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1524 |
nrOfType[iTemp]++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1525 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1526 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1527 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1528 |
if (nrOfType[j]>max) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1529 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1530 |
max = nrOfType[j]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1531 |
AIcolorToClear = j; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1532 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1533 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1534 |
return max; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1535 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1536 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1537 |
bool BlockGame::horiClearPossible() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1538 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1539 |
//cout << "Start_ horiclear possible" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1540 |
int i=13; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1541 |
bool solutionFound = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1542 |
do |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1543 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1544 |
if (horiInLine(i)>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1545 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1546 |
AI_LineOffset = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1547 |
AIlineToClear = i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1548 |
solutionFound = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1549 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1550 |
i--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1551 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1552 |
while ((!solutionFound)&&(i>0)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1553 |
return solutionFound; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1554 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1555 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1556 |
//the Line Has Unmoveable Objects witch might stall the AI |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1557 |
bool BlockGame::lineHasGarbage(int line) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1558 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1559 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1560 |
if (board[i][line]>1000000) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1561 |
return true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1562 |
return false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1563 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1564 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1565 |
//Types 0..6 in line |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1566 |
int BlockGame::nrOfRealTypes(int line) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1567 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1568 |
//cout << "Start_ nrOfReal" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1569 |
int counter = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1570 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1571 |
if ((board[i][line]>-1)&&(board[i][line]<7))counter++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1572 |
return counter; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1573 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1574 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1575 |
//See if there is a tower |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1576 |
bool BlockGame::ThereIsATower() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1577 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1578 |
//cout << "Start_ there is a tower" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1579 |
bool bThereIsATower = false; //Unless proven otherwise! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1580 |
bool topReached = false; //If we have reached the top |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1581 |
int lineNumber = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1582 |
bool emptySpacesFound = false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1583 |
do |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1584 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1585 |
if ((emptySpacesFound) && (nrOfRealTypes(lineNumber)>0)&&(nrOfType(lineNumber, -1)>0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1586 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1587 |
AIlineToClear = lineNumber; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1588 |
if (lineHasGarbage(lineNumber)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1589 |
return false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1590 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1591 |
bThereIsATower = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1592 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1593 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1594 |
emptySpacesFound=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1595 |
if ((!emptySpacesFound)&&(nrOfType(lineNumber, -1)>0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1596 |
emptySpacesFound = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1597 |
if (lineNumber<12) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1598 |
lineNumber++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1599 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1600 |
topReached = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1601 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1602 |
while ((!bThereIsATower)&&(!topReached)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1603 |
//if(bThereIsATower) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1604 |
//cout << "There is actually a tower" << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1605 |
return bThereIsATower; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1606 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1607 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1608 |
double BlockGame::firstInLine1(int line) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1609 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1610 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1611 |
if ((board[i][line]>-1)&&(board[i][line]<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1612 |
return (double)i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1613 |
return 3.0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1614 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1615 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1616 |
//returns the first coordinate of the block of type |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1617 |
double BlockGame::firstInLine(int line, int type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1618 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1619 |
for (int i=0; i<6; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1620 |
if (board[i][line]==type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1621 |
return (double)i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1622 |
return 3.0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1623 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1624 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1625 |
//There in the line shall we move |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1626 |
int BlockGame::closestTo(int line, int place) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1627 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1628 |
if ((int)firstInLine1(line)>place) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1629 |
return (int)firstInLine1(line)-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1630 |
for (int i=place; i>=0; i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1631 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1632 |
if ((board[i][line]>-1)&&(board[i][line]<7)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1633 |
return i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1634 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1635 |
AIstatus=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1636 |
return place; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1637 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1638 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1639 |
//The AI will remove a tower |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1640 |
void BlockGame::AI_ClearTower() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1641 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1642 |
// cout << "AI: ClearTower, line: " << AIlineToClear << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1643 |
int place = (int)firstInLine(AIlineToClear-1, -1); //Find an empty field to frop a brick into |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1644 |
int xplace = closestTo(AIlineToClear, place); //Find the brick to drop in it |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1645 |
if (cursory+1<AIlineToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1646 |
MoveCursor('N'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1647 |
else if (cursory+1>AIlineToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1648 |
MoveCursor('S'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1649 |
else if (cursorx<xplace) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1650 |
MoveCursor('E'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1651 |
else if (cursorx>xplace) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1652 |
MoveCursor('W'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1653 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1654 |
SwitchAtCursor(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1655 |
if (!ThereIsATower()) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1656 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1657 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1658 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1659 |
//The AI will try to clear block horisontally |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1660 |
void BlockGame::AI_ClearHori() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1661 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1662 |
// cout << "AI: ClearHori"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1663 |
int lowestLine = AIlineToClear; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1664 |
//AIcolorToClear |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1665 |
bool found =true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1666 |
/*for(int i; (i<12)&&(!found);i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1667 |
* { |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1668 |
* if(horiInLine(i)>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1669 |
* { |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1670 |
* int lowestLine = i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1671 |
* found = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1672 |
* } |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1673 |
* }*/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1674 |
for (int i=0; i<7; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1675 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1676 |
if (nrOfType(lowestLine, i)>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1677 |
AIcolorToClear = i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1678 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1679 |
if (found) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1680 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1681 |
if (cursory>lowestLine-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1682 |
MoveCursor('S'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1683 |
else if (cursory<lowestLine-1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1684 |
MoveCursor('N'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1685 |
else if (nrOfType(lowestLine, AIcolorToClear)>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1686 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1687 |
int left=0, right=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1688 |
if (board[0][lowestLine]==AIcolorToClear) left++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1689 |
if (board[1][lowestLine]==AIcolorToClear) left++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1690 |
if (board[2][lowestLine]==AIcolorToClear) left++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1691 |
if (board[3][lowestLine]==AIcolorToClear) right++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1692 |
if (board[4][lowestLine]==AIcolorToClear) right++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1693 |
if (board[5][lowestLine]==AIcolorToClear) right++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1694 |
int xplace = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1695 |
if (left<right) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1696 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1697 |
// cout << ", right>left"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1698 |
int count=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1699 |
for (int i=0; (i<4)&&(count<1); i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1700 |
if ((board[i][lowestLine]==AIcolorToClear)&&((i==0)||(board[i+1][lowestLine]!=AIcolorToClear))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1701 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1702 |
count++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1703 |
xplace = i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1704 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1705 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1706 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1707 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1708 |
// cout << ", left>=right"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1709 |
int count=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1710 |
for (int i=3; (i<=5)&&(count<1); i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1711 |
if ((board[i][lowestLine]==AIcolorToClear)&&(board[i-1][lowestLine]!=AIcolorToClear)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1712 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1713 |
count++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1714 |
xplace = --i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1715 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1716 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1717 |
//cout << ", xplace: " << xplace; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1718 |
if (cursorx<xplace) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1719 |
MoveCursor('E'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1720 |
else if (cursorx>xplace) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1721 |
MoveCursor('W'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1722 |
else if (cursorx==xplace) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1723 |
SwitchAtCursor(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1724 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1725 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1726 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1727 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1728 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1729 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1730 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1731 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1732 |
//cout << endl; //for debugging |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1733 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1734 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1735 |
//Test if vertical clear is possible |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1736 |
bool BlockGame::veriClearPossible() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1737 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1738 |
bool found=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1739 |
int colors[7] = {0, 0, 0, 0, 0, 0, 0}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1740 |
for (int i=12; (i>0)&&(!found); i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1741 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1742 |
for (int j=0; j<7; j++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1743 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1744 |
if (nrOfType(i, j)==0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1745 |
colors[j]=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1746 |
else if (++colors[j]>2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1747 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1748 |
AIcolorToClear = j; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1749 |
AIlineToClear = i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1750 |
found=true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1751 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1752 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1753 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1754 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1755 |
return found; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1756 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1757 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1758 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1759 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1760 |
//There in the line shall we move |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1761 |
int BlockGame::closestTo(int line, int type, int place) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1762 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1763 |
if ((int)firstInLine(line, type)>place) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1764 |
return (int)firstInLine(line, type)-1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1765 |
for (int i=place; i>=0; i--) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1766 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1767 |
if (board[i][line]==type) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1768 |
return i; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1769 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1770 |
AIstatus=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1771 |
return place; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1772 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1773 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1774 |
//The AI will try to clear blocks vertically |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1775 |
void BlockGame::AI_ClearVertical() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1776 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1777 |
// cout << "AI: ClearVeri"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1778 |
//First we find the place there we will align the bricks |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1779 |
int placeToCenter = (int)(firstInLine(AIlineToClear, AIcolorToClear)/3.0+firstInLine(AIlineToClear+1, AIcolorToClear)/3.0+firstInLine(AIlineToClear+2, AIcolorToClear)/3.0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1780 |
int unlimitedLoop=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1781 |
while (((board[placeToCenter][AIlineToClear]>1000000)||(board[placeToCenter][AIlineToClear+1]>1000000)||(board[placeToCenter][AIlineToClear+2]>1000000))&&(unlimitedLoop<10)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1782 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1783 |
unlimitedLoop++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1784 |
placeToCenter++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1785 |
if (placeToCenter>5) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1786 |
placeToCenter=0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1787 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1788 |
if(unlimitedLoop>9) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1789 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1790 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1791 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1792 |
//cout << ", ptc: " << placeToCenter << ", line: " << AIlineToClear << ", cy: " << cursory; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1793 |
if (cursory+1>AIlineToClear+2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1794 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1795 |
// cout << ", cursory>line+2"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1796 |
MoveCursor('S'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1797 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1798 |
if (cursory+1<AIlineToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1799 |
MoveCursor('N'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1800 |
bool toAlign[3]= {true, true, true}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1801 |
if (board[placeToCenter][AIlineToClear+0]==AIcolorToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1802 |
toAlign[0]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1803 |
if (board[placeToCenter][AIlineToClear+1]==AIcolorToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1804 |
toAlign[1]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1805 |
if (board[placeToCenter][AIlineToClear+2]==AIcolorToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1806 |
toAlign[2]=false; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1807 |
//cout << "status: " << toAlign[0] << " " << toAlign[1] << " " << toAlign[2]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1808 |
if (cursory+1==AIlineToClear) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1809 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1810 |
if (toAlign[0]==false) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1811 |
MoveCursor('N'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1812 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1813 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1814 |
if (cursorx>closestTo(AIlineToClear, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1815 |
MoveCursor('W'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1816 |
else if (cursorx<closestTo(AIlineToClear, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1817 |
MoveCursor('E'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1818 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1819 |
SwitchAtCursor(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1820 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1821 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1822 |
else if (cursory+1==AIlineToClear+1) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1823 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1824 |
if (toAlign[1]==false) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1825 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1826 |
if (toAlign[2]) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1827 |
MoveCursor('N'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1828 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1829 |
MoveCursor('S'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1830 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1831 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1832 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1833 |
if (cursorx>closestTo(AIlineToClear+1, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1834 |
MoveCursor('W'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1835 |
else if (cursorx<closestTo(AIlineToClear+1, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1836 |
MoveCursor('E'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1837 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1838 |
SwitchAtCursor(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1839 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1840 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1841 |
else if (cursory+1==AIlineToClear+2) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1842 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1843 |
if (toAlign[2]==false) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1844 |
MoveCursor('S'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1845 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1846 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1847 |
if (cursorx>closestTo(AIlineToClear+2, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1848 |
MoveCursor('W'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1849 |
else if (cursorx<closestTo(AIlineToClear+2, AIcolorToClear, placeToCenter)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1850 |
MoveCursor('E'); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1851 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1852 |
SwitchAtCursor(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1853 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1854 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1855 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1856 |
if ((!toAlign[0])&&(!toAlign[1])&&(!toAlign[2])) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1857 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1858 |
if ((nrOfType(AIlineToClear, AIcolorToClear)==0)||(nrOfType(AIlineToClear+1, AIcolorToClear)==0)||(nrOfType(AIlineToClear+2, AIcolorToClear)==0)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1859 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1860 |
//cout << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1861 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1862 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1863 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1864 |
void BlockGame::AI_Move() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1865 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1866 |
switch (AIstatus) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1867 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1868 |
case 1: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1869 |
if (TowerHeight<8)PushLine(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1870 |
else AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1871 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1872 |
case 2: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1873 |
AI_ClearTower(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1874 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1875 |
case 3: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1876 |
AI_ClearHori(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1877 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1878 |
case 4: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1879 |
AI_ClearVertical(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1880 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1881 |
case 5: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1882 |
if (!firstLineCreated) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1883 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1884 |
PushLine(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1885 |
firstLineCreated = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1886 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1887 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1888 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1889 |
PushLine(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1890 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1891 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1892 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1893 |
case 6: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1894 |
PushLine(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1895 |
AIstatus = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1896 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1897 |
default: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1898 |
if (TowerHeight<6) AIstatus = 1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1899 |
else if (horiClearPossible()) AIstatus = 3; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1900 |
else if (veriClearPossible()) AIstatus = 4; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1901 |
else if (ThereIsATower()) AIstatus = 2; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1902 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1903 |
AIstatus = 5; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1904 |
break; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1905 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1906 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1907 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1908 |
////////////////////////////////////////////////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1909 |
///////////////////////////// AI ends here! ////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1910 |
////////////////////////////////////////////////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1911 |
|
| 17916a2e |
sago007 |
2010-11-07 11:26 |
1912 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1913 |
//Updates evrything, if not called nothing happends |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1914 |
void BlockGame::Update() |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1915 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1916 |
Uint32 tempUInt32; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1917 |
Uint32 nowTime = ticks; //We remember the time, so it doesn't change during this call |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
1918 |
ActionPerformed(ACTION_UPDATE, ""); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
1919 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1920 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1921 |
FindTowerHeight(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1922 |
if ((linesCleared-TowerHeight>stageClearLimit) && (stageClear) && (!bGameOver)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1923 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1924 |
stageCleared[Level] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1925 |
if(stageScores[Level]<score) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1926 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1927 |
gameEndedAfter = nowTime-gameStartedAt; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1928 |
stageScores[Level] = score; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1929 |
stageTimes[Level] = gameEndedAfter; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1930 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1931 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1932 |
ofstream outfile; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1933 |
outfile.open(stageClearSavePath.c_str(), ios::binary |ios::trunc); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1934 |
if (!outfile) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1935 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1936 |
cout << "Error writing to file: " << stageClearSavePath << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1937 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1938 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1939 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1940 |
for (int i=0; i<nrOfStageLevels; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1941 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1942 |
bool tempBool = stageCleared[i]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1943 |
outfile.write(reinterpret_cast<char*>(&tempBool), sizeof(bool)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1944 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1945 |
for (int i=0; i<nrOfStageLevels; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1946 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1947 |
tempUInt32 = stageScores[i]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1948 |
outfile.write(reinterpret_cast<char*>(&tempUInt32), sizeof(Uint32)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1949 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1950 |
for (int i=0; i<nrOfStageLevels; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1951 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1952 |
tempUInt32 = stageTimes[i]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1953 |
outfile.write(reinterpret_cast<char*>(&tempUInt32), sizeof(Uint32)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1954 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1955 |
outfile.close(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1956 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1957 |
setPlayerWon(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1958 |
stageButtonStatus = SBstageClear; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1959 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1960 |
if ((TowerHeight>12)&&(prevTowerHeight<13)&&(!puzzleMode)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1961 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1962 |
//if (SoundEnabled) Mix_PlayChannel(1, heartBeat, 0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1963 |
stop+=1000; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1964 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1965 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1966 |
while (nowTime>nrStops*40+gameStartedAt) //Increase stops, till we reach nowTime |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1967 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1968 |
if (stop>0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1969 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1970 |
stop = stop-20; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1971 |
if (stop<=0) nrPushedPixel=(int)((nowTime-gameStartedAt)/(1000.0*speed)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1972 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1973 |
if (stop<0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1974 |
stop = 0; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1975 |
nrStops++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1976 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1977 |
//If we have static content, we don't raise at all! |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1978 |
if (hasStaticContent()) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1979 |
stop++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1980 |
if ((puzzleMode)&&(!bGameOver)&&BoardEmpty()) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1981 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1982 |
if (!singlePuzzle) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1983 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1984 |
if(puzzleCleared[Level]==false) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1985 |
Stats::getInstance()->addOne("puzzlesSolved"); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1986 |
puzzleCleared[Level] = true; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1987 |
ofstream outfile; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1988 |
stageButtonStatus = SBpuzzleMode; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1989 |
outfile.open(puzzleSavePath.c_str(), ios::binary |ios::trunc); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1990 |
if (!outfile) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1991 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1992 |
cout << "Error writing to file: " << puzzleSavePath << endl; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1993 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1994 |
else |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1995 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1996 |
for (int i=0; i<nrOfPuzzles; i++) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1997 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1998 |
bool tempBool = puzzleCleared[i]; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
1999 |
outfile.write(reinterpret_cast<char*>(&tempBool), sizeof(bool)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2000 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2001 |
outfile.close(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2002 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2003 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2004 |
setPlayerWon(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2005 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2006 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2007 |
//increse speed: |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2008 |
if ((nowTime>gameStartedAt+20000*speedLevel)&&(speedLevel <99)&&(!bGameOver)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2009 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2010 |
speed = (baseSpeed*0.9)/((double)speedLevel*0.5); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2011 |
speedLevel++; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2012 |
nrPushedPixel=(int)((double)(nowTime-gameStartedAt)/(1000.0*speed)); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2013 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2014 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2015 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2016 |
//To prevent the stack from raising a lot then we stop a chain (doesn't work anymore) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2017 |
if (chain>0) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2018 |
stop+=1; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2019 |
//Raises the stack |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2020 |
if ((nowTime>gameStartedAt+nrPushedPixel*1000*speed) && (!bGameOver)&&(!stop)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2021 |
while ((nowTime>gameStartedAt+nrPushedPixel*1000*speed)&&(!(puzzleMode))) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2022 |
PushPixels(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2023 |
if (!bGameOver)ClearBlocks(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2024 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2025 |
/************************************************************* |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2026 |
Ai stuff |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2027 |
**************************************************************/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2028 |
if (bGameOver) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2029 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2030 |
AIstatus = 0; //Enusres that AI is resetted |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2031 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2032 |
else if (AI_Enabled) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2033 |
if (lastAImove+AI_MoveSpeed<ticks) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2034 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2035 |
AI_Move(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2036 |
lastAImove=ticks; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2037 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2038 |
|
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2039 |
/************************************************************* |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2040 |
Ai stuff ended |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2041 |
**************************************************************/ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2042 |
if ((nowTime>gameStartedAt+nrFellDown*140) && (!bGameOver)) FallDown(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2043 |
if ((nowTime<gameStartedAt)&&(puzzleMode)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2044 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2045 |
FallDown(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2046 |
nrFellDown--; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2047 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2048 |
ReduceStuff(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2049 |
if ((timetrial) && (!bGameOver) && (nowTime>gameStartedAt+2*60*1000)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2050 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2051 |
SetGameOver(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2052 |
if(!NoSound && SoundEnabled)Mix_PlayChannel(1,counterFinalChunk,0); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2053 |
if ((theTopScoresTimeTrial.isHighScore(score))&&(!AI_Enabled)) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2054 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2055 |
theTopScoresTimeTrial.addScore(name, score); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2056 |
//new highscore |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2057 |
//Also check if it is better than the best result so far. |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2058 |
string checkFilename = getPathToSaveFiles() + "/bestTTresult"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2059 |
ifstream inFile(checkFilename.c_str()); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2060 |
Uint32 bestResult = 3000; //Never accept a best result under 3000 |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2061 |
if(inFile) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2062 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2063 |
inFile >> bestResult; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2064 |
inFile.close(); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2065 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2066 |
if(score>bestResult) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2067 |
{ |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2068 |
string bestFile = getPathToSaveFiles() + "/bestTT"; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2069 |
theReplay.saveReplay(bestFile); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2070 |
ofstream outFile(checkFilename.c_str(),ios::trunc); |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2071 |
if(outFile) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2072 |
outFile << score; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2073 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2074 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2075 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2076 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2077 |
} |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2078 |
|
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2079 |
bool BlockGame::IsNearDeath() { |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2080 |
if ((TowerHeight>12)&&(!puzzleMode)&&(!bGameOver)) |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2081 |
return true; |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2082 |
else |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2083 |
return false; |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2084 |
} |
| 18055aa0 |
sago007 |
2012-06-05 19:43 |
2085 |
|
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2086 |
void BlockGame::UpdateInternal(int newtick) |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2087 |
{ |
| bbb533ad |
sago007 |
2012-05-08 19:38 |
2088 |
while(newtick >= ticks+50) |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2089 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2090 |
ticks+=50; |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2091 |
Update(); |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2092 |
} |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2093 |
} |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2094 |
|
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2095 |
void BlockGame::Update(int newtick) |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2096 |
{ |
| 610d0b15 |
sago007 |
2012-05-19 18:13 |
2097 |
if(bNetworkPlayer) |
| 610d0b15 |
sago007 |
2012-05-19 18:13 |
2098 |
return; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2099 |
if(bReplaying) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2100 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2101 |
/*cout << "Testing " << replayIndex << "<" << theReplay.getActions().size() |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2102 |
<< " && " << theReplay.getActions().at(replayIndex).time << "<=" << |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2103 |
newtick-gameStartedAt << endl;*/ |
| 43765588 |
sago007 |
2012-05-16 19:14 |
2104 |
while(replayIndex >= 0 && replayIndex < theReplay.getActions().size() && |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2105 |
theReplay.getActions().at(replayIndex).time <= newtick-gameStartedAt) |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2106 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2107 |
Action a = theReplay.getActions().at(replayIndex); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2108 |
PerformAction(a.time+gameStartedAt,a.action,a.param); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2109 |
++replayIndex; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2110 |
} |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2111 |
|
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2112 |
} |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2113 |
else |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2114 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2115 |
UpdateInternal(newtick); |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2116 |
} |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2117 |
} |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2118 |
|
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2119 |
void BlockGame::ActionPerformed(int action, string param) |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2120 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2121 |
if(bGameOver || bReplaying) |
| d12916ab |
sago007 |
2012-04-19 23:30 |
2122 |
return; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2123 |
theReplay.addAction(ticks-gameStartedAt,action,param); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2124 |
} |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2125 |
|
| 50258544 |
sago007 |
2012-05-10 19:11 |
2126 |
int BlockGame::GotAction(Sint32 &tick,int &action,string ¶m) |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2127 |
{ |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2128 |
if(actionIndex < theReplay.getActions().size()) { |
| 43765588 |
sago007 |
2012-05-16 19:14 |
2129 |
Action a = theReplay.getActions().at(actionIndex); |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2130 |
tick = a.time; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2131 |
action = a.action; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2132 |
param = a.param; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2133 |
++actionIndex; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2134 |
return 1; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2135 |
} |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2136 |
return 0; |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2137 |
} |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2138 |
|
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2139 |
void BlockGame::PerformAction(int tick, int action, string param) |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2140 |
{ |
| 444cec07 |
sago007 |
2012-05-05 16:42 |
2141 |
ss.str(std::string()); |
| 444cec07 |
sago007 |
2012-05-05 16:42 |
2142 |
ss.clear(); |
| 444cec07 |
sago007 |
2012-05-05 16:42 |
2143 |
ss << param; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2144 |
int p1,p2; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2145 |
Uint32 p3; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2146 |
switch(action) |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2147 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2148 |
case ACTION_UPDATE: |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2149 |
UpdateInternal(tick); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2150 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2151 |
case ACTION_MOVECURSOR: |
| 50258544 |
sago007 |
2012-05-10 19:11 |
2152 |
MoveCursor(param.at(0)); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2153 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2154 |
case ACTION_MOVECURSORTO: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2155 |
{ |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2156 |
|
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2157 |
int p1,p2; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2158 |
ss >> p1 >> p2; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2159 |
MoveCursorTo(p1,p2); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2160 |
} |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2161 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2162 |
case ACTION_SWITCH: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2163 |
SwitchAtCursor(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2164 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2165 |
case ACTION_PUSH: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2166 |
PushLine(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2167 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2168 |
case ACTION_CREATEGARBAGE: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2169 |
{ |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2170 |
ss >> p1 >> p2; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2171 |
CreateGarbage(p1,p2); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2172 |
} |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2173 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2174 |
case ACTION_CREATEGRAYGARBAGE: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2175 |
CreateGreyGarbage(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2176 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2177 |
case ACTION_GAMEOVER: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2178 |
SetGameOver(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2179 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2180 |
case ACTION_WIN: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2181 |
setPlayerWon(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2182 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2183 |
case ACTION_DRAW: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2184 |
setDraw(); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2185 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2186 |
case ACTION_GAMESPEED: |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2187 |
ss >> p1; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2188 |
setGameSpeed(p1); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2189 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2190 |
case ACTION_HANDICAP: |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2191 |
ss >> p1; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2192 |
setHandicap(p1); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2193 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2194 |
case ACTION_NEW: |
| bbb533ad |
sago007 |
2012-05-08 19:38 |
2195 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2196 |
case ACTION_NEWTT: |
| bbb533ad |
sago007 |
2012-05-08 19:38 |
2197 |
timetrial = true; |
| bbb533ad |
sago007 |
2012-05-08 19:38 |
2198 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2199 |
case ACTION_NEWVS: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2200 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2201 |
case ACTION_STARTBLOCKS: |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2202 |
ss >> p3; |
| 79d3c1d3 |
sago007 |
2012-05-05 15:54 |
2203 |
putStartBlocks(p3); |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2204 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2205 |
case ACTION_NOP: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2206 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2207 |
default: |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2208 |
cerr << "Unknown action: " << action << " " << param << endl; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2209 |
break; |
| 6c9b4cd7 |
sago007 |
2012-05-01 19:34 |
2210 |
}; |
| c53e6443 |
sago007 |
2012-04-17 11:04 |
2211 |
} |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
2212 |
//////////////////////////////////////////////////////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
2213 |
///////////////////////// BlockAttack class end //////////////////////////////// |
| 17916a2e |
sago007 |
2010-11-07 11:26 |
2214 |
//////////////////////////////////////////////////////////////////////////////// |
|
|
1970-01-01 00:00 |
2215 |
|