131 lines
4.8 KiB
C++
131 lines
4.8 KiB
C++
#include "../include/PrintFrames.h"
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
void PrintFrames::printHeader() {
|
|
cout << "| f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10 |" << endl;
|
|
}
|
|
|
|
void PrintFrames::printValue(const string& value) {
|
|
cout << value;
|
|
}
|
|
|
|
string PrintFrames::parseValue(const vector<Frame>& frames) {
|
|
stringstream ss;
|
|
|
|
// There can only be 10 frames.
|
|
for (int i = 0; i < 10; i++) {
|
|
ss << "|";
|
|
// Strike
|
|
if (frames[i].Roll[0] == 10) {
|
|
if (frames[i].Roll.size() == 3) {
|
|
ss << "X, ";
|
|
|
|
if (frames[i].Roll[1] == 10 && frames[i].Roll[2] == 10) {
|
|
ss << "X, X";
|
|
}
|
|
else if (frames[i].Roll[1] != 10 && frames[i].Roll[2] == 10) {
|
|
ss << frames[i].Roll[1] << ", X ";
|
|
}
|
|
else if (frames[i].Roll[1] == 10 && frames[i].Roll[2] != 10) {
|
|
ss << "X, " << frames[i].Roll[2] << " ";
|
|
}
|
|
else if (frames[i].Roll[1] == 10 && frames[i].Roll[2] == 0) {
|
|
ss << frames[i].Roll[1] << ", - ";
|
|
}
|
|
else if (frames[i].Roll[1] == 0 && frames[i].Roll[2] == 10) {
|
|
ss << "-, " << frames[i].Roll[2] << " ";
|
|
}
|
|
else if (frames[i].Roll[1] != 10 && frames[i].Roll[2] == 0) {
|
|
ss << frames[i].Roll[1] << ", - ";
|
|
}
|
|
else if (frames[i].Roll[1] == 0 && frames[i].Roll[2] != 10) {
|
|
ss << "-, " << frames[i].Roll[2] << " ";
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
// If the next frame has 3 or 2 rolls, then take those 2.
|
|
if (frames[i + 1].Roll.size() > 1) {
|
|
if (frames[i + 1].Roll[0] == 10 && frames[i + 1].Roll[1] != 10) {
|
|
ss << "X, " << frames[i + 1].Roll[0] << " ";
|
|
}
|
|
else if (frames[i + 1].Roll[0] != 10 && frames[i + 1].Roll[1] == 10) {
|
|
ss << frames[i + 1].Roll[1] << ", X";
|
|
} else {
|
|
if (frames[i + 1].Roll[0] + frames[i + 1].Roll[1] == 10) {
|
|
ss << "X, " << frames[i + 1].Roll[0] << ", /";
|
|
}
|
|
else if (frames[i + 1].Roll[0] == 0 && frames[i + 1].Roll[1] != 0) {
|
|
ss << "X, " << "-, " << frames[i + 1].Roll[1];
|
|
}
|
|
else if (frames[i + 1].Roll[0] != 0 && frames[i + 1].Roll[1] == 0) {
|
|
ss << "X, " << frames[i + 1].Roll[0] << ", -";
|
|
} else {
|
|
ss << "X, ";
|
|
}
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
// Both next frames, that are not the last, are 10.
|
|
ss << "X ";
|
|
|
|
continue;
|
|
}
|
|
|
|
// Spare
|
|
if (frames[i].Roll[0] + frames[i].Roll[1] == 10) {
|
|
if (frames[i].Roll.size() == 3) {
|
|
if (frames[i].Roll[0] == 0 && frames[i].Roll[1] != 10 && frames[i].Roll[2] != 10) {
|
|
if (frames[i].Roll[2] == 0) {
|
|
ss << "-, /, -";
|
|
} else {
|
|
ss << "-, " << frames[i].Roll[1] << frames[i].Roll[2];
|
|
}
|
|
}
|
|
else if (frames[i].Roll[0] == 0 && frames[i].Roll[1] == 10 && frames[i].Roll[2] != 10) {
|
|
if (frames[i].Roll[2] == 0) {
|
|
ss << "-, /, -";
|
|
} else {
|
|
ss << "-, /, " << frames[i].Roll[2];
|
|
}
|
|
}
|
|
else if (frames[i].Roll[0] == 0 && frames[i].Roll[1] == 10 && frames[i].Roll[2] == 10) {
|
|
ss << "-, /, X";
|
|
} else {
|
|
ss << frames[i].Roll[0] << ", /, " << frames[i].Roll[2];
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
ss << frames[i].Roll[0] << ", /";
|
|
continue;
|
|
}
|
|
|
|
// Open frame
|
|
if (i == 9) {
|
|
ss << frames[i].Roll[0] << ", " << frames[i].Roll[1] << " ";
|
|
} else {
|
|
if (frames[i].Roll[0] == 0 && frames[i].Roll[1] == 0) {
|
|
ss << "-, -";
|
|
}
|
|
else if (frames[i].Roll[0] == 0 && frames[i].Roll[1] != 0) {
|
|
ss << "-, " << frames[i].Roll[1];
|
|
}
|
|
else if (frames[i].Roll[0] != 0 && frames[i].Roll[1] == 0) {
|
|
ss << frames[i].Roll[0] << ", -";
|
|
} else {
|
|
ss << frames[i].Roll[0] << ", " << frames[i].Roll[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
ss << "|";
|
|
ss << endl;
|
|
|
|
return ss.str();
|
|
} |