diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000000000000000000000000000000..1bb985af261f0ae787b9d2ef961789a089e44b53 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,34 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "g++ - Build and debug active file", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}/${fileBasenameNoExtension}", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ], + "preLaunchTask": "C/C++: g++ build active file", + "miDebuggerPath": "/usr/bin/gdb" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000000000000000000000000000000000..05054c5cd812079b58e2374f06a334dd79d53898 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++ build active file", + "command": "/usr/bin/g++", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/5_praktikum/gameboard.cpp b/5_praktikum/gameboard.cpp index be65b15b9dc20ad3ecaaa6beb4dde7fd95b62546..bf5d431853fb4388a6b4a2f112180c4ffe37d10f 100644 --- a/5_praktikum/gameboard.cpp +++ b/5_praktikum/gameboard.cpp @@ -2,22 +2,29 @@ #include <iostream> #include <iomanip> #include <random> +#include "ship.h" using namespace std; using std::array; -GameBoard::GameBoard(){ - for(int i=0; i<10;i++){ - for(int j=0; j<10;j++) - m_enemyBoard[i][j]='.'; +GameBoard::GameBoard() +{ + for (int i = 0; i < 10; i++) + { + for (int j = 0; j < 10; j++) + m_enemyBoard[i][j] = '.'; } } void GameBoard::printBoard() { - -for (int jt= 0; jt<= m_enemyBoard.size(); jt++){ - - + for (int it = 0; it < 10; it++) + { + for (int kt = 0; kt < 10; kt++) + { + + } + } } - +void GameBoard::printEnemyBoard() +{ for (int it = 0; it < 10; it++) { for (int kt = 0; kt < 10; kt++) @@ -33,184 +40,25 @@ for (int jt= 0; jt<= m_enemyBoard.size(); jt++){ } } cout << "\n\n"; - } -void GameBoard::randomPlaceShips(){ -random_device rnd_device; -mt19937 mersenne_engine{ rnd_device() }; -uniform_int_distribution<int> dist{ 0, 9 }; -uniform_int_distribution<int> dist2{ 0, 3 }; - auto gen = [&dist, &mersenne_engine]() { +void GameBoard::randomPlaceShips() +{ + random_device rnd_device; + mt19937 mersenne_engine{rnd_device()}; + uniform_int_distribution<int> dist{0, 9}; + uniform_int_distribution<int> dist2{0, 3}; + auto gen = [&dist, &mersenne_engine]() + { return dist(mersenne_engine); }; - auto gen2 = [&dist2, &mersenne_engine]() { + auto gen2 = [&dist2, &mersenne_engine]() + { return dist2(mersenne_engine); }; -int finalx; -int finaly; -Direction finaldir; - -//Dreadnought -while(true){ -int x=gen(); -int y=gen(); -int direction=gen2(); -Direction dir; -if(direction==0) dir=Direction::north; else if(direction==1)dir=Direction::east; else if(direction==2) dir=Direction::south; else if(direction==3) dir=Direction::west; -if(dir==Direction::north && y-4 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y-1]=='.' && m_enemyBoard[x][y-2]=='.' && m_enemyBoard[x][y-3]=='.' && m_enemyBoard[x][y-4]=='.'){ m_ships[0] = Ship(x,y,5,Direction::north); break; finalx=x;finaly=y; finaldir=dir;} -if(dir==Direction::west && x-4 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x-1][y] == '.' && m_enemyBoard[x-2][y] == '.' && m_enemyBoard[x-3][y] == '.' && m_enemyBoard[x-4][y] == '.'){ m_ships[0] = Ship(x,y,5,Direction::west); break; finalx=x;finaly=y; finaldir=dir;} -if(dir==Direction::east && x+4 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x+1][y] == '.' && m_enemyBoard[x+2][y] == '.' && m_enemyBoard[x+3][y] == '.' && m_enemyBoard[x+4][y] == '.'){ m_ships[0] = Ship(x,y,5,Direction::east); break; finalx=x;finaly=y; finaldir=dir;} -if(dir==Direction::south && y+4 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y+1] == '.' && m_enemyBoard[x][y+2] == '.' && m_enemyBoard[x][y+3] == '.' && m_enemyBoard[x][y+4] == '.'){ m_ships[0] = Ship(x,y,5,Direction::south); break; finalx=x;finaly=y; finaldir=dir;} -} -for(int i=0; i<5; i++){ - m_enemyBoard[finalx][finaly]= '1'; - if(finaldir==Direction::north) finaly--; - if(finaldir==Direction::south) finaly++; - if(finaldir==Direction::east) finalx++; - if(finaldir==Direction::west) finalx--; -} - -//Cruisers -for(int i=2; i<=3;i++){ - while(true){ - int x=gen(); - int y=gen(); - int direction=gen2(); - Direction dir; -if(direction==0) dir=Direction::north; else if(direction==1)dir=Direction::east; else if(direction==2) dir=Direction::south; else if(direction==3) dir=Direction::west; -if(dir==Direction::north && y-3 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y-1]=='.' && m_enemyBoard[x][y-2]=='.' && m_enemyBoard[x][y-3]=='.'){ m_ships[i] = Ship(x,y,4,Direction::north); -for(int j=0; j<4; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break; -if(dir==Direction::west && x-3 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x-1][y] == '.' && m_enemyBoard[x-2][y] == '.' && m_enemyBoard[x-3][y] == '.'){ m_ships[i] = Ship(x,y,4,Direction::west); -for(int j=0; j<4; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::east && x+3 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x+1][y] == '.' && m_enemyBoard[x+2][y] == '.' && m_enemyBoard[x+3][y] == '.'){ m_ships[i] = Ship(x,y,4,Direction::east); -for(int j=0; j<4; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::south && y+3 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y+1] == '.' && m_enemyBoard[x][y+2] == '.' && m_enemyBoard[x][y+3] == '.' ){ m_ships[i] = Ship(x,y,4,Direction::south); -for(int j=0; j<4; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} - } - } - } - - //Destroyers -for(int i=4; i<=6;i++){ - while(true){ - int x=gen(); - int y=gen(); - int direction=gen2(); - Direction dir; -if(direction==0) dir=Direction::north; else if(direction==1)dir=Direction::east; else if(direction==2) dir=Direction::south; else if(direction==3) dir=Direction::west; -if(dir==Direction::north && y-2 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y-1]=='.' && m_enemyBoard[x][y-2]=='.'){ m_ships[i] = Ship(x,y,3,Direction::north); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break; -if(dir==Direction::west && x-2 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x-1][y] == '.' && m_enemyBoard[x-2][y] == '.'){ m_ships[i] = Ship(x,y,3,Direction::west); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::east && x+2 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x+1][y] == '.' && m_enemyBoard[x+2][y] == '.'){ m_ships[i] = Ship(x,y,3,Direction::east); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::south && y+2 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y+1] == '.' && m_enemyBoard[x][y+2] == '.'){ m_ships[i] = Ship(x,y,3,Direction::south); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} - } - } - } - //Submarines -for(int i=7; i<=10;i++){ - while(true){ - int x=gen(); - int y=gen(); - int direction=gen2(); - Direction dir; -if(direction==0) dir=Direction::north; else if(direction==1)dir=Direction::east; else if(direction==2) dir=Direction::south; else if(direction==3) dir=Direction::west; -if(dir==Direction::north && y-1 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y-1]=='.'){ m_ships[i] = Ship(x,y,2,Direction::north); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break; -if(dir==Direction::west && x-1 >=0 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x-1][y] == '.'){ m_ships[i] = Ship(x,y,2,Direction::west); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::east && x+1 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x+1][y] == '.'){ m_ships[i] = Ship(x,y,2,Direction::east); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} -if(dir==Direction::south && y+1 <=9 && m_enemyBoard[x][y] == '.' && m_enemyBoard[x][y+1] == '.'){ m_ships[i] = Ship(x,y,2,Direction::south); -for(int j=0; j<3; j++){ - m_enemyBoard[x][y]= (char)i; - if(dir==Direction::north) y--; - if(dir==Direction::south) y++; - if(dir==Direction::east) x++; - if(dir==Direction::west) x--; - } - break;} - } - } - } - -} \ No newline at end of file + + + + + + } + diff --git a/5_praktikum/main b/5_praktikum/main new file mode 100755 index 0000000000000000000000000000000000000000..48be1dadf531697d46a260a3ea050729e203e187 Binary files /dev/null and b/5_praktikum/main differ diff --git a/5_praktikum/part.cpp b/5_praktikum/part.cpp index dfb2b24ec2f8f67dbae4d3cf088ae35d96702b29..69ad58556a5d5773b08f70d46e002438a9a3127e 100644 --- a/5_praktikum/part.cpp +++ b/5_praktikum/part.cpp @@ -1 +1,21 @@ #include "part.h" +bool Part::isDamaged() const{ + return m_status; +} + + void Part::setDamaged(){ + m_status=1; + } + + + int Part::getRow() const{ + return m_row; + } + + + int Part::getCol() const{ + return m_col; + } + Part::Part(int row, int col):m_row(row),m_col(col),m_status(0){ + + } \ No newline at end of file diff --git a/5_praktikum/player.cpp b/5_praktikum/player.cpp index 157e94497b21287bc3562aa4431fcdd9fe31d98e..c64f8e4a66f9af348b63e6eae4152e2b3fad677a 100644 --- a/5_praktikum/player.cpp +++ b/5_praktikum/player.cpp @@ -1 +1,34 @@ #include "player.h" +Player::Player(const string &playerName) : m_playerName(playerName) +{ +} + +int Player::getGamesWon() const +{ + return m_gamesWon; +} + +int Player::getGamesLost() const +{ + return m_gamesLost; +} + +int Player::getGamesPlayed() const +{ + return m_gamesPlayed; +} + +void Player::addGameWon() +{ + m_gamesWon++; +} + +void Player::addGameLost() +{ + m_gamesLost++; +} + +string Player::getName() +{ + return m_playerName; +} \ No newline at end of file diff --git a/5_praktikum/player.h b/5_praktikum/player.h index b822d27dbc4393be9bbb34ada56e5d0dda3a27bd..19f2c7b81dda3f4b6d8e5e56444b9bc4e6e923eb 100644 --- a/5_praktikum/player.h +++ b/5_praktikum/player.h @@ -80,6 +80,7 @@ class Player string getName(); private: + int m_gamesPlayed; /** * @brief Number of games won. */ diff --git a/5_praktikum/ship.cpp b/5_praktikum/ship.cpp index 58e3860568275eef9a09b7ae98e1ef69098177a8..ee759c4cf01419d1f508b3b3afb9961e84db059e 100644 --- a/5_praktikum/ship.cpp +++ b/5_praktikum/ship.cpp @@ -1,4 +1,5 @@ #include "ship.h" +#include "part.h" #include <stdexcept> bool Ship::hasPartIn(int row, int col) @@ -41,4 +42,48 @@ bool Ship::isSunk() return false; } return true; -} \ No newline at end of file +} +Ship::Ship() +{ +} +Ship::Ship(int row, int col, int lengthOfShip, Direction direction) +{ + if (col > 9 || col < 0 || row > 9 || row < 0) + throw std::invalid_argument("Part exceeds Gameboard Range!"); + if (direction == Direction::north && row - lengthOfShip >= 0) + { + for (int i = 0; i < lengthOfShip - 1; i++) + { + + m_parts.push_back(Part(row, col)); + row--; + } + } + if (direction == Direction::south && row + lengthOfShip <= 9) + { + for (int i = 0; i < lengthOfShip - 1; i++) + { + + m_parts.push_back(Part(row, col)); + row++; + } + } + if (direction == Direction::east && col + lengthOfShip <= 9) + { + for (int i = 0; i < lengthOfShip - 1; i++) + { + + m_parts.push_back(Part(row, col)); + col++; + } + } + if (direction == Direction::west && col - lengthOfShip >= 0) + { + for (int i = 0; i < lengthOfShip - 1; i++) + { + + m_parts.push_back(Part(row, col)); + col--; + } + } +}