diff --git a/README.md b/README.md index afe2a8d..b5c24f1 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,57 @@ # c/c++ Abschlussprojekt - Schach ## Notwendige Umsetzungen + 1. Klasse für Spielbrett 2. Oberklasse für Spielfiguren - 1. Bauer - 2. Dame - 3. König - 4. Läufer - 5. Turm - 6. Springer + 1. Bauer + 2. Dame + 3. König + 4. Läufer + 5. Turm + 6. Springer 3. Fancy User Interface +4. Speicherung des Spielbretts ### Spielbrett + - 8x8 Matrix - ANSI Linien checken - Unterscheidung von schwarzen und weißen Feldern - UTF-8 Spielfiguren - draw() Funktion -- movement - - Schachnotation - - oder Klickbar? +- movement + - Schachnotation + - oder Klickbar? - Beschriftung des Spielbretts ### Spielfiguren + - Interface für Implementierung? - Default Felder: - - Art der Figure - - UTF-8 Code - - Schlagen: Ich sehe dich nach movement Regeln -> Du stirbst + - Art der Figure + - UTF-8 Code + - Schlagen: Ich sehe dich nach movement Regeln -> Du stirbst - Bauer: - - Movement: 1 Felder, außer bei Start 1-2 Felder - - Schlagen: 1 Feld vor Diagonal - - Spezialmove: - - Beförderung - - En Passent - Wie? + - Movement: 1 Felder, außer bei Start 1-2 Felder + - Schlagen: 1 Feld vor Diagonal + - Spezialmove: + - Beförderung + - En Passent - Wie? - Dame: - - Movement: Fuck it, i do what i want + - Movement: Fuck it, i do what i want - König: - - Movement: Körperklaus. Ich kann nur ein Feld nach überall - - Spezialmove: Castlen + - Movement: Körperklaus. Ich kann nur ein Feld nach überall + - Spezialmove: Castlen - Läufer: - - Movement: Die Diagnal ist mir + - Movement: Die Diagnal ist mir - Turm: - - Movement: Vertikal und Horizontal + - Movement: Vertikal und Horizontal - Springer: - - Movement: L-Bewegung (2 nach vorn + 1 nach links oder rechts); Krake + - Movement: L-Bewegung (2 nach vorn + 1 nach links oder rechts); Krake ## Optional wenn Lust und Zeit? + 1. Bedienung per Maus 2. Multiplayer +3. Historie der Spielzüge diff --git a/main.cpp b/main.cpp index 8be4621..750cf11 100644 --- a/main.cpp +++ b/main.cpp @@ -4,12 +4,168 @@ #include #include #include +#include int main() { + SetConsoleOutputCP(CP_UTF8); + + // Zeichen für die Rahmen und das Schachbrett + const std::string topLeft = "┌", topRight = "┐", bottomLeft = "└", bottomRight = "┘"; + const std::string horizontal = "─", vertical = "│"; + const std::string topIntersection = "┬", bottomIntersection = "┴", middleIntersection = "┼"; + + const std::string whiteSquare = "□"; // Weißes Feld + const std::string blackSquare = "■"; // Schwarzes Feld + + const int boardSize = 8; // Schachbrettgröße + + // Obere Rahmenlinie + std::cout << topLeft; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << topIntersection; + } + std::cout << topRight << "\n"; + + // Schachbrett mit vertikalen Linien + for (int row = 0; row < boardSize; ++row) { + for (int subRow = 0; subRow < 1; ++subRow) { + std::cout << vertical; + for (int col = 0; col < boardSize; ++col) { + if ((row + col) % 2 == 0) { + std::cout << " " << whiteSquare << " "; + } + else { + std::cout << " " << blackSquare << " "; + } + std::cout << vertical; + } + std::cout << "\n"; + } + + // Horizontale Trennlinie (außer nach der letzten Zeile) + if (row < boardSize - 1) { + std::cout << vertical; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << middleIntersection; + } + std::cout << vertical << "\n"; + } + } + + // Untere Rahmenlinie + std::cout << bottomLeft; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << bottomIntersection; + } + std::cout << bottomRight << "\n"; + + return 0; +} + +/*int main() { //std::setlocale(LC_ALL, ""); SetConsoleOutputCP(CP_UTF8); + const std::string white = "\u25A1"; + const std::string whiteKing = "\u2654"; + const std::string whiteQueen = "\u2655"; + const std::string whiteRook = "\u2656"; + const std::string whiteBischop = "\u2657"; + const std::string whiteKnight = "\u2658"; + const std::string whitePawn = "\u2659"; + + const std::string black = "\u2B1B"; + const std::string blackKing = "\u265A"; + const std::string blackQueen = "\u265B"; + const std::string blackRook = "\u265C"; + const std::string blackBischop = "\u265D"; + const std::string blackKnight = "\u265E"; + const std::string blackPawn = "\u265F"; + + int brett[8][8] = { + {201, 202, 203, 204, 205, 203, 202, 201}, + {200, 200, 200, 200, 200, 200, 200, 200}, + {1, 2, 1, 2, 1, 2, 1, 2}, + {2, 1, 2, 1, 2, 1, 2, 1}, + {1, 2, 1, 2, 1, 2, 1, 2}, + {2, 1, 2, 1, 2, 1, 2, 1}, + {100, 100, 100, 100, 100, 100, 100, 100}, + {101, 102, 103, 104, 105, 103, 102, 101} + }; + + + std::string field; + for (auto& row : brett) { + for (int col : row) { + switch (col) { + case 1: field += white; + break; + case 101: field += whiteRook; + break; + case 102: field += whiteKnight; + break; + case 103: field += whiteBischop; + break; + case 104: field += whiteQueen; + break; + case 105: field += whiteKing; + break; + case 100: field += whitePawn; + break; + case 2: field += black; + break; + case 201: field += blackRook; + break; + case 202: field += blackKnight; + break; + case 203: field += blackBischop; + break; + case 204: field += blackQueen; + break; + case 205: field += blackKing; + break; + case 200: field += blackPawn; + break; + default: break; + } + } + field += "\n"; + } + + std::cout << field << std::endl; + + //std::wcout << L"\u2500" << std::endl; + //std::cout << field << std::endl; + return 0; +}*/ + + +void firstVersion() { + const std::string white = "\u2B1C"; + const std::string black = "\u2B1B"; + + std::string brett[8][8]; + + std::string field; + for (int y = 0; y < 8; y++) { + for (int x = 0; x < 8; x++) { + if (y % 2 == 0) { + field = (x % 2 == 0) ? "\u2B1C" : "\u2B1B"; + } + else { + field = (x % 2 == 0) ? "⬛" : "⬜"; + } + std::cout << field; + } + std::cout << "\n"; + } +} + +void secondVersion() { //wchar_t t = 0x25FF; // Horizontale Linie u2500 @@ -21,9 +177,9 @@ int main() { std::string topRightCorner = "\u2554"; std::string topLeftCorner = "\u2557"; - std::string bottomRightCorner = "\u255A"; - std::string bottomLeftCorner = "\u255D"; - std::string horizontalLine = "\u2550"; + std::string bottomLeftCorner = "\u255A"; + std::string bottomRightCorner = "\u255D"; + std::string horizontalLine = "\u2550\u2550"; std::string verticalLine = "\u2551"; std::string crossSuc = "\u256C"; std::string leftSide = "\u2560"; @@ -34,38 +190,19 @@ int main() { std::string firstLine = "\u2554\u2550\u2566"; std::string line; - for (int row = 0; row < 8; ++row) { + for (int row = 0; row < 9; ++row) { for (int col = 0; col < 8; ++col) { - if (row == 0 && col > 0) line += horizontalLine + topSide; - if (row == 7 && col > 0) line += horizontalLine + bottomSide; - if (col == 0 && row < 7 && row > 0) line += leftSide; - if (col == 7 && row < 7 && row > 0) line += horizontalLine + rightSide; - if ((row > 0 && row < 7) && (col > 0 && col < 7)) line += horizontalLine + crossSuc; - if (row == 0 && col == 0) line += topRightCorner + horizontalLine + topSide; - if (row == 7 && col == 0) line += "\u255A\u2550\u2569"; - if (row == 0 && col == 7) line += "\u2550\u2557"; - if (row == 7 && col == 7) line += "\u2550\u255D"; + if (row == 0 && col > 0) line += topSide + horizontalLine; + if (row == 8 && col > 0) line += bottomSide + horizontalLine; + if (col == 0 && row < 8 && row > 0) line += leftSide + horizontalLine; + if (row > 0 && row < 8 && col > 0) line += crossSuc + horizontalLine; + if (col == 7 && row < 8 && row > 0) line += rightSide; + if (row == 0 && col == 0) line += topRightCorner + horizontalLine; + if (row == 8 && col == 0) line += bottomLeftCorner + horizontalLine; + if (row == 0 && col == 7) line += topLeftCorner + "\n" + verticalLine; + if (row == 8 && col == 7) line += bottomRightCorner; } line += "\n"; } - - //std::wcout << L"\u2500" << std::endl; - std::cout << line << std::endl; - return 0; } -void firstVersion() { - std::string field; - for (int y = 0; y < 8; y++) { - for (int x = 0; x < 8; x++) { - if (y % 2 == 0) { - field = (x % 2 == 0) ? "⬜" : "⬛"; - } - else { - field = (x % 2 == 0) ? "⬛" : "⬜"; - } - std::cout << field; - } - std::cout << "\n"; - } -} diff --git a/main.exe b/main.exe index 4b1171e..522827b 100644 Binary files a/main.exe and b/main.exe differ