Compare commits
25
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8222f5e0b3 | ||
|
|
b8e2e8e2fd | ||
|
|
1228b7150a | ||
|
|
4a09cbbb33 | ||
|
|
0ebfb2b86d | ||
|
|
76284c3951 | ||
|
|
aa81717fd9 | ||
|
|
7d9da3cc50 | ||
|
|
61b00d40db | ||
|
|
f5e96e7704 | ||
|
|
05ba979f58 | ||
|
|
8fdd4c18fd | ||
|
|
c14a29a070 | ||
|
|
3420815c74 | ||
|
|
f076e0e35c | ||
|
|
ceddebcd80 | ||
|
|
8ed07d0334 | ||
|
|
b285704ae1 | ||
|
|
3fd7328f66 | ||
|
|
5b61f0e5d9 | ||
|
|
5f8cabb56a | ||
|
|
67d8fa370d | ||
|
|
5ec8a150cd | ||
|
|
de703651f7 | ||
|
|
d655c852fa |
@@ -86,3 +86,5 @@ dkms.conf
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# Custom
|
||||
bin/*
|
||||
|
||||
+6
-2
@@ -1,7 +1,11 @@
|
||||
FROM gcc:latest
|
||||
|
||||
RUN g++ src/*.cpp -o Bowling
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY bin/Bowling /app/
|
||||
COPY rolls.txt /app/
|
||||
|
||||
CMD ["./Bowling"]
|
||||
#RUN g++ src/*.cpp -o Bowling
|
||||
|
||||
CMD ["./Bowling", "rolls.txt"]
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#ifndef FILEHELPER_H
|
||||
#define FILEHELPER_H
|
||||
|
||||
class FileHelper {
|
||||
public:
|
||||
FileHelper();
|
||||
|
||||
~FileHelper();
|
||||
|
||||
static bool FileExists(char *path);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef FILEREADER_H
|
||||
#define FILEREADER_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class FileReader {
|
||||
public:
|
||||
FileReader();
|
||||
|
||||
~FileReader();
|
||||
|
||||
static std::string GetFile(char *path);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef NUMBERHELPER_H
|
||||
#define NUMBERHELPER_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class NumberHelper {
|
||||
public:
|
||||
NumberHelper();
|
||||
|
||||
~NumberHelper();
|
||||
|
||||
static vector<int> GetNumbers(string csv);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef PRINTFRAMES_H
|
||||
#define PRINTFRAMES_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class PrintFrames {
|
||||
public:
|
||||
PrintFrames();
|
||||
|
||||
~PrintFrames();
|
||||
|
||||
static void PrintHeader(vector<int> rolls);
|
||||
static void PrintValue(vector<int> rolls);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,9 @@
|
||||
# Bowling
|
||||
|
||||
If you want to try out the project, please use git clone with the HTTPS link to the repo, and not the SSH link, as only the owner can pull and push via SSH.
|
||||
To run the project, simply follow these steps:
|
||||
1. `git clone https://git.rbwr.dk/owner/Bowling.git`
|
||||
2. `cd Bowling/`
|
||||
2. `docker build -t bowling .`
|
||||
3. `docker run --rm bowling`
|
||||
|
||||
To change bowling score, simply edit the `rolls.txt` file, and build the docker image again.
|
||||
BIN
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
#ifndef FILEHELPER_H
|
||||
#define FILEHELPER_H
|
||||
|
||||
class FileHelper {
|
||||
public:
|
||||
FileHelper() = default;
|
||||
|
||||
~FileHelper() = default;
|
||||
|
||||
static bool fileExists(char *path);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef FILEREADER_H
|
||||
#define FILEREADER_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class FileReader {
|
||||
public:
|
||||
FileReader() = default;
|
||||
|
||||
~FileReader() = default;
|
||||
|
||||
static string getFile(char *path);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef FILEUTIL_H
|
||||
#define FILEUTIL_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class FileUtil {
|
||||
public:
|
||||
FileUtil() = default;
|
||||
|
||||
~FileUtil() = default;
|
||||
|
||||
static string getFile(char *path);
|
||||
static bool fileExists(char *path);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef FRAME_H
|
||||
#define FRAME_H
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
struct Frame {
|
||||
vector<int> Roll;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef NUMBERHELPER_H
|
||||
#define NUMBERHELPER_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "../include/Frame.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class NumberHelper {
|
||||
public:
|
||||
NumberHelper() = default;
|
||||
|
||||
~NumberHelper() = default;
|
||||
|
||||
static vector<int> getRolls(string csv);
|
||||
static bool validateRolls(vector<int> rolls);
|
||||
static vector<Frame> createFrames(vector<int> rolls);
|
||||
|
||||
private:
|
||||
static Frame createStrikeFrame(int i);
|
||||
static Frame createFreeFrame(int i, int j);
|
||||
static Frame createBonusFrame(int i, int j, int k);
|
||||
static bool isNumber(const std::string& str);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef PRINTFRAMES_H
|
||||
#define PRINTFRAMES_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "../include/Frame.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class PrintFrames {
|
||||
public:
|
||||
PrintFrames() = default;
|
||||
|
||||
~PrintFrames() = default;
|
||||
|
||||
static void printHeader();
|
||||
static void printValue(string values);
|
||||
static string parseValue(vector<Frame> frames);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -3,16 +3,17 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "../include/Frame.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class ScoreCalculator {
|
||||
public:
|
||||
ScoreCalculator();
|
||||
ScoreCalculator() = default;
|
||||
|
||||
~ScoreCalculator();
|
||||
~ScoreCalculator() = default;
|
||||
|
||||
static int GetScore(vector<int> rolls);
|
||||
static int getScore(vector<Frame> rolls);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1 @@
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 1
|
||||
2, 3, 5, 4, 9, 1, 2, 5, 3, 2, 4, 2, 3, 3, 4, 6, 10, 3, 2
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
10, 3, 2, 2, 3, 5, 4, 9, 1, 2, 5, 3, 2, 4, 2, 3, 3, 4, 6
|
||||
@@ -0,0 +1 @@
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
|
||||
@@ -0,0 +1 @@
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
||||
@@ -0,0 +1 @@
|
||||
5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 5, 5
|
||||
@@ -0,0 +1 @@
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 10, 10
|
||||
+2
-5
@@ -1,10 +1,7 @@
|
||||
#include "../Include/FileHelper.h"
|
||||
#include "../include/FileHelper.h"
|
||||
#include <sys/stat.h>
|
||||
|
||||
FileHelper::FileHelper() {};
|
||||
FileHelper::~FileHelper() {};
|
||||
|
||||
bool FileHelper::FileExists(char *path){
|
||||
bool FileHelper::fileExists(char *path){
|
||||
struct stat s;
|
||||
|
||||
// Check if file exists, and if it isn't a folder.
|
||||
|
||||
+6
-8
@@ -1,16 +1,14 @@
|
||||
#include "../Include/FileReader.h"
|
||||
#include "../include/FileReader.h"
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
FileReader::FileReader() {};
|
||||
FileReader::~FileReader() {};
|
||||
|
||||
std::string FileReader::GetFile(char *path){
|
||||
std::ifstream file(path);
|
||||
string FileReader::getFile(char *path){
|
||||
ifstream file(path);
|
||||
|
||||
std::string line;
|
||||
string line;
|
||||
|
||||
std::getline(file, line);
|
||||
// There is only one line in the file
|
||||
getline(file, line);
|
||||
|
||||
file.close();
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#include "../include/FileUtil.h"
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sys/stat.h>
|
||||
|
||||
bool FileUtil::fileExists(char *path){
|
||||
struct stat s;
|
||||
|
||||
// Check if file exists, and if it isn't a folder.
|
||||
if (stat(path, &s) == 0 && !(s.st_mode & S_IFDIR)){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
string FileUtil::getFile(char *path){
|
||||
ifstream file(path);
|
||||
|
||||
string line;
|
||||
|
||||
// There is only one line in the file
|
||||
getline(file, line);
|
||||
|
||||
file.close();
|
||||
|
||||
return line;
|
||||
}
|
||||
+136
-10
@@ -1,19 +1,145 @@
|
||||
#include "../Include/NumberHelper.h"
|
||||
#include "../include/NumberHelper.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <cctype>
|
||||
|
||||
NumberHelper::NumberHelper() {};
|
||||
NumberHelper::~NumberHelper() {};
|
||||
|
||||
std::vector<int> NumberHelper::GetNumbers(std::string csv){
|
||||
std::vector<int> rolls;
|
||||
std::stringstream ss(csv);
|
||||
std::string number;
|
||||
vector<int> NumberHelper::getRolls(string csv){
|
||||
vector<int> rolls;
|
||||
stringstream ss(csv);
|
||||
string number;
|
||||
|
||||
while (std::getline(ss, number, ',')) {
|
||||
rolls.push_back(std::stoi(number));
|
||||
// Get number from the CSV file, split by comma, and convert to int.
|
||||
while (getline(ss, number, ',')) {
|
||||
if (!isNumber(number)) {
|
||||
cerr << number << " is not a number.";
|
||||
break;
|
||||
}
|
||||
|
||||
rolls.push_back(stoi(number));
|
||||
}
|
||||
|
||||
return rolls;
|
||||
}
|
||||
|
||||
bool NumberHelper::validateRolls(vector<int> rolls){
|
||||
int rollCount = rolls.size();
|
||||
|
||||
for(int i = 0; i < rollCount; ++i) {
|
||||
if(rolls[i] > 10 || rolls[i] < 0) {
|
||||
cerr << "Number: " << rolls[i] << " is invalid.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// A game can not have less than 12 rolls, and more than 21.
|
||||
if (rollCount < 12 || rollCount > 21) {
|
||||
cerr << "Incorrect amount of rolls.";
|
||||
return false;
|
||||
}
|
||||
|
||||
// 10th frame rule.
|
||||
if (rollCount == 21) {
|
||||
if (rolls[18] != 10 && rolls[18] + rolls[19] != 10) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
vector<Frame> NumberHelper::createFrames(vector<int> rolls){
|
||||
vector<Frame> frame;
|
||||
|
||||
int roll = 0;
|
||||
|
||||
while (roll != rolls.size())
|
||||
{
|
||||
// Strike
|
||||
if (rolls[roll] == 10)
|
||||
{
|
||||
// If we're on our last frame, and roll a strike, we're given two bonus rolls.
|
||||
if (roll + 3 == rolls.size() && rolls[roll - 3] == 10) {
|
||||
frame.push_back(createBonusFrame(rolls[roll], rolls[roll + 1], rolls[roll + 2]));
|
||||
break;
|
||||
}
|
||||
|
||||
frame.push_back(createStrikeFrame(10));
|
||||
|
||||
roll += 1;
|
||||
}
|
||||
|
||||
// Spare
|
||||
else if (rolls[roll] + rolls[roll + 1] == 10)
|
||||
{
|
||||
// If we're on our last frame, and roll a spare, we're given a bonus roll.
|
||||
if (roll + 3 == rolls.size() && rolls[roll] + rolls[roll + 1] == 10)
|
||||
{
|
||||
frame.push_back(createBonusFrame(rolls[roll], rolls[roll + 1], rolls[roll + 2]));
|
||||
break;
|
||||
}
|
||||
|
||||
frame.push_back(createFreeFrame(rolls[roll], rolls[roll + 1]));
|
||||
|
||||
roll += 2;
|
||||
}
|
||||
|
||||
// Open Frame
|
||||
else
|
||||
{
|
||||
frame.push_back(createFreeFrame(rolls[roll], rolls[roll + 1]));
|
||||
|
||||
roll += 2;
|
||||
}
|
||||
}
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
Frame NumberHelper::createStrikeFrame(int i){
|
||||
struct Frame frame = Frame();
|
||||
|
||||
vector<int> rolls;
|
||||
|
||||
rolls.push_back(i);
|
||||
|
||||
frame.Roll = rolls;
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
Frame NumberHelper::createFreeFrame(int i, int j){
|
||||
struct Frame frame = Frame();
|
||||
|
||||
vector<int> rolls;
|
||||
|
||||
rolls.push_back(i);
|
||||
rolls.push_back(j);
|
||||
|
||||
frame.Roll = rolls;
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
Frame NumberHelper::createBonusFrame(int i, int j, int k){
|
||||
struct Frame frame = Frame();
|
||||
|
||||
vector<int> rolls;
|
||||
|
||||
rolls.push_back(i);
|
||||
rolls.push_back(j);
|
||||
rolls.push_back(k);
|
||||
|
||||
frame.Roll = rolls;
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
bool NumberHelper::isNumber(const std::string& str){
|
||||
for (size_t i = 0; i < str.size(); ++i) {
|
||||
if (!isdigit(str[i]) && !isspace(str[i])) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
+113
-91
@@ -1,116 +1,138 @@
|
||||
#include "../Include/PrintFrames.h"
|
||||
#include "../include/PrintFrames.h"
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
PrintFrames::PrintFrames() {};
|
||||
PrintFrames::~PrintFrames() {};
|
||||
|
||||
void PrintFrames::PrintHeader(vector<int> rolls){
|
||||
int frame = 0;
|
||||
int i = 1;
|
||||
|
||||
while (true) {
|
||||
cout << "|";
|
||||
|
||||
// Strike
|
||||
if (rolls[frame] == 10) {
|
||||
// If we're on our last frame, and roll a 10.
|
||||
if (frame + 3 == rolls.size() && rolls[frame - 3] == 10) {
|
||||
cout << " f" << i << " |" << endl;
|
||||
break;
|
||||
}
|
||||
|
||||
cout << " f" << i << " ";
|
||||
frame += 1;
|
||||
}
|
||||
|
||||
// Spare
|
||||
else if (rolls[frame] + rolls[frame + 1] == 10) {
|
||||
if (frame + 3 == rolls.size() && rolls[frame] + rolls[frame + 1] == 10)
|
||||
{
|
||||
cout << " f" << i << " |" << endl;
|
||||
break;
|
||||
}
|
||||
|
||||
cout << " f" << i << " ";
|
||||
frame += 2;
|
||||
}
|
||||
|
||||
// Open Frame
|
||||
else {
|
||||
cout << " f" << i << " ";
|
||||
frame += 2;
|
||||
}
|
||||
|
||||
++i;
|
||||
|
||||
if (frame == rolls.size()) {
|
||||
cout << "|" << endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
void PrintFrames::printHeader() {
|
||||
cout << "| f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10 |" << endl;
|
||||
}
|
||||
|
||||
void PrintFrames::PrintValue(vector<int> rolls){
|
||||
int frame = 0;
|
||||
void PrintFrames::printValue(string value) {
|
||||
cout << value;
|
||||
}
|
||||
|
||||
string PrintFrames::parseValue(vector<Frame> frames) {
|
||||
stringstream ss;
|
||||
|
||||
while (true) {
|
||||
cout << "|";
|
||||
|
||||
// There can only be 10 frames.
|
||||
for (int i = 0; i < 10; i++) {
|
||||
ss << "|";
|
||||
// Strike
|
||||
if (rolls[frame] == 10) {
|
||||
// If we're on our last frame, and roll a 10.
|
||||
if (frame + 3 == rolls.size() && rolls[frame - 3] == 10) {
|
||||
if (rolls[frame + 1] == 10 && rolls[frame + 2] == 10) {
|
||||
cout << "X, X, X|" << endl;
|
||||
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 (rolls[frame + 1] == 0 && rolls[frame + 2] == 0) {
|
||||
cout << "X, -, -|" << endl;
|
||||
else if (frames[i].Roll[1] != 10 && frames[i].Roll[2] == 10) {
|
||||
ss << frames[i].Roll[1] << ", X ";
|
||||
}
|
||||
else if (rolls[frame + 1] == 0) {
|
||||
cout << "X, -, " << rolls[frame + 2] << "|" << endl;
|
||||
}
|
||||
else if (rolls[frame + 2] == 0) {
|
||||
cout << "X, " << rolls[frame + 1] << ", -|" << endl;
|
||||
}
|
||||
else {
|
||||
cout << "X, " << rolls[frame + 1] << ", " << rolls[frame + 2] << "|" << endl;
|
||||
else if (frames[i].Roll[1] == 10 && frames[i].Roll[2] != 10) {
|
||||
ss << "X, " << frames[i].Roll[2] << " ";
|
||||
}
|
||||
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
cout << "X ";
|
||||
frame += 1;
|
||||
// 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
|
||||
else if (rolls[frame] + rolls[frame + 1] == 10) {
|
||||
if (frame + 3 == rolls.size() && rolls[frame] + rolls[frame + 1] == 10)
|
||||
{
|
||||
cout << rolls[frame] << ", /" << ", " << rolls[frame + 1] << "|" << endl;
|
||||
break;
|
||||
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] << ", / ";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
cout << rolls[frame] << ", /";
|
||||
frame += 2;
|
||||
ss << frames[i].Roll[0] << ", /";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Open Frame
|
||||
else {
|
||||
if (rolls[frame] == 0) {
|
||||
cout << "-" << ", " << rolls[frame + 1];
|
||||
// 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 (rolls[frame + 1] == 0) {
|
||||
cout << rolls[frame] << ", -";
|
||||
else if (frames[i].Roll[0] == 0 && frames[i].Roll[1] != 0) {
|
||||
ss << "-, " << frames[i].Roll[1];
|
||||
}
|
||||
|
||||
cout << "" << rolls[frame] << ", " << rolls[frame + 1];
|
||||
frame += 2;
|
||||
}
|
||||
|
||||
if (frame == rolls.size()) {
|
||||
cout << " |" << endl;
|
||||
break;
|
||||
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();
|
||||
}
|
||||
+24
-28
@@ -1,46 +1,42 @@
|
||||
#include "../Include/ScoreCalculator.h"
|
||||
#include "../include/ScoreCalculator.h"
|
||||
#include "../include/Frame.h"
|
||||
|
||||
ScoreCalculator::ScoreCalculator() {};
|
||||
ScoreCalculator::~ScoreCalculator() {};
|
||||
|
||||
int ScoreCalculator::GetScore(vector<int> rolls) {
|
||||
int ScoreCalculator::getScore(vector<Frame> frames) {
|
||||
int score = 0;
|
||||
int frame = 0;
|
||||
|
||||
while (true) {
|
||||
// There can only be 10 frames.
|
||||
for (int i = 0; i < 10; i++) {
|
||||
// Strike
|
||||
if (rolls[frame] == 10) {
|
||||
// If we're on our last frame, and roll a 10.
|
||||
if (frame + 3 == rolls.size() && rolls[frame - 3] == 10) {
|
||||
score += 10 + rolls[frame + 1] + rolls[frame + 2];
|
||||
break;
|
||||
if (frames[i].Roll[0] == 10) {
|
||||
if (frames[i].Roll.size() == 3) {
|
||||
score += frames[i].Roll[0] + frames[i].Roll[1] + frames[i].Roll[2];
|
||||
continue;
|
||||
}
|
||||
|
||||
score += 10 + rolls[frame + 1] + rolls[frame + 2];
|
||||
frame += 1;
|
||||
// If the next frame has 3 or 2 rolls, then take those 2.
|
||||
if (frames[i + 1].Roll.size() > 1) {
|
||||
score += frames[i].Roll[0] + frames[i + 1].Roll[0] + frames[i + 1].Roll[1];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Both next frames, that are not the last, are 10.
|
||||
score += frames[i].Roll[0] + frames[i + 1].Roll[0] + frames[i + 2].Roll[0];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Spare
|
||||
if (rolls[frame] + rolls[frame + 1] == 10) {
|
||||
if (frame + 3 == rolls.size() && rolls[frame] + rolls[frame + 1] == 10)
|
||||
{
|
||||
score += 10 + rolls[frame + 1];
|
||||
break;
|
||||
if (frames[i].Roll[0] + frames[i].Roll[1] == 10) {
|
||||
if (frames[i].Roll.size() == 3) {
|
||||
score += frames[i].Roll[0] + frames[i].Roll[1] + frames[i].Roll[2];
|
||||
continue;
|
||||
}
|
||||
|
||||
score += 10 + rolls[frame + 2];
|
||||
frame += 2;
|
||||
score += 10 + frames[i + 1].Roll[0];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Open Frame
|
||||
score += rolls[frame] + rolls[frame + 1];
|
||||
frame += 2;
|
||||
|
||||
if (frame == rolls.size()) {
|
||||
break;
|
||||
}
|
||||
// Open frame
|
||||
score += frames[i].Roll[0] + frames[i].Roll[1];
|
||||
}
|
||||
|
||||
return score;
|
||||
|
||||
+18
-11
@@ -1,10 +1,9 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "../Include/FileReader.h"
|
||||
#include "../Include/FileHelper.h"
|
||||
#include "../Include/NumberHelper.h"
|
||||
#include "../Include/ScoreCalculator.h"
|
||||
#include "../Include/PrintFrames.h"
|
||||
#include "../include/FileUtil.h"
|
||||
#include "../include/NumberHelper.h"
|
||||
#include "../include/ScoreCalculator.h"
|
||||
#include "../include/PrintFrames.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -14,18 +13,26 @@ int main(int argc, char *argv[]) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!FileHelper::FileExists(argv[1])) {
|
||||
if (!FileUtil::fileExists(argv[1])) {
|
||||
cerr << "Filepath: " << argv[1] << " doesn't exist.";
|
||||
return 0;
|
||||
}
|
||||
|
||||
string file = FileReader::GetFile(argv[1]);
|
||||
vector<int> rolls = NumberHelper::GetNumbers(file);
|
||||
string file = FileUtil::getFile(argv[1]);
|
||||
vector<int> rolls = NumberHelper::getRolls(file);
|
||||
|
||||
PrintFrames::PrintHeader(rolls);
|
||||
PrintFrames::PrintValue(rolls);
|
||||
if (!NumberHelper::validateRolls(rolls)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int score = ScoreCalculator::GetScore(rolls);
|
||||
vector<Frame> frames = NumberHelper::createFrames(rolls);
|
||||
|
||||
string values = PrintFrames::parseValue(frames);
|
||||
|
||||
PrintFrames::printHeader();
|
||||
PrintFrames::printValue(values);
|
||||
|
||||
int score = ScoreCalculator::getScore(frames);
|
||||
cout << "Score: " << score << endl;
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user