git repos / blockattack-game

blame: source/code/replay.cpp

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
89c4a3a6 sago007 2008-08-29 14:32 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.
89c4a3a6 sago007 2008-08-29 14:32 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.
89c4a3a6 sago007 2008-08-29 14:32 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/
89c4a3a6 sago007 2008-08-29 14:32 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
===========================================================================
89c4a3a6 sago007 2008-08-29 14:32 22
*/
89c4a3a6 sago007 2008-08-29 14:32 23
89c4a3a6 sago007 2008-08-29 14:32 24
/*
89c4a3a6 sago007 2008-08-29 14:32 25
Handles replay
89c4a3a6 sago007 2008-08-29 14:32 26
*/
89c4a3a6 sago007 2008-08-29 14:32 27
c96f480e sago007 2009-03-28 18:59 28
#include <string.h>
c96f480e sago007 2009-03-28 18:59 29
89c4a3a6 sago007 2008-08-29 14:32 30
#include "replay.h"
89c4a3a6 sago007 2008-08-29 14:32 31
89c4a3a6 sago007 2008-08-29 14:32 32
Replay::Replay()
89c4a3a6 sago007 2008-08-29 14:32 33
{
c53e6443 sago007 2012-04-17 11:04 34
	isLoaded = false;
79d3c1d3 sago007 2012-05-05 15:54 35
	actions.clear();
89c4a3a6 sago007 2008-08-29 14:32 36
}
89c4a3a6 sago007 2008-08-29 14:32 37
89c4a3a6 sago007 2008-08-29 14:32 38
Replay::Replay(const Replay& r)
89c4a3a6 sago007 2008-08-29 14:32 39
{
c53e6443 sago007 2012-04-17 11:04 40
	isLoaded = r.isLoaded;
6c9b4cd7 sago007 2012-05-01 19:34 41
	name = r.name;
d93dc017 sago007 2012-04-22 14:28 42
	actions = r.actions;
89c4a3a6 sago007 2008-08-29 14:32 43
}
89c4a3a6 sago007 2008-08-29 14:32 44
89c4a3a6 sago007 2008-08-29 14:32 45
89c4a3a6 sago007 2008-08-29 14:32 46
89c4a3a6 sago007 2008-08-29 14:32 47
89c4a3a6 sago007 2008-08-29 14:32 48
89c4a3a6 sago007 2008-08-29 14:32 49
89c4a3a6 sago007 2008-08-29 14:32 50
89c4a3a6 sago007 2008-08-29 14:32 51
bool Replay::saveReplay(string filename)
89c4a3a6 sago007 2008-08-29 14:32 52
{
d93dc017 sago007 2012-04-22 14:28 53
	//Saving as fileversion 4
d93dc017 sago007 2012-04-22 14:28 54
	cout << "Saving as version 4 save file" << endl;
c53e6443 sago007 2012-04-17 11:04 55
	ofstream saveFile;
c53e6443 sago007 2012-04-17 11:04 56
	saveFile.open(filename.c_str(),ios::binary|ios::trunc);
c53e6443 sago007 2012-04-17 11:04 57
	if (saveFile)
c53e6443 sago007 2012-04-17 11:04 58
	{
6c9b4cd7 sago007 2012-05-01 19:34 59
		saveFile << "0 16 PLAYER 1\n";
6c9b4cd7 sago007 2012-05-01 19:34 60
		saveFile << "0 16 NAME " << name << "\n";
d93dc017 sago007 2012-04-22 14:28 61
		for(int i = 0;i < actions.size(); ++i) {
6c9b4cd7 sago007 2012-05-01 19:34 62
			saveFile << actions.at(i).time << " " << actions.at(i).action << " " << actions.at(i).param << "\n";
c53e6443 sago007 2012-04-17 11:04 63
		}
c53e6443 sago007 2012-04-17 11:04 64
		saveFile.close();
c53e6443 sago007 2012-04-17 11:04 65
		return true;
c53e6443 sago007 2012-04-17 11:04 66
	}
c53e6443 sago007 2012-04-17 11:04 67
	else
c53e6443 sago007 2012-04-17 11:04 68
	{
c53e6443 sago007 2012-04-17 11:04 69
		return false;
c53e6443 sago007 2012-04-17 11:04 70
	}
89c4a3a6 sago007 2008-08-29 14:32 71
}
89c4a3a6 sago007 2008-08-29 14:32 72
89c4a3a6 sago007 2008-08-29 14:32 73
bool Replay::saveReplay(string filename,Replay p2)
89c4a3a6 sago007 2008-08-29 14:32 74
{
c53e6443 sago007 2012-04-17 11:04 75
	//Saving as fileversion 3
c53e6443 sago007 2012-04-17 11:04 76
	cout << "Saving as version 3 save file (2 players)" << endl;
c53e6443 sago007 2012-04-17 11:04 77
	ofstream saveFile;
c53e6443 sago007 2012-04-17 11:04 78
	saveFile.open(filename.c_str(),ios::binary|ios::trunc);
c53e6443 sago007 2012-04-17 11:04 79
	if (saveFile)
c53e6443 sago007 2012-04-17 11:04 80
	{
d93dc017 sago007 2012-04-22 14:28 81
		Uint32 version = 4;
c53e6443 sago007 2012-04-17 11:04 82
		boardPackage bp;
c53e6443 sago007 2012-04-17 11:04 83
		saveFile.write(reinterpret_cast<char*>(&version),sizeof(Uint32)); //Fileversion
c53e6443 sago007 2012-04-17 11:04 84
		Uint8 nrOfReplays = 2;
79d3c1d3 sago007 2012-05-05 15:54 85
		
c53e6443 sago007 2012-04-17 11:04 86
		saveFile.close();
c53e6443 sago007 2012-04-17 11:04 87
		return true;
c53e6443 sago007 2012-04-17 11:04 88
	}
c53e6443 sago007 2012-04-17 11:04 89
	else
c53e6443 sago007 2012-04-17 11:04 90
	{
c53e6443 sago007 2012-04-17 11:04 91
		return false;
c53e6443 sago007 2012-04-17 11:04 92
	}
89c4a3a6 sago007 2008-08-29 14:32 93
}
89c4a3a6 sago007 2008-08-29 14:32 94
89c4a3a6 sago007 2008-08-29 14:32 95
bool Replay::loadReplay(string filename)
89c4a3a6 sago007 2008-08-29 14:32 96
{
c53e6443 sago007 2012-04-17 11:04 97
	isLoaded = true;
6c9b4cd7 sago007 2012-05-01 19:34 98
	actions.clear();
c53e6443 sago007 2012-04-17 11:04 99
	ifstream loadFile;
79d3c1d3 sago007 2012-05-05 15:54 100
	loadFile.open(filename.c_str());
c53e6443 sago007 2012-04-17 11:04 101
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 102
	{
6c9b4cd7 sago007 2012-05-01 19:34 103
		while(!loadFile.eof()) {
79d3c1d3 sago007 2012-05-05 15:54 104
			Sint32 time;
79d3c1d3 sago007 2012-05-05 15:54 105
			Uint32 action;
6c9b4cd7 sago007 2012-05-01 19:34 106
			string restOfLine;
6c9b4cd7 sago007 2012-05-01 19:34 107
			loadFile >> time >> action;
6c9b4cd7 sago007 2012-05-01 19:34 108
			if(action == 16)
c53e6443 sago007 2012-04-17 11:04 109
			{
6c9b4cd7 sago007 2012-05-01 19:34 110
				string command;
6c9b4cd7 sago007 2012-05-01 19:34 111
				loadFile >> command;
6c9b4cd7 sago007 2012-05-01 19:34 112
				if(command == "NAME")
6c9b4cd7 sago007 2012-05-01 19:34 113
					getline(loadFile,name,'\n');
6c9b4cd7 sago007 2012-05-01 19:34 114
				if(command == "PLAYER") {
6c9b4cd7 sago007 2012-05-01 19:34 115
					getline(loadFile,restOfLine,'\n');
79d3c1d3 sago007 2012-05-05 15:54 116
					if(restOfLine != " 1")
6c9b4cd7 sago007 2012-05-01 19:34 117
						break;
6c9b4cd7 sago007 2012-05-01 19:34 118
				}
6c9b4cd7 sago007 2012-05-01 19:34 119
			} else
6c9b4cd7 sago007 2012-05-01 19:34 120
			{
6c9b4cd7 sago007 2012-05-01 19:34 121
				getline(loadFile,restOfLine,'\n');
6c9b4cd7 sago007 2012-05-01 19:34 122
				Action a;
6c9b4cd7 sago007 2012-05-01 19:34 123
				a.time = time;
6c9b4cd7 sago007 2012-05-01 19:34 124
				a.action = action;
50258544 sago007 2012-05-10 19:11 125
				if(restOfLine.length()>1)
50258544 sago007 2012-05-10 19:11 126
					a.param = restOfLine.substr(1);
50258544 sago007 2012-05-10 19:11 127
				else
50258544 sago007 2012-05-10 19:11 128
					a.param = "";
6c9b4cd7 sago007 2012-05-01 19:34 129
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 130
			}
6c9b4cd7 sago007 2012-05-01 19:34 131
			
6c9b4cd7 sago007 2012-05-01 19:34 132
		}
c53e6443 sago007 2012-04-17 11:04 133
		loadFile.close();
79d3c1d3 sago007 2012-05-05 15:54 134
		cout << "Loaded 1 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 135
	}
c53e6443 sago007 2012-04-17 11:04 136
	else
c53e6443 sago007 2012-04-17 11:04 137
	{
c53e6443 sago007 2012-04-17 11:04 138
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 139
		return false;
c53e6443 sago007 2012-04-17 11:04 140
	}
89c4a3a6 sago007 2008-08-29 14:32 141
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 Replay::loadReplay2(string filename)
89c4a3a6 sago007 2008-08-29 14:32 145
{
c53e6443 sago007 2012-04-17 11:04 146
	isLoaded = true;
c53e6443 sago007 2012-04-17 11:04 147
	ifstream loadFile;
c53e6443 sago007 2012-04-17 11:04 148
	loadFile.open(filename.c_str(),ios::binary);
c53e6443 sago007 2012-04-17 11:04 149
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 150
	{
c53e6443 sago007 2012-04-17 11:04 151
		Uint32 version;
c53e6443 sago007 2012-04-17 11:04 152
		loadFile.read(reinterpret_cast<char*>(&version),sizeof(Uint32));
c53e6443 sago007 2012-04-17 11:04 153
		switch (version)
c53e6443 sago007 2012-04-17 11:04 154
		{
c53e6443 sago007 2012-04-17 11:04 155
		case 3:
c53e6443 sago007 2012-04-17 11:04 156
			Uint8 nrOfPlayers;
c53e6443 sago007 2012-04-17 11:04 157
			boardPackage bp;
c53e6443 sago007 2012-04-17 11:04 158
			loadFile.read(reinterpret_cast<char*>(&nrOfPlayers),sizeof(Uint8));
c53e6443 sago007 2012-04-17 11:04 159
			if (nrOfPlayers<2)
c53e6443 sago007 2012-04-17 11:04 160
			{
c53e6443 sago007 2012-04-17 11:04 161
				loadFile.close();
c53e6443 sago007 2012-04-17 11:04 162
				cout << "Only one player in replay" << endl;
c53e6443 sago007 2012-04-17 11:04 163
				return false;
c53e6443 sago007 2012-04-17 11:04 164
			}
c53e6443 sago007 2012-04-17 11:04 165
			cout << "loading player 2" << endl;
79d3c1d3 sago007 2012-05-05 15:54 166
			
c53e6443 sago007 2012-04-17 11:04 167
			break;
c53e6443 sago007 2012-04-17 11:04 168
		default:
c53e6443 sago007 2012-04-17 11:04 169
			cout << "Unknown version: " << version << endl;
c53e6443 sago007 2012-04-17 11:04 170
			return false;
c53e6443 sago007 2012-04-17 11:04 171
		};
c53e6443 sago007 2012-04-17 11:04 172
		loadFile.close();
c53e6443 sago007 2012-04-17 11:04 173
	}
c53e6443 sago007 2012-04-17 11:04 174
	else
c53e6443 sago007 2012-04-17 11:04 175
	{
c53e6443 sago007 2012-04-17 11:04 176
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 177
		return false;
c53e6443 sago007 2012-04-17 11:04 178
	}
89c4a3a6 sago007 2008-08-29 14:32 179
89c4a3a6 sago007 2008-08-29 14:32 180
}
d12916ab sago007 2012-04-19 23:30 181
6c9b4cd7 sago007 2012-05-01 19:34 182
void Replay::setName(string name)
6c9b4cd7 sago007 2012-05-01 19:34 183
{
6c9b4cd7 sago007 2012-05-01 19:34 184
	this->name = name;
6c9b4cd7 sago007 2012-05-01 19:34 185
}
6c9b4cd7 sago007 2012-05-01 19:34 186
6c9b4cd7 sago007 2012-05-01 19:34 187
string Replay::getName() const
6c9b4cd7 sago007 2012-05-01 19:34 188
{
6c9b4cd7 sago007 2012-05-01 19:34 189
	return name;
6c9b4cd7 sago007 2012-05-01 19:34 190
}
6c9b4cd7 sago007 2012-05-01 19:34 191
79d3c1d3 sago007 2012-05-05 15:54 192
vector<Action> Replay::getActions() const {
79d3c1d3 sago007 2012-05-05 15:54 193
	return actions;
79d3c1d3 sago007 2012-05-05 15:54 194
}
79d3c1d3 sago007 2012-05-05 15:54 195
79d3c1d3 sago007 2012-05-05 15:54 196
void Replay::addAction(int tick, int action, string param) 
79d3c1d3 sago007 2012-05-05 15:54 197
{
6c9b4cd7 sago007 2012-05-01 19:34 198
	cout << tick << " " << action << " " << param << endl;
d12916ab sago007 2012-04-19 23:30 199
	Action a;
d12916ab sago007 2012-04-19 23:30 200
	a.time = tick;
d12916ab sago007 2012-04-19 23:30 201
	a.action = action;
6c9b4cd7 sago007 2012-05-01 19:34 202
	a.param = param;
d12916ab sago007 2012-04-19 23:30 203
	actions.push_back(a);
d12916ab sago007 2012-04-19 23:30 204
}
1970-01-01 00:00 205