git repos / blockattack-game

blame: source/code/editor/BoardHolder.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
    Raevehjvej 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 "BoardHolder.hpp"
89c4a3a6 sago007 2008-08-29 14:32 28
89c4a3a6 sago007 2008-08-29 14:32 29
BoardHolder::BoardHolder(string filename)
89c4a3a6 sago007 2008-08-29 14:32 30
{
89c4a3a6 sago007 2008-08-29 14:32 31
    fstream inFile(filename.c_str(),ios::in);
89c4a3a6 sago007 2008-08-29 14:32 32
    if(inFile)
89c4a3a6 sago007 2008-08-29 14:32 33
    {
89c4a3a6 sago007 2008-08-29 14:32 34
        int nrOfBoards;
89c4a3a6 sago007 2008-08-29 14:32 35
        inFile >> nrOfBoards;
89c4a3a6 sago007 2008-08-29 14:32 36
        for(int i=0;i<nrOfBoards;i++)
89c4a3a6 sago007 2008-08-29 14:32 37
			{
89c4a3a6 sago007 2008-08-29 14:32 38
				TheBoard ourBoard;
89c4a3a6 sago007 2008-08-29 14:32 39
				int temp;
89c4a3a6 sago007 2008-08-29 14:32 40
				inFile >> temp;
89c4a3a6 sago007 2008-08-29 14:32 41
				ourBoard.setNumberOfMoves(temp);
89c4a3a6 sago007 2008-08-29 14:32 42
				for(int j=0;j<12;j++)
89c4a3a6 sago007 2008-08-29 14:32 43
				{
89c4a3a6 sago007 2008-08-29 14:32 44
					for(int k=0;k<6;k++)
89c4a3a6 sago007 2008-08-29 14:32 45
					{
89c4a3a6 sago007 2008-08-29 14:32 46
                        inFile >> temp;
89c4a3a6 sago007 2008-08-29 14:32 47
						ourBoard.setBrick(k,j,temp);						
89c4a3a6 sago007 2008-08-29 14:32 48
					}
89c4a3a6 sago007 2008-08-29 14:32 49
				}
89c4a3a6 sago007 2008-08-29 14:32 50
				theBoards[i] = ourBoard;
89c4a3a6 sago007 2008-08-29 14:32 51
			}
89c4a3a6 sago007 2008-08-29 14:32 52
		isNull = false;
89c4a3a6 sago007 2008-08-29 14:32 53
    }
89c4a3a6 sago007 2008-08-29 14:32 54
}
89c4a3a6 sago007 2008-08-29 14:32 55
89c4a3a6 sago007 2008-08-29 14:32 56
BoardHolder::BoardHolder()
89c4a3a6 sago007 2008-08-29 14:32 57
{
89c4a3a6 sago007 2008-08-29 14:32 58
    isNull = false;
89c4a3a6 sago007 2008-08-29 14:32 59
}
89c4a3a6 sago007 2008-08-29 14:32 60
89c4a3a6 sago007 2008-08-29 14:32 61
bool BoardHolder::saveBoards(string filename)
89c4a3a6 sago007 2008-08-29 14:32 62
{
89c4a3a6 sago007 2008-08-29 14:32 63
     fstream outFile(filename.c_str(),ios::out);
89c4a3a6 sago007 2008-08-29 14:32 64
     if(outFile)
89c4a3a6 sago007 2008-08-29 14:32 65
     {
89c4a3a6 sago007 2008-08-29 14:32 66
         outFile << getNumberOfBoards() << endl;
89c4a3a6 sago007 2008-08-29 14:32 67
         for(int i=0;i<getNumberOfBoards();i++)
89c4a3a6 sago007 2008-08-29 14:32 68
			{
89c4a3a6 sago007 2008-08-29 14:32 69
				outFile << theBoards[i].getNumberOfMoves() << endl;
89c4a3a6 sago007 2008-08-29 14:32 70
				for(int j=0;j<12;j++)
89c4a3a6 sago007 2008-08-29 14:32 71
				{
89c4a3a6 sago007 2008-08-29 14:32 72
					for(int k=0;k<6;k++)
89c4a3a6 sago007 2008-08-29 14:32 73
					{
89c4a3a6 sago007 2008-08-29 14:32 74
						outFile << theBoards[i].getBrick(k,j);
89c4a3a6 sago007 2008-08-29 14:32 75
						if(k<5)
89c4a3a6 sago007 2008-08-29 14:32 76
							outFile << " ";
89c4a3a6 sago007 2008-08-29 14:32 77
						else
89c4a3a6 sago007 2008-08-29 14:32 78
							outFile << endl;
89c4a3a6 sago007 2008-08-29 14:32 79
					}
89c4a3a6 sago007 2008-08-29 14:32 80
				}
89c4a3a6 sago007 2008-08-29 14:32 81
			}
89c4a3a6 sago007 2008-08-29 14:32 82
			outFile.close();   
89c4a3a6 sago007 2008-08-29 14:32 83
         return true;
89c4a3a6 sago007 2008-08-29 14:32 84
     }
89c4a3a6 sago007 2008-08-29 14:32 85
     else
89c4a3a6 sago007 2008-08-29 14:32 86
     return false;
89c4a3a6 sago007 2008-08-29 14:32 87
}
89c4a3a6 sago007 2008-08-29 14:32 88
89c4a3a6 sago007 2008-08-29 14:32 89
TheBoard BoardHolder::getModel(int nr)
89c4a3a6 sago007 2008-08-29 14:32 90
{
89c4a3a6 sago007 2008-08-29 14:32 91
    if(theBoards.size()<nr)
89c4a3a6 sago007 2008-08-29 14:32 92
    {
89c4a3a6 sago007 2008-08-29 14:32 93
        //Problem!
89c4a3a6 sago007 2008-08-29 14:32 94
        
89c4a3a6 sago007 2008-08-29 14:32 95
    }
89c4a3a6 sago007 2008-08-29 14:32 96
    else
89c4a3a6 sago007 2008-08-29 14:32 97
    {
89c4a3a6 sago007 2008-08-29 14:32 98
        return theBoards[nr];
89c4a3a6 sago007 2008-08-29 14:32 99
    }
89c4a3a6 sago007 2008-08-29 14:32 100
}
89c4a3a6 sago007 2008-08-29 14:32 101
89c4a3a6 sago007 2008-08-29 14:32 102
bool BoardHolder::setModel(int nr, TheBoard model)
89c4a3a6 sago007 2008-08-29 14:32 103
{
89c4a3a6 sago007 2008-08-29 14:32 104
     if((nr>49)||(nr<0))
89c4a3a6 sago007 2008-08-29 14:32 105
         return false;
89c4a3a6 sago007 2008-08-29 14:32 106
     theBoards[nr] = model;
89c4a3a6 sago007 2008-08-29 14:32 107
     return true;
89c4a3a6 sago007 2008-08-29 14:32 108
}
89c4a3a6 sago007 2008-08-29 14:32 109
89c4a3a6 sago007 2008-08-29 14:32 110
int BoardHolder::getNumberOfBoards()
89c4a3a6 sago007 2008-08-29 14:32 111
{
89c4a3a6 sago007 2008-08-29 14:32 112
    return theBoards.size();
89c4a3a6 sago007 2008-08-29 14:32 113
}
89c4a3a6 sago007 2008-08-29 14:32 114
89c4a3a6 sago007 2008-08-29 14:32 115
bool BoardHolder::addBoard()
89c4a3a6 sago007 2008-08-29 14:32 116
{
89c4a3a6 sago007 2008-08-29 14:32 117
    if(!(theBoards.size()<49))
89c4a3a6 sago007 2008-08-29 14:32 118
			return false;
89c4a3a6 sago007 2008-08-29 14:32 119
    TheBoard tb;
89c4a3a6 sago007 2008-08-29 14:32 120
		theBoards[theBoards.size()] = tb;
89c4a3a6 sago007 2008-08-29 14:32 121
		return true;
89c4a3a6 sago007 2008-08-29 14:32 122
}
89c4a3a6 sago007 2008-08-29 14:32 123
89c4a3a6 sago007 2008-08-29 14:32 124
bool BoardHolder::removeBoard(int nr)
89c4a3a6 sago007 2008-08-29 14:32 125
{
89c4a3a6 sago007 2008-08-29 14:32 126
    vector<TheBoard>::iterator itr;
89c4a3a6 sago007 2008-08-29 14:32 127
    itr = theBoards.begin();
89c4a3a6 sago007 2008-08-29 14:32 128
    itr+=nr;
89c4a3a6 sago007 2008-08-29 14:32 129
    theBoards.erase(itr);
89c4a3a6 sago007 2008-08-29 14:32 130
}
89c4a3a6 sago007 2008-08-29 14:32 131
89c4a3a6 sago007 2008-08-29 14:32 132
bool BoardHolder::moveBoardBack(int nr)
89c4a3a6 sago007 2008-08-29 14:32 133
{
89c4a3a6 sago007 2008-08-29 14:32 134
    if(nr<1) //We can't move back
89c4a3a6 sago007 2008-08-29 14:32 135
			return false;
89c4a3a6 sago007 2008-08-29 14:32 136
		if(nr>getNumberOfBoards())
89c4a3a6 sago007 2008-08-29 14:32 137
			return false;
89c4a3a6 sago007 2008-08-29 14:32 138
		TheBoard temp = theBoards[nr];
89c4a3a6 sago007 2008-08-29 14:32 139
		theBoards[nr] = theBoards[nr-1];
89c4a3a6 sago007 2008-08-29 14:32 140
		theBoards[nr-1] = temp;
89c4a3a6 sago007 2008-08-29 14:32 141
		return true;
89c4a3a6 sago007 2008-08-29 14:32 142
}
89c4a3a6 sago007 2008-08-29 14:32 143
89c4a3a6 sago007 2008-08-29 14:32 144
bool BoardHolder::moveBoardForward(int nr)
89c4a3a6 sago007 2008-08-29 14:32 145
{
89c4a3a6 sago007 2008-08-29 14:32 146
    if(nr>getNumberOfBoards()-2) //We can't move forward
89c4a3a6 sago007 2008-08-29 14:32 147
			return false;
89c4a3a6 sago007 2008-08-29 14:32 148
		if(nr<0)
89c4a3a6 sago007 2008-08-29 14:32 149
			return false;
89c4a3a6 sago007 2008-08-29 14:32 150
		TheBoard temp = theBoards[nr];
89c4a3a6 sago007 2008-08-29 14:32 151
		theBoards[nr] = theBoards[nr+1];
89c4a3a6 sago007 2008-08-29 14:32 152
		theBoards[nr+1] = temp;
89c4a3a6 sago007 2008-08-29 14:32 153
		return true;
89c4a3a6 sago007 2008-08-29 14:32 154
}
1970-01-01 00:00 155