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;
6c9b4cd7 sago007 2012-05-01 19:34 125
				a.param = restOfLine;
6c9b4cd7 sago007 2012-05-01 19:34 126
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 127
			}
6c9b4cd7 sago007 2012-05-01 19:34 128
			
6c9b4cd7 sago007 2012-05-01 19:34 129
		}
c53e6443 sago007 2012-04-17 11:04 130
		loadFile.close();
79d3c1d3 sago007 2012-05-05 15:54 131
		cout << "Loaded 1 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 132
	}
c53e6443 sago007 2012-04-17 11:04 133
	else
c53e6443 sago007 2012-04-17 11:04 134
	{
c53e6443 sago007 2012-04-17 11:04 135
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 136
		return false;
c53e6443 sago007 2012-04-17 11:04 137
	}
89c4a3a6 sago007 2008-08-29 14:32 138
89c4a3a6 sago007 2008-08-29 14:32 139
}
89c4a3a6 sago007 2008-08-29 14:32 140
89c4a3a6 sago007 2008-08-29 14:32 141
bool Replay::loadReplay2(string filename)
89c4a3a6 sago007 2008-08-29 14:32 142
{
c53e6443 sago007 2012-04-17 11:04 143
	isLoaded = true;
c53e6443 sago007 2012-04-17 11:04 144
	ifstream loadFile;
c53e6443 sago007 2012-04-17 11:04 145
	loadFile.open(filename.c_str(),ios::binary);
c53e6443 sago007 2012-04-17 11:04 146
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 147
	{
c53e6443 sago007 2012-04-17 11:04 148
		Uint32 version;
c53e6443 sago007 2012-04-17 11:04 149
		loadFile.read(reinterpret_cast<char*>(&version),sizeof(Uint32));
c53e6443 sago007 2012-04-17 11:04 150
		switch (version)
c53e6443 sago007 2012-04-17 11:04 151
		{
c53e6443 sago007 2012-04-17 11:04 152
		case 3:
c53e6443 sago007 2012-04-17 11:04 153
			Uint8 nrOfPlayers;
c53e6443 sago007 2012-04-17 11:04 154
			boardPackage bp;
c53e6443 sago007 2012-04-17 11:04 155
			loadFile.read(reinterpret_cast<char*>(&nrOfPlayers),sizeof(Uint8));
c53e6443 sago007 2012-04-17 11:04 156
			if (nrOfPlayers<2)
c53e6443 sago007 2012-04-17 11:04 157
			{
c53e6443 sago007 2012-04-17 11:04 158
				loadFile.close();
c53e6443 sago007 2012-04-17 11:04 159
				cout << "Only one player in replay" << endl;
c53e6443 sago007 2012-04-17 11:04 160
				return false;
c53e6443 sago007 2012-04-17 11:04 161
			}
c53e6443 sago007 2012-04-17 11:04 162
			cout << "loading player 2" << endl;
79d3c1d3 sago007 2012-05-05 15:54 163
			
c53e6443 sago007 2012-04-17 11:04 164
			break;
c53e6443 sago007 2012-04-17 11:04 165
		default:
c53e6443 sago007 2012-04-17 11:04 166
			cout << "Unknown version: " << version << endl;
c53e6443 sago007 2012-04-17 11:04 167
			return false;
c53e6443 sago007 2012-04-17 11:04 168
		};
c53e6443 sago007 2012-04-17 11:04 169
		loadFile.close();
c53e6443 sago007 2012-04-17 11:04 170
	}
c53e6443 sago007 2012-04-17 11:04 171
	else
c53e6443 sago007 2012-04-17 11:04 172
	{
c53e6443 sago007 2012-04-17 11:04 173
		cout << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 174
		return false;
c53e6443 sago007 2012-04-17 11:04 175
	}
89c4a3a6 sago007 2008-08-29 14:32 176
89c4a3a6 sago007 2008-08-29 14:32 177
}
d12916ab sago007 2012-04-19 23:30 178
6c9b4cd7 sago007 2012-05-01 19:34 179
void Replay::setName(string name)
6c9b4cd7 sago007 2012-05-01 19:34 180
{
6c9b4cd7 sago007 2012-05-01 19:34 181
	this->name = name;
6c9b4cd7 sago007 2012-05-01 19:34 182
}
6c9b4cd7 sago007 2012-05-01 19:34 183
6c9b4cd7 sago007 2012-05-01 19:34 184
string Replay::getName() const
6c9b4cd7 sago007 2012-05-01 19:34 185
{
6c9b4cd7 sago007 2012-05-01 19:34 186
	return name;
6c9b4cd7 sago007 2012-05-01 19:34 187
}
6c9b4cd7 sago007 2012-05-01 19:34 188
79d3c1d3 sago007 2012-05-05 15:54 189
vector<Action> Replay::getActions() const {
79d3c1d3 sago007 2012-05-05 15:54 190
	return actions;
79d3c1d3 sago007 2012-05-05 15:54 191
}
79d3c1d3 sago007 2012-05-05 15:54 192
79d3c1d3 sago007 2012-05-05 15:54 193
void Replay::addAction(int tick, int action, string param) 
79d3c1d3 sago007 2012-05-05 15:54 194
{
6c9b4cd7 sago007 2012-05-01 19:34 195
	cout << tick << " " << action << " " << param << endl;
d12916ab sago007 2012-04-19 23:30 196
	Action a;
d12916ab sago007 2012-04-19 23:30 197
	a.time = tick;
d12916ab sago007 2012-04-19 23:30 198
	a.action = action;
6c9b4cd7 sago007 2012-05-01 19:34 199
	a.param = param;
d12916ab sago007 2012-04-19 23:30 200
	actions.push_back(a);
d12916ab sago007 2012-04-19 23:30 201
}
1970-01-01 00:00 202