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
{
b283e0f7 sago007 2012-07-29 14:01 75
	//Saving as fileversion 4
b283e0f7 sago007 2012-07-29 14:01 76
	cout << "Saving as version 4 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
	{
b283e0f7 sago007 2012-07-29 14:01 81
		saveFile << "0 16 PLAYER 1\n";
b283e0f7 sago007 2012-07-29 14:01 82
		saveFile << "0 16 NAME " << name << "\n";
b283e0f7 sago007 2012-07-29 14:01 83
		for(int i = 0;i < actions.size(); ++i) {
b283e0f7 sago007 2012-07-29 14:01 84
			saveFile << actions.at(i).time << " " << actions.at(i).action << " " << actions.at(i).param << "\n";
b283e0f7 sago007 2012-07-29 14:01 85
		}
b283e0f7 sago007 2012-07-29 14:01 86
		saveFile << "0 16 PLAYER 2\n";
b283e0f7 sago007 2012-07-29 14:01 87
		saveFile << "0 16 NAME " << name << "\n";
b283e0f7 sago007 2012-07-29 14:01 88
		for(int i = 0;i < p2.getActions().size(); ++i) {
b283e0f7 sago007 2012-07-29 14:01 89
			saveFile << p2.getActions().at(i).time << " " << p2.getActions().at(i).action << " " << p2.getActions().at(i).param << "\n";
b283e0f7 sago007 2012-07-29 14:01 90
		}
c53e6443 sago007 2012-04-17 11:04 91
		saveFile.close();
c53e6443 sago007 2012-04-17 11:04 92
		return true;
c53e6443 sago007 2012-04-17 11:04 93
	}
c53e6443 sago007 2012-04-17 11:04 94
	else
c53e6443 sago007 2012-04-17 11:04 95
	{
c53e6443 sago007 2012-04-17 11:04 96
		return false;
c53e6443 sago007 2012-04-17 11:04 97
	}
89c4a3a6 sago007 2008-08-29 14:32 98
}
89c4a3a6 sago007 2008-08-29 14:32 99
89c4a3a6 sago007 2008-08-29 14:32 100
bool Replay::loadReplay(string filename)
89c4a3a6 sago007 2008-08-29 14:32 101
{
c53e6443 sago007 2012-04-17 11:04 102
	isLoaded = true;
6c9b4cd7 sago007 2012-05-01 19:34 103
	actions.clear();
c53e6443 sago007 2012-04-17 11:04 104
	ifstream loadFile;
79d3c1d3 sago007 2012-05-05 15:54 105
	loadFile.open(filename.c_str());
c53e6443 sago007 2012-04-17 11:04 106
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 107
	{
6c9b4cd7 sago007 2012-05-01 19:34 108
		while(!loadFile.eof()) {
79d3c1d3 sago007 2012-05-05 15:54 109
			Sint32 time;
79d3c1d3 sago007 2012-05-05 15:54 110
			Uint32 action;
6c9b4cd7 sago007 2012-05-01 19:34 111
			string restOfLine;
6c9b4cd7 sago007 2012-05-01 19:34 112
			loadFile >> time >> action;
6c9b4cd7 sago007 2012-05-01 19:34 113
			if(action == 16)
c53e6443 sago007 2012-04-17 11:04 114
			{
6c9b4cd7 sago007 2012-05-01 19:34 115
				string command;
6c9b4cd7 sago007 2012-05-01 19:34 116
				loadFile >> command;
6c9b4cd7 sago007 2012-05-01 19:34 117
				if(command == "NAME")
6c9b4cd7 sago007 2012-05-01 19:34 118
					getline(loadFile,name,'\n');
6c9b4cd7 sago007 2012-05-01 19:34 119
				if(command == "PLAYER") {
6c9b4cd7 sago007 2012-05-01 19:34 120
					getline(loadFile,restOfLine,'\n');
79d3c1d3 sago007 2012-05-05 15:54 121
					if(restOfLine != " 1")
6c9b4cd7 sago007 2012-05-01 19:34 122
						break;
6c9b4cd7 sago007 2012-05-01 19:34 123
				}
6c9b4cd7 sago007 2012-05-01 19:34 124
			} else
6c9b4cd7 sago007 2012-05-01 19:34 125
			{
6c9b4cd7 sago007 2012-05-01 19:34 126
				getline(loadFile,restOfLine,'\n');
6c9b4cd7 sago007 2012-05-01 19:34 127
				Action a;
6c9b4cd7 sago007 2012-05-01 19:34 128
				a.time = time;
6c9b4cd7 sago007 2012-05-01 19:34 129
				a.action = action;
50258544 sago007 2012-05-10 19:11 130
				if(restOfLine.length()>1)
50258544 sago007 2012-05-10 19:11 131
					a.param = restOfLine.substr(1);
50258544 sago007 2012-05-10 19:11 132
				else
50258544 sago007 2012-05-10 19:11 133
					a.param = "";
6c9b4cd7 sago007 2012-05-01 19:34 134
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 135
			}
6c9b4cd7 sago007 2012-05-01 19:34 136
			
6c9b4cd7 sago007 2012-05-01 19:34 137
		}
c53e6443 sago007 2012-04-17 11:04 138
		loadFile.close();
79d3c1d3 sago007 2012-05-05 15:54 139
		cout << "Loaded 1 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 140
	}
c53e6443 sago007 2012-04-17 11:04 141
	else
c53e6443 sago007 2012-04-17 11:04 142
	{
c53e6443 sago007 2012-04-17 11:04 143
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 144
		return false;
c53e6443 sago007 2012-04-17 11:04 145
	}
89c4a3a6 sago007 2008-08-29 14:32 146
89c4a3a6 sago007 2008-08-29 14:32 147
}
89c4a3a6 sago007 2008-08-29 14:32 148
89c4a3a6 sago007 2008-08-29 14:32 149
bool Replay::loadReplay2(string filename)
89c4a3a6 sago007 2008-08-29 14:32 150
{
c53e6443 sago007 2012-04-17 11:04 151
	isLoaded = true;
b283e0f7 sago007 2012-07-29 14:01 152
	bool player2started = false; //set to true once the player two part is reached
b283e0f7 sago007 2012-07-29 14:01 153
	actions.clear();
c53e6443 sago007 2012-04-17 11:04 154
	ifstream loadFile;
b283e0f7 sago007 2012-07-29 14:01 155
	loadFile.open(filename.c_str());
c53e6443 sago007 2012-04-17 11:04 156
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 157
	{
b283e0f7 sago007 2012-07-29 14:01 158
		while(!loadFile.eof()) {
b283e0f7 sago007 2012-07-29 14:01 159
			Sint32 time;
b283e0f7 sago007 2012-07-29 14:01 160
			Uint32 action;
b283e0f7 sago007 2012-07-29 14:01 161
			string restOfLine;
b283e0f7 sago007 2012-07-29 14:01 162
			loadFile >> time >> action;
b283e0f7 sago007 2012-07-29 14:01 163
			if(action == 16)
c53e6443 sago007 2012-04-17 11:04 164
			{
b283e0f7 sago007 2012-07-29 14:01 165
				string command;
b283e0f7 sago007 2012-07-29 14:01 166
				loadFile >> command;
b283e0f7 sago007 2012-07-29 14:01 167
				if(command == "NAME")
b283e0f7 sago007 2012-07-29 14:01 168
					getline(loadFile,name,'\n');
b283e0f7 sago007 2012-07-29 14:01 169
				if(command == "PLAYER") {
b283e0f7 sago007 2012-07-29 14:01 170
					getline(loadFile,restOfLine,'\n');
b283e0f7 sago007 2012-07-29 14:01 171
					if(restOfLine == " 2")
b283e0f7 sago007 2012-07-29 14:01 172
						player2started = true;
b283e0f7 sago007 2012-07-29 14:01 173
				}
b283e0f7 sago007 2012-07-29 14:01 174
			} else
b283e0f7 sago007 2012-07-29 14:01 175
			{
b283e0f7 sago007 2012-07-29 14:01 176
				getline(loadFile,restOfLine,'\n');
b283e0f7 sago007 2012-07-29 14:01 177
				if(!player2started)
b283e0f7 sago007 2012-07-29 14:01 178
					continue;
b283e0f7 sago007 2012-07-29 14:01 179
				Action a;
b283e0f7 sago007 2012-07-29 14:01 180
				a.time = time;
b283e0f7 sago007 2012-07-29 14:01 181
				a.action = action;
b283e0f7 sago007 2012-07-29 14:01 182
				if(restOfLine.length()>1)
b283e0f7 sago007 2012-07-29 14:01 183
					a.param = restOfLine.substr(1);
b283e0f7 sago007 2012-07-29 14:01 184
				else
b283e0f7 sago007 2012-07-29 14:01 185
					a.param = "";
b283e0f7 sago007 2012-07-29 14:01 186
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 187
			}
79d3c1d3 sago007 2012-05-05 15:54 188
			
b283e0f7 sago007 2012-07-29 14:01 189
		}
c53e6443 sago007 2012-04-17 11:04 190
		loadFile.close();
b283e0f7 sago007 2012-07-29 14:01 191
		cout << "Loaded 2 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 192
	}
c53e6443 sago007 2012-04-17 11:04 193
	else
c53e6443 sago007 2012-04-17 11:04 194
	{
c53e6443 sago007 2012-04-17 11:04 195
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 196
		return false;
c53e6443 sago007 2012-04-17 11:04 197
	}
89c4a3a6 sago007 2008-08-29 14:32 198
89c4a3a6 sago007 2008-08-29 14:32 199
}
d12916ab sago007 2012-04-19 23:30 200
6c9b4cd7 sago007 2012-05-01 19:34 201
void Replay::setName(string name)
6c9b4cd7 sago007 2012-05-01 19:34 202
{
6c9b4cd7 sago007 2012-05-01 19:34 203
	this->name = name;
6c9b4cd7 sago007 2012-05-01 19:34 204
}
6c9b4cd7 sago007 2012-05-01 19:34 205
6c9b4cd7 sago007 2012-05-01 19:34 206
string Replay::getName() const
6c9b4cd7 sago007 2012-05-01 19:34 207
{
6c9b4cd7 sago007 2012-05-01 19:34 208
	return name;
6c9b4cd7 sago007 2012-05-01 19:34 209
}
6c9b4cd7 sago007 2012-05-01 19:34 210
79d3c1d3 sago007 2012-05-05 15:54 211
vector<Action> Replay::getActions() const {
79d3c1d3 sago007 2012-05-05 15:54 212
	return actions;
79d3c1d3 sago007 2012-05-05 15:54 213
}
79d3c1d3 sago007 2012-05-05 15:54 214
79d3c1d3 sago007 2012-05-05 15:54 215
void Replay::addAction(int tick, int action, string param) 
79d3c1d3 sago007 2012-05-05 15:54 216
{
6c9b4cd7 sago007 2012-05-01 19:34 217
	cout << tick << " " << action << " " << param << endl;
d12916ab sago007 2012-04-19 23:30 218
	Action a;
d12916ab sago007 2012-04-19 23:30 219
	a.time = tick;
d12916ab sago007 2012-04-19 23:30 220
	a.action = action;
6c9b4cd7 sago007 2012-05-01 19:34 221
	a.param = param;
d12916ab sago007 2012-04-19 23:30 222
	actions.push_back(a);
d12916ab sago007 2012-04-19 23:30 223
}
1970-01-01 00:00 224