git repos / blockattack-game

blame: source/code/editor/TheBoard.cpp

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 1
/*
89c4a3a6 sago007 2008-08-29 14:32 2
Block Attack - Rise of the Blocks, SDL game, besed on Nintendo's Tetris Attack
89c4a3a6 sago007 2008-08-29 14:32 3
Copyright (C) 2007 Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 4
89c4a3a6 sago007 2008-08-29 14:32 5
    This program is free software; you can redistribute it and/or modify        
89c4a3a6 sago007 2008-08-29 14:32 6
    it under the terms of the GNU General Public License as published by        
89c4a3a6 sago007 2008-08-29 14:32 7
    the Free Software Foundation; either version 2 of the License, or           
89c4a3a6 sago007 2008-08-29 14:32 8
    (at your option) any later version.                                         
89c4a3a6 sago007 2008-08-29 14:32 9
                                                                                
89c4a3a6 sago007 2008-08-29 14:32 10
    This program is distributed in the hope that it will be useful,       
89c4a3a6 sago007 2008-08-29 14:32 11
    but WITHOUT ANY WARRANTY; without even the implied warranty of              
89c4a3a6 sago007 2008-08-29 14:32 12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               
89c4a3a6 sago007 2008-08-29 14:32 13
    GNU General Public License for more details.                
89c4a3a6 sago007 2008-08-29 14:32 14
                                                                               
89c4a3a6 sago007 2008-08-29 14:32 15
    You should have received a copy of the GNU General Public License           
89c4a3a6 sago007 2008-08-29 14:32 16
    along with this program; if not, write to the Free Software                 
89c4a3a6 sago007 2008-08-29 14:32 17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   
89c4a3a6 sago007 2008-08-29 14:32 18
                                                                                
89c4a3a6 sago007 2008-08-29 14:32 19
    Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 20
    Rævehjvej 36, V. 1111                                                    
89c4a3a6 sago007 2008-08-29 14:32 21
    2800 Kgs. Lyngby
89c4a3a6 sago007 2008-08-29 14:32 22
    DENMARK
89c4a3a6 sago007 2008-08-29 14:32 23
    blockattack@poulsander.com 
89c4a3a6 sago007 2008-08-29 14:32 24
    http://blockattack.sf.net     
89c4a3a6 sago007 2008-08-29 14:32 25
*/
89c4a3a6 sago007 2008-08-29 14:32 26
89c4a3a6 sago007 2008-08-29 14:32 27
#include "TheBoard.hpp"
89c4a3a6 sago007 2008-08-29 14:32 28
89c4a3a6 sago007 2008-08-29 14:32 29
TheBoard::TheBoard()
89c4a3a6 sago007 2008-08-29 14:32 30
{
89c4a3a6 sago007 2008-08-29 14:32 31
    numberOfMoves = 0;
89c4a3a6 sago007 2008-08-29 14:32 32
    for(int i = 0; i < BOARDWIDTH; i++)
89c4a3a6 sago007 2008-08-29 14:32 33
    for(int j = 0; j < BOARDHEIGHT;j++)
89c4a3a6 sago007 2008-08-29 14:32 34
        TheBoard::board[i][j] = -1;
89c4a3a6 sago007 2008-08-29 14:32 35
    isNull = false;
89c4a3a6 sago007 2008-08-29 14:32 36
}
89c4a3a6 sago007 2008-08-29 14:32 37
89c4a3a6 sago007 2008-08-29 14:32 38
TheBoard::TheBoard(const TheBoard &tb)
89c4a3a6 sago007 2008-08-29 14:32 39
{
89c4a3a6 sago007 2008-08-29 14:32 40
    TheBoard::numberOfMoves = tb.numberOfMoves;
89c4a3a6 sago007 2008-08-29 14:32 41
    for(int i = 0; i < BOARDWIDTH; i++)
89c4a3a6 sago007 2008-08-29 14:32 42
    for(int j = 0; j < BOARDHEIGHT;j++)
89c4a3a6 sago007 2008-08-29 14:32 43
        TheBoard::board[i][j] = tb.board[i][j];
89c4a3a6 sago007 2008-08-29 14:32 44
    isNull = false;
89c4a3a6 sago007 2008-08-29 14:32 45
}
89c4a3a6 sago007 2008-08-29 14:32 46
89c4a3a6 sago007 2008-08-29 14:32 47
void TheBoard::copyFrom(TheBoard *tb)
89c4a3a6 sago007 2008-08-29 14:32 48
{
89c4a3a6 sago007 2008-08-29 14:32 49
    TheBoard::numberOfMoves = tb->numberOfMoves;
89c4a3a6 sago007 2008-08-29 14:32 50
    for(int i = 0; i < BOARDWIDTH; i++)
89c4a3a6 sago007 2008-08-29 14:32 51
    for(int j = 0; j < BOARDHEIGHT;j++)
89c4a3a6 sago007 2008-08-29 14:32 52
        TheBoard::board[i][j] = tb->board[i][j];
89c4a3a6 sago007 2008-08-29 14:32 53
}
89c4a3a6 sago007 2008-08-29 14:32 54
89c4a3a6 sago007 2008-08-29 14:32 55
bool TheBoard::setBrick(int x, int y, int color)
89c4a3a6 sago007 2008-08-29 14:32 56
{
89c4a3a6 sago007 2008-08-29 14:32 57
    if((x<0)||(x>=BOARDWIDTH)||(y<0)||(y>=12))
89c4a3a6 sago007 2008-08-29 14:32 58
			return false;
89c4a3a6 sago007 2008-08-29 14:32 59
		board[x][y]=color;
89c4a3a6 sago007 2008-08-29 14:32 60
		return true;
89c4a3a6 sago007 2008-08-29 14:32 61
}
89c4a3a6 sago007 2008-08-29 14:32 62
89c4a3a6 sago007 2008-08-29 14:32 63
int TheBoard::getBrick(int x, int y)
89c4a3a6 sago007 2008-08-29 14:32 64
{
89c4a3a6 sago007 2008-08-29 14:32 65
    if((x<0)||(x>=BOARDWIDTH)||(y<0)||(y>=BOARDHEIGHT))
89c4a3a6 sago007 2008-08-29 14:32 66
			return -999;
89c4a3a6 sago007 2008-08-29 14:32 67
		return board[x][y];
89c4a3a6 sago007 2008-08-29 14:32 68
}
89c4a3a6 sago007 2008-08-29 14:32 69
89c4a3a6 sago007 2008-08-29 14:32 70
void TheBoard::setNumberOfMoves(int moves)
89c4a3a6 sago007 2008-08-29 14:32 71
{
89c4a3a6 sago007 2008-08-29 14:32 72
    TheBoard::numberOfMoves = moves;
89c4a3a6 sago007 2008-08-29 14:32 73
}
89c4a3a6 sago007 2008-08-29 14:32 74
89c4a3a6 sago007 2008-08-29 14:32 75
int TheBoard::getNumberOfMoves()
89c4a3a6 sago007 2008-08-29 14:32 76
{
89c4a3a6 sago007 2008-08-29 14:32 77
    return TheBoard::numberOfMoves;
89c4a3a6 sago007 2008-08-29 14:32 78
}
89c4a3a6 sago007 2008-08-29 14:32 79
89c4a3a6 sago007 2008-08-29 14:32 80
bool TheBoard::moveUp(int x, int y)
89c4a3a6 sago007 2008-08-29 14:32 81
{
89c4a3a6 sago007 2008-08-29 14:32 82
		if((x<0)||(x>=BOARDWIDTH)||(y<0)||(y>=BOARDHEIGHT))
89c4a3a6 sago007 2008-08-29 14:32 83
			return false;
89c4a3a6 sago007 2008-08-29 14:32 84
		for(int i=1; i<=y; i++)
89c4a3a6 sago007 2008-08-29 14:32 85
		{
89c4a3a6 sago007 2008-08-29 14:32 86
			board[x][i-1]=board[x][i];
89c4a3a6 sago007 2008-08-29 14:32 87
		}
89c4a3a6 sago007 2008-08-29 14:32 88
		board[x][y]=-1;
89c4a3a6 sago007 2008-08-29 14:32 89
		return true;
89c4a3a6 sago007 2008-08-29 14:32 90
}  //moveUp
89c4a3a6 sago007 2008-08-29 14:32 91
89c4a3a6 sago007 2008-08-29 14:32 92
bool TheBoard::moveDown(int x, int y)
89c4a3a6 sago007 2008-08-29 14:32 93
{
89c4a3a6 sago007 2008-08-29 14:32 94
		if((x<0)||(x>=BOARDWIDTH)||(y<0)||(y>=BOARDHEIGHT))
89c4a3a6 sago007 2008-08-29 14:32 95
			return false;
89c4a3a6 sago007 2008-08-29 14:32 96
		for(int i=y-1; i>=0; i--)
89c4a3a6 sago007 2008-08-29 14:32 97
		{
89c4a3a6 sago007 2008-08-29 14:32 98
			board[x][i+1]=board[x][i];
89c4a3a6 sago007 2008-08-29 14:32 99
		}
89c4a3a6 sago007 2008-08-29 14:32 100
		board[x][0]=-1;
89c4a3a6 sago007 2008-08-29 14:32 101
		return true;
89c4a3a6 sago007 2008-08-29 14:32 102
}
89c4a3a6 sago007 2008-08-29 14:32 103
89c4a3a6 sago007 2008-08-29 14:32 104
void TheBoard::moveRight()
89c4a3a6 sago007 2008-08-29 14:32 105
{
89c4a3a6 sago007 2008-08-29 14:32 106
		for(int i=0; i<BOARDHEIGHT;i++)
89c4a3a6 sago007 2008-08-29 14:32 107
		{
89c4a3a6 sago007 2008-08-29 14:32 108
			for(int j=BOARDWIDTH-2; j>=0; j--)
89c4a3a6 sago007 2008-08-29 14:32 109
			{
89c4a3a6 sago007 2008-08-29 14:32 110
				board[j+1][i]=board[j][i];
89c4a3a6 sago007 2008-08-29 14:32 111
			}
89c4a3a6 sago007 2008-08-29 14:32 112
			board[0][i] = -1;
89c4a3a6 sago007 2008-08-29 14:32 113
		}
89c4a3a6 sago007 2008-08-29 14:32 114
} //moveRight
89c4a3a6 sago007 2008-08-29 14:32 115
89c4a3a6 sago007 2008-08-29 14:32 116
89c4a3a6 sago007 2008-08-29 14:32 117
//moves all pieces one to the right
89c4a3a6 sago007 2008-08-29 14:32 118
void TheBoard::moveLeft()
89c4a3a6 sago007 2008-08-29 14:32 119
{
89c4a3a6 sago007 2008-08-29 14:32 120
		for(int i=0; i<BOARDHEIGHT;i++)
89c4a3a6 sago007 2008-08-29 14:32 121
		{
89c4a3a6 sago007 2008-08-29 14:32 122
			for(int j=1; j<=BOARDWIDTH-1; j++)
89c4a3a6 sago007 2008-08-29 14:32 123
			{
89c4a3a6 sago007 2008-08-29 14:32 124
				board[j-1][i]=board[j][i];
89c4a3a6 sago007 2008-08-29 14:32 125
			}
89c4a3a6 sago007 2008-08-29 14:32 126
			board[BOARDWIDTH-1][i] = -1;
89c4a3a6 sago007 2008-08-29 14:32 127
		}
89c4a3a6 sago007 2008-08-29 14:32 128
} //moveRight
89c4a3a6 sago007 2008-08-29 14:32 129
89c4a3a6 sago007 2008-08-29 14:32 130
bool TheBoard::equals(TheBoard &tb2)
89c4a3a6 sago007 2008-08-29 14:32 131
{
89c4a3a6 sago007 2008-08-29 14:32 132
		if(tb2.getNumberOfMoves()!=getNumberOfMoves())
89c4a3a6 sago007 2008-08-29 14:32 133
			return false;
89c4a3a6 sago007 2008-08-29 14:32 134
		for(int i=0;i<BOARDWIDTH;i++)
89c4a3a6 sago007 2008-08-29 14:32 135
		for(int j=0;j<BOARDHEIGHT;j++)
89c4a3a6 sago007 2008-08-29 14:32 136
		{
89c4a3a6 sago007 2008-08-29 14:32 137
			if(tb2.board[i][j]!=board[i][j])
89c4a3a6 sago007 2008-08-29 14:32 138
				return false;
89c4a3a6 sago007 2008-08-29 14:32 139
		}
89c4a3a6 sago007 2008-08-29 14:32 140
		return true;
89c4a3a6 sago007 2008-08-29 14:32 141
}
1970-01-01 00:00 142