git repos / blockattack-game

blame: source/code/BlockGame.hpp

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 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
7ac8aa4b sago007 2016-02-22 19:25 20
http://www.blockattack.net
c53e6443 sago007 2012-04-17 11:04 21
===========================================================================
c53e6443 sago007 2012-04-17 11:04 22
*/
89c4a3a6 sago007 2008-08-29 14:32 23
17916a2e sago007 2010-11-07 11:26 24
#ifndef BLOCKGAME_HPP
17916a2e sago007 2010-11-07 11:26 25
#define BLOCKGAME_HPP 1
17916a2e sago007 2010-11-07 11:26 26
32c9b349 sago007 2008-11-20 18:14 27
#include "stats.h"
32c9b349 sago007 2008-11-20 18:14 28
#include "common.h"
17916a2e sago007 2010-11-07 11:26 29
17916a2e sago007 2010-11-07 11:26 30
#define NUMBEROFCHAINS 100
69862ef6 sago007 2015-08-22 17:24 31
#define BLOCKWAIT 100000
69862ef6 sago007 2015-08-22 17:24 32
#define BLOCKHANG 1000
32c9b349 sago007 2008-11-20 18:14 33
a1072daf sago007 2016-02-20 12:47 34
enum stageButton {SBdontShow, SBstageClear, SBpuzzleMode};
a1072daf sago007 2016-02-20 12:47 35
a1072daf sago007 2016-02-20 12:47 36
extern stageButton stageButtonStatus;
a1072daf sago007 2016-02-20 12:47 37
a1072daf sago007 2016-02-20 12:47 38
//This is the size of the blocks. They are always 50. The internal logic calculates it that way
a1072daf sago007 2016-02-20 12:47 39
const int bsize = 50;
a1072daf sago007 2016-02-20 12:47 40
5159dd90 sago007 2016-02-21 15:50 41
/**
5159dd90 sago007 2016-02-21 15:50 42
 * This struct defines the start conditions of the game
5159dd90 sago007 2016-02-21 15:50 43
 */
5159dd90 sago007 2016-02-21 15:50 44
struct BlockGameStartInfo {
5159dd90 sago007 2016-02-21 15:50 45
	unsigned int ticks = 0;
5159dd90 sago007 2016-02-21 15:50 46
	bool timeTrial = false;
b256fda5 sago007 2016-02-21 16:21 47
	///True means a stage clear game will be started. level must be set too.
b1fe2ae5 sago007 2016-02-21 16:01 48
	bool stageClear = false;
b256fda5 sago007 2016-02-21 16:21 49
	///True if puzzle mode. level must be set too.
b256fda5 sago007 2016-02-21 16:21 50
	bool puzzleMode = false;
83e4f8fe sago007 2016-02-22 19:22 51
	///Single puzzle is used for the editor only.
83e4f8fe sago007 2016-02-22 19:22 52
	bool singlePuzzle = false;
b1fe2ae5 sago007 2016-02-21 16:01 53
	int level = 0;
1e5aff60 sago007 2016-02-21 18:23 54
	bool AI = false;
ae5fb2bb sago007 2016-03-22 18:00 55
	/**
ae5fb2bb sago007 2016-03-22 18:00 56
	 * True means that stats will be recorded.
ae5fb2bb sago007 2016-03-22 18:00 57
	 * If AI is true then this will be overruled to false 
ae5fb2bb sago007 2016-03-22 18:00 58
	 */
50cf6485 sago007 2016-03-21 19:11 59
	bool recordStats = true;
1e5aff60 sago007 2016-02-21 18:23 60
	bool vsMode = false;
ae5fb2bb sago007 2016-03-22 18:00 61
	/**
ae5fb2bb sago007 2016-03-22 18:00 62
	 * Set to true if we are fighting an AI. level should be the AI level we are fighting
ae5fb2bb sago007 2016-03-22 18:00 63
	 */
ae5fb2bb sago007 2016-03-22 18:00 64
	bool vsAI = false;
917dac61 sago007 2016-02-21 20:01 65
	int startBlocks = -1;
3e7b8813 sago007 2016-02-22 19:45 66
	int handicap = 0;
3e7b8813 sago007 2016-02-22 19:45 67
	int gameSpeed = 0;
1e5aff60 sago007 2016-02-21 18:23 68
};
1e5aff60 sago007 2016-02-21 18:23 69
1e5aff60 sago007 2016-02-21 18:23 70
struct GarbageStruct {
1e5aff60 sago007 2016-02-21 18:23 71
	bool greyGarbage = false;
3d12f4a8 sago007 2016-03-21 18:40 72
	int width = 0;
3d12f4a8 sago007 2016-03-21 18:40 73
	int height = 0;
3d12f4a8 sago007 2016-03-21 18:40 74
	void setGarbage(int w, int h, bool g = false) {
3d12f4a8 sago007 2016-03-21 18:40 75
		greyGarbage = g;
3d12f4a8 sago007 2016-03-21 18:40 76
		width = w;
3d12f4a8 sago007 2016-03-21 18:40 77
		height = h;
3d12f4a8 sago007 2016-03-21 18:40 78
	}
5159dd90 sago007 2016-02-21 15:50 79
};
5159dd90 sago007 2016-02-21 15:50 80
4fb2e351 sago007 2016-05-19 19:27 81
struct BlockGameAction {
62b3f619 sago007 2016-05-20 07:01 82
	enum class Action {NONE, UPDATE, SET_DRAW, SET_WON};
62b3f619 sago007 2016-05-20 07:01 83
	Action action = Action::NONE;
4fb2e351 sago007 2016-05-19 19:27 84
	unsigned int tick = 0;
4fb2e351 sago007 2016-05-19 19:27 85
};
4fb2e351 sago007 2016-05-19 19:27 86
89c4a3a6 sago007 2008-08-29 14:32 87
////////////////////////////////////////////////////////////////////////////////
89c4a3a6 sago007 2008-08-29 14:32 88
//The BloackGame class represents a board, score, time etc. for a single player/
89c4a3a6 sago007 2008-08-29 14:32 89
////////////////////////////////////////////////////////////////////////////////
c53e6443 sago007 2012-04-17 11:04 90
class BlockGame
c53e6443 sago007 2012-04-17 11:04 91
{
89c4a3a6 sago007 2008-08-29 14:32 92
private:
87a0a1db sago007 2016-04-16 13:11 93
	int prevTowerHeight = 0;
87a0a1db sago007 2016-04-16 13:11 94
	bool bGarbageFallLeft = false;
a1072daf sago007 2016-02-20 12:47 95
	bool singlePuzzle = false;
89c4a3a6 sago007 2008-08-29 14:32 96
87a0a1db sago007 2016-04-16 13:11 97
	int nextGarbageNumber = 0;
87a0a1db sago007 2016-04-16 13:11 98
	int pushedPixelAt = 0;
87a0a1db sago007 2016-04-16 13:11 99
	int nrPushedPixel = 0;
87a0a1db sago007 2016-04-16 13:11 100
	int nrFellDown = 0;
87a0a1db sago007 2016-04-16 13:11 101
	unsigned int nrStops = 0;
c53e6443 sago007 2012-04-17 11:04 102
	bool garbageToBeCleared[7][30];
87a0a1db sago007 2016-04-16 13:11 103
	unsigned int lastAImove = 0;
89c4a3a6 sago007 2008-08-29 14:32 104
87a0a1db sago007 2016-04-16 13:11 105
	int AI_LineOffset = 0; //how many lines have changed since command
87a0a1db sago007 2016-04-16 13:11 106
	int hangTicks = 0;    //How many times have hang been decreased?
c53e6443 sago007 2012-04-17 11:04 107
	//int the two following index 0 may NOT be used (what the fuck did I meen?)
87a0a1db sago007 2016-04-16 13:11 108
	int chainSize[NUMBEROFCHAINS]{}; //Contains the chains
87a0a1db sago007 2016-04-16 13:11 109
	bool chainUsed[NUMBEROFCHAINS]{};   //True if the chain is used
89c4a3a6 sago007 2008-08-29 14:32 110
87a0a1db sago007 2016-04-16 13:11 111
	unsigned int nextRandomNumber = 0;
87a0a1db sago007 2016-04-16 13:11 112
	int Level = 0; //Only used in stageClear and puzzle (not implemented)
89c4a3a6 sago007 2008-08-29 14:32 113
63c773dd sago007 2016-01-24 11:47 114
	int rand2();
c53e6443 sago007 2012-04-17 11:04 115
	int firstUnusedChain();
89c4a3a6 sago007 2008-08-29 14:32 116
e1290bdf sago007 2010-10-25 19:56 117
//public:
6b1dc7a6 sago007 2010-11-08 21:03 118
protected:
c98e567e sago007 2016-03-25 09:39 119
	int lastCounter = 0;
63c773dd sago007 2016-01-24 11:47 120
	std::string strHolder;
c98e567e sago007 2016-03-25 09:39 121
	bool bDraw = false;
c98e567e sago007 2016-03-25 09:39 122
	unsigned int ticks = 0;
c98e567e sago007 2016-03-25 09:39 123
	unsigned int gameStartedAt = 0;
c98e567e sago007 2016-03-25 09:39 124
	unsigned int gameEndedAfter = 0;		//How long did the game last?
c98e567e sago007 2016-03-25 09:39 125
	int linesCleared = 0;
c98e567e sago007 2016-03-25 09:39 126
	int TowerHeight = 0;
63c773dd sago007 2016-01-24 11:47 127
	int board[7][30];
c98e567e sago007 2016-03-25 09:39 128
	int stop = 0;
c98e567e sago007 2016-03-25 09:39 129
	int speedLevel = 0;
c98e567e sago007 2016-03-25 09:39 130
	int pixels = 0;
c98e567e sago007 2016-03-25 09:39 131
	int MovesLeft = 0;
c98e567e sago007 2016-03-25 09:39 132
	bool timetrial = false;
c98e567e sago007 2016-03-25 09:39 133
	bool stageClear = false;
c98e567e sago007 2016-03-25 09:39 134
	bool vsMode = false;
c98e567e sago007 2016-03-25 09:39 135
	bool puzzleMode = false;
c98e567e sago007 2016-03-25 09:39 136
	int stageClearLimit = 0; //stores number of lines user must clear to win
c98e567e sago007 2016-03-25 09:39 137
	int combo = 0;
c98e567e sago007 2016-03-25 09:39 138
	int chain = 0;
87a0a1db sago007 2016-04-16 13:11 139
	int cursorx = 2; //stores cursor position
87a0a1db sago007 2016-04-16 13:11 140
	int cursory = 3; // -||-
d0c62e33 sago007 2016-04-02 15:18 141
	int mouse_cursorx = -1;  //Stores the mouse hold cursor. -1 if nothing is selected.
d0c62e33 sago007 2016-04-02 15:18 142
	int mouse_cursory = -1;
c98e567e sago007 2016-03-25 09:39 143
	double speed = 0.0;
c98e567e sago007 2016-03-25 09:39 144
	double baseSpeed = 0.0; //factor for speed. Lower value = faster gameplay
c98e567e sago007 2016-03-25 09:39 145
	int score = 0;
c98e567e sago007 2016-03-25 09:39 146
	bool bGameOver = false;
c98e567e sago007 2016-03-25 09:39 147
	bool hasWonTheGame = false;
c98e567e sago007 2016-03-25 09:39 148
	int AI_MoveSpeed = 0;   //How often will the computer move? milliseconds
c98e567e sago007 2016-03-25 09:39 149
	bool AI_Enabled = false;
50cf6485 sago007 2016-03-21 19:11 150
	bool recordStats = true;
ae5fb2bb sago007 2016-03-22 18:00 151
	bool vsAI = false;  //Set to true for single player vs
c53e6443 sago007 2012-04-17 11:04 152
c98e567e sago007 2016-03-25 09:39 153
	int handicap = 0;
3d12f4a8 sago007 2016-03-21 18:40 154
	
3d12f4a8 sago007 2016-03-21 18:40 155
	std::vector<GarbageStruct> garbageSendQueue;
c53e6443 sago007 2012-04-17 11:04 156
c98e567e sago007 2016-03-25 09:39 157
	int AIlineToClear = 0;
c53e6443 sago007 2012-04-17 11:04 158
c98e567e sago007 2016-03-25 09:39 159
	short AIstatus = 0;   //Status flags:
c53e6443 sago007 2012-04-17 11:04 160
	//0: nothing, 2: clear tower, 3: clear horisontal, 4: clear vertical
c53e6443 sago007 2012-04-17 11:04 161
	//1: make more lines, 5: make 2 lines, 6: make 1 line
6b1dc7a6 sago007 2010-11-08 21:03 162
e1290bdf sago007 2010-10-25 19:56 163
public:
c53e6443 sago007 2012-04-17 11:04 164
8f632c05 sago007 2015-08-22 16:21 165
	std::string name;
c53e6443 sago007 2012-04-17 11:04 166
0f031889 sago007 2012-05-01 19:57 167
public:
c53e6443 sago007 2012-04-17 11:04 168
	BlockGame();
87ac12e9 sago007 2016-04-09 18:47 169
	virtual ~BlockGame() = default;
c53e6443 sago007 2012-04-17 11:04 170
63c773dd sago007 2016-01-24 11:47 171
	int getAIlevel()  const;
229e212d sago007 2015-08-22 17:14 172
	
313ecd1b sago007 2015-08-22 20:38 173
	virtual void AddText(int x, int y, const std::string& text, int time) const  {}
313ecd1b sago007 2015-08-22 20:38 174
	virtual void AddBall(int x, int y, bool right, int color) const  {}
313ecd1b sago007 2015-08-22 20:38 175
	virtual void AddExplosion(int x, int y) const  {}
313ecd1b sago007 2015-08-22 20:38 176
	virtual void PlayerWonEvent() const  {}
027b5cfd sago007 2015-08-23 14:27 177
	virtual void DrawEvent() const {}
313ecd1b sago007 2015-08-22 20:38 178
	virtual void BlockPopEvent() const  {}
313ecd1b sago007 2015-08-22 20:38 179
	virtual void LongChainDoneEvent() const  {}
313ecd1b sago007 2015-08-22 20:38 180
	virtual void TimeTrialEndEvent() const  {}
313ecd1b sago007 2015-08-22 20:38 181
	virtual void EndlessHighscoreEvent() const  {}
229e212d sago007 2015-08-22 17:14 182
	
4fb2e351 sago007 2016-05-19 19:27 183
	void DoAction (const BlockGameAction& action);
4fb2e351 sago007 2016-05-19 19:27 184
	
027b5cfd sago007 2015-08-23 14:27 185
	int GetScore() const;
027b5cfd sago007 2015-08-23 14:27 186
	int GetHandicap() const;
027b5cfd sago007 2015-08-23 14:27 187
	bool isGameOver() const;
63c773dd sago007 2016-01-24 11:47 188
	int GetGameStartedAt() const;
63c773dd sago007 2016-01-24 11:47 189
	int GetGameEndedAt() const;
027b5cfd sago007 2015-08-23 14:27 190
	bool isTimeTrial() const;
027b5cfd sago007 2015-08-23 14:27 191
	bool isStageClear() const;
027b5cfd sago007 2015-08-23 14:27 192
	bool isVsMode() const;
027b5cfd sago007 2015-08-23 14:27 193
	bool isPuzzleMode() const;
027b5cfd sago007 2015-08-23 14:27 194
	int GetLinesCleared() const;
027b5cfd sago007 2015-08-23 14:27 195
	int GetStageClearLimit() const;
027b5cfd sago007 2015-08-23 14:27 196
	int GetChains() const;
027b5cfd sago007 2015-08-23 14:27 197
	int GetPixels() const;
027b5cfd sago007 2015-08-23 14:27 198
	int GetSpeedLevel() const;
027b5cfd sago007 2015-08-23 14:27 199
	int GetTowerHeight() const;
027b5cfd sago007 2015-08-23 14:27 200
	int GetCursorX() const;
027b5cfd sago007 2015-08-23 14:27 201
	int GetCursorY() const;
c53e6443 sago007 2012-04-17 11:04 202
	void MoveCursorTo(int x, int y);
d0c62e33 sago007 2016-04-02 15:18 203
	void GetMouseCursor(bool& pressed, int& x, int&y) const;
d0c62e33 sago007 2016-04-02 15:18 204
	void MouseDown(int x, int y);  //Send then the mouse is pressed 
d0c62e33 sago007 2016-04-02 15:18 205
	void MouseMove(int x);  //Send then the mouse moves
d0c62e33 sago007 2016-04-02 15:18 206
	void MouseUp();  //Send then the mouse goes up
027b5cfd sago007 2015-08-23 14:27 207
	bool GetIsWinner() const;
3e7b8813 sago007 2016-02-22 19:45 208
    bool isSinglePuzzle() const;
3e7b8813 sago007 2016-02-22 19:45 209
    int getLevel() const;
3e7b8813 sago007 2016-02-22 19:45 210
	bool GetAIenabled() const;
3e7b8813 sago007 2016-02-22 19:45 211
	bool IsNearDeath() const;
5159dd90 sago007 2016-02-21 15:50 212
	void NewGame(const BlockGameStartInfo &s);
0f031889 sago007 2012-05-01 19:57 213
	//Creates garbage using a given wide and height
0f031889 sago007 2012-05-01 19:57 214
	bool CreateGarbage(int wide, int height);
0f031889 sago007 2012-05-01 19:57 215
	//Creates garbage using a given wide and height
0f031889 sago007 2012-05-01 19:57 216
	bool CreateGreyGarbage();
3d12f4a8 sago007 2016-03-21 18:40 217
	void PopSendGarbage(std::vector<GarbageStruct>& poppedData);
0f031889 sago007 2012-05-01 19:57 218
	//prints "Game Over" and ends game
0f031889 sago007 2012-05-01 19:57 219
	void SetGameOver();
0f031889 sago007 2012-05-01 19:57 220
	//Moves the cursor, receaves N,S,E or W as a char an moves as desired
0f031889 sago007 2012-05-01 19:57 221
	void MoveCursor(char way);
0f031889 sago007 2012-05-01 19:57 222
	//switches the two blocks at the cursor position, unless game over
0f031889 sago007 2012-05-01 19:57 223
	void SwitchAtCursor();
0f031889 sago007 2012-05-01 19:57 224
	//Generates a new line and moves the field one block up (restart puzzle mode)
0f031889 sago007 2012-05-01 19:57 225
	void PushLine();
e1290bdf sago007 2010-10-25 19:56 226
private:
5159dd90 sago007 2016-02-21 15:50 227
	void NewGame(unsigned int ticks);
c53e6443 sago007 2012-04-17 11:04 228
	//Test if LineNr is an empty line, returns false otherwise.
ca486238 sago007 2015-08-23 15:12 229
	bool LineEmpty(int lineNr) const;
c53e6443 sago007 2012-04-17 11:04 230
	//Test if the entire board is empty (used for Puzzles)
ca486238 sago007 2015-08-23 15:12 231
	bool BoardEmpty() const;
c53e6443 sago007 2012-04-17 11:04 232
	//Anything that the user can't move? In that case Game Over cannot occur
ca486238 sago007 2015-08-23 15:12 233
	bool hasStaticContent() const;
c53e6443 sago007 2012-04-17 11:04 234
	void putStartBlocks();
917dac61 sago007 2016-02-21 20:01 235
	void putStartBlocks(int n);
c53e6443 sago007 2012-04-17 11:04 236
	//decreases hang for all hanging blocks and wait for waiting blocks
c53e6443 sago007 2012-04-17 11:04 237
	void ReduceStuff();
3e7b8813 sago007 2016-02-22 19:45 238
	void setGameSpeed(int globalSpeedLevel);
3e7b8813 sago007 2016-02-22 19:45 239
	void setHandicap(int globalHandicap);
c53e6443 sago007 2012-04-17 11:04 240
	//Clears garbage, must take one the lower left corner!
c53e6443 sago007 2012-04-17 11:04 241
	int GarbageClearer(int x, int y, int number, bool aLineToClear, int chain);
c53e6443 sago007 2012-04-17 11:04 242
	//Marks garbage that must be cleared
c53e6443 sago007 2012-04-17 11:04 243
	int GarbageMarker(int x, int y);
c53e6443 sago007 2012-04-17 11:04 244
	int FirstGarbageMarker(int x, int y);
c53e6443 sago007 2012-04-17 11:04 245
	//Clear Blocks if 3 or more is alligned (naive implemented)
c53e6443 sago007 2012-04-17 11:04 246
	void ClearBlocks();
c53e6443 sago007 2012-04-17 11:04 247
	//Moves all peaces a spot down if possible
c53e6443 sago007 2012-04-17 11:04 248
	int FallBlock(int x, int y, int number);
c53e6443 sago007 2012-04-17 11:04 249
	//Makes all Garbage fall one spot
c53e6443 sago007 2012-04-17 11:04 250
	void GarbageFall();
c53e6443 sago007 2012-04-17 11:04 251
	//Makes the blocks fall (it doesn't test time, this must be done before hand)
c53e6443 sago007 2012-04-17 11:04 252
	void FallDown();
c53e6443 sago007 2012-04-17 11:04 253
	//Pushes a single pixel, so it appears to scrool
c53e6443 sago007 2012-04-17 11:04 254
	void PushPixels();
c53e6443 sago007 2012-04-17 11:04 255
	//See how high the tower is, saved in integer TowerHeight
c53e6443 sago007 2012-04-17 11:04 256
	void FindTowerHeight();
89c4a3a6 sago007 2008-08-29 14:32 257
///////////////////////////////////////////////////////////////////////////
89c4a3a6 sago007 2008-08-29 14:32 258
/////////////////////////// AI starts here! ///////////////////////////////
89c4a3a6 sago007 2008-08-29 14:32 259
///////////////////////////////////////////////////////////////////////////
c53e6443 sago007 2012-04-17 11:04 260
	//First the helpet functions:
c53e6443 sago007 2012-04-17 11:04 261
	int nrOfType(int line, int type);
ca31a27a sago007 2016-04-16 21:29 262
	int AIcolorToClear = 0;
c53e6443 sago007 2012-04-17 11:04 263
	//See if a combo can be made in this line
c53e6443 sago007 2012-04-17 11:04 264
	int horiInLine(int line);
c53e6443 sago007 2012-04-17 11:04 265
	bool horiClearPossible();
c53e6443 sago007 2012-04-17 11:04 266
	//the Line Has Unmoveable Objects witch might stall the AI
c53e6443 sago007 2012-04-17 11:04 267
	bool lineHasGarbage(int line);
c53e6443 sago007 2012-04-17 11:04 268
	//Types 0..6 in line
c53e6443 sago007 2012-04-17 11:04 269
	int nrOfRealTypes(int line);
c53e6443 sago007 2012-04-17 11:04 270
	//See if there is a tower
c53e6443 sago007 2012-04-17 11:04 271
	bool ThereIsATower();
c53e6443 sago007 2012-04-17 11:04 272
	double firstInLine1(int line);
c53e6443 sago007 2012-04-17 11:04 273
	//returns the first coordinate of the block of type
c53e6443 sago007 2012-04-17 11:04 274
	double firstInLine(int line, int type);
c53e6443 sago007 2012-04-17 11:04 275
	//There in the line shall we move
c53e6443 sago007 2012-04-17 11:04 276
	int closestTo(int line, int place);
c53e6443 sago007 2012-04-17 11:04 277
	//The AI will remove a tower
c53e6443 sago007 2012-04-17 11:04 278
	void AI_ClearTower();
c53e6443 sago007 2012-04-17 11:04 279
	//The AI will try to clear block horisontally
c53e6443 sago007 2012-04-17 11:04 280
	void AI_ClearHori();
c53e6443 sago007 2012-04-17 11:04 281
	//Test if vertical clear is possible
c53e6443 sago007 2012-04-17 11:04 282
	bool veriClearPossible();
c53e6443 sago007 2012-04-17 11:04 283
	//There in the line shall we move
c53e6443 sago007 2012-04-17 11:04 284
	int closestTo(int line, int type, int place);
c53e6443 sago007 2012-04-17 11:04 285
	//The AI will try to clear blocks vertically
c53e6443 sago007 2012-04-17 11:04 286
	void AI_ClearVertical();
ca31a27a sago007 2016-04-16 21:29 287
	bool firstLineCreated = 0;
c53e6443 sago007 2012-04-17 11:04 288
	void AI_Move();
52d3ef2e sago007 2016-03-22 19:30 289
//////////////////////////////////////////////////////////////////
52d3ef2e sago007 2016-03-22 19:30 290
///////////////////////////// AI ends here! //////////////////////
a1072daf sago007 2016-02-20 12:47 291
//////////////////////////////////////////////////////////////////
6d6b2788 sago007 2016-02-21 18:51 292
	//Set the move speed of the AI based on the aiLevel parameter
6d6b2788 sago007 2016-02-21 18:51 293
	void setAIlevel(int aiLevel);
79d3c1d3 sago007 2012-05-05 15:54 294
	void PushLineInternal();
07f5b3f3 sago007 2016-05-19 19:37 295
	//Prints "winner" and ends game
07f5b3f3 sago007 2016-05-19 19:37 296
	void setPlayerWon();
07f5b3f3 sago007 2016-05-19 19:37 297
	//Prints "draw" and ends the game
07f5b3f3 sago007 2016-05-19 19:37 298
	void setDraw();
c53e6443 sago007 2012-04-17 11:04 299
	//Updates evrything, if not called nothing happends
c53e6443 sago007 2012-04-17 11:04 300
	void Update();
80b830cd sago007 2012-08-19 17:51 301
	void UpdateInternal(unsigned int newtick);
17916a2e sago007 2010-11-07 11:26 302
};
fde1f2dd sago007 2016-02-21 15:24 303
c1785ec5 sago007 2016-02-21 16:07 304
//Play the next level
c1785ec5 sago007 2016-02-21 16:07 305
void nextLevel(BlockGame& g, unsigned int ticks);
fde1f2dd sago007 2016-02-21 15:24 306
//Replay the current level
fde1f2dd sago007 2016-02-21 15:24 307
void retryLevel(BlockGame& g, unsigned int ticks);
17916a2e sago007 2010-11-07 11:26 308
17916a2e sago007 2010-11-07 11:26 309
#endif
1970-01-01 00:00 310