Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 09 / tic-tac-toe.cpp
diff options
context:
space:
mode:
Commit55fc7eb3bba83f4084b2f897c61d0280a5f9c097 (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2021-10-02 17:44:35 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2021-10-02 17:44:35 +0300
Files85d32a9a73f85c54162f9233f36a054ebe0de212 /Sem. 09/tic-tac-toe.cpp
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.tar
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.tar.gz
Introduction_to_programming_FMI-55fc7eb3bba83f4084b2f897c61d0280a5f9c097.zip
Parent7f51b56297270d4a1f808bc73d082b71418a2fe0 (diff)
new
1 files changed, 0 insertions, 130 deletions
-rw-r--r--Sem. 09/tic-tac-toe.cpp130
diff --git a/Sem. 09/tic-tac-toe.cpp b/Sem. 09/tic-tac-toe.cpp
deleted file mode 100644
index d0e2aaf..0000000
--- a/Sem. 09/tic-tac-toe.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <iostream>
-using namespace std;
-
-//Зад1: Да се реализира играта tic-tac-toe
-// Матрицата ще ни бъде от цели числа. Ще пазим следните стойности:
-// [] = 0 (празна клетка)
-// [x] = 1
-// [o] = -1
-const int TABLE_SIZE = 5;
-
-//Прави матрицата само от 0-ли (от празни клетки)
-void init(int table[TABLE_SIZE][TABLE_SIZE])
-{
- for (int i = 0; i < TABLE_SIZE; i++)
- {
- for (int j = 0; j < TABLE_SIZE; j++)
- {
- table[i][j] = 0;
- }
- }
-}
-
-//Дали не сме извън рамките на масива
-bool areValidCoordinates(int x, int y)
-{
- return x >= 1 && x <= TABLE_SIZE && y >= 1 && y <= TABLE_SIZE;
-}
-
-//Дали клетката е свободна. Тук вече допускаме, че x и y са валидни координати.
-bool isCellFree(int table[TABLE_SIZE][TABLE_SIZE], int x, int y)
-{
- return table[x][y] == 0;
-}
-
-//Проверяваме дали няма вече победител.
-//el - кой проверяваме дали е победител (el = 1, значи проверяваме дали имаме последователност от TABLE_SIZE 1-ци.)
-bool isWinner(int table[TABLE_SIZE][TABLE_SIZE], int el)
-{
- for (int i = 0; i < TABLE_SIZE; i++)
- {
- //Проверка за редовете
- bool isWinner = true;
- for (int j = 0; j < TABLE_SIZE; j++)
- {
- if (table[i][j] != el)
- isWinner = false;
- }
- if (isWinner)
- return true;
-
- //Проверка за колоните
- isWinner = true;
- for (int j = 0; j < TABLE_SIZE; j++)
- {
- if (table[i][j] != el)
- isWinner = false;
- }
- if (isWinner)
- return true;
- }
-
- //Проверка за главния диагонал
- bool isWinner = true;
- for (int i = 0; i < TABLE_SIZE; i++)
- {
- if (table[i][i] != el)
- isWinner = false;
- }
- if (isWinner)
- return true;
-
- //Проверка за второстепенния диагонал
- isWinner = true;
- for (int i = 0; i < TABLE_SIZE; i++)
- {
- if (table[i][TABLE_SIZE - 1 - i] != el)
- isWinner = false;
- }
- return isWinner;
-}
-void print(int table[TABLE_SIZE][TABLE_SIZE])
-{
- for (int i = 0; i < TABLE_SIZE; i++)
- {
- for (int j = 0; j < TABLE_SIZE; j++)
- {
- cout << "[";
- if (table[i][j] == -1)
- cout << "o";
- else if (table[i][j] == 0)
- cout << " ";
- else
- cout << "x";
- cout << "]";
- }
- cout << endl;
- }
- cout << endl;
-}
-int main()
-{
- int table[TABLE_SIZE][TABLE_SIZE];
- init(table);
-
- bool isFirstPlayersTurn = true;
- print(table);
- while (true)
- {
- cout << "It's player " << (isFirstPlayersTurn ? 1 : 2) << "\'s turn!"<<endl;
- int x, y;
- do
- {
- cin >> x >> y;
- } while (!areValidCoordinates(x, y) || !isCellFree(table, x-1,y-1));
- // Първо проверяваме дали x и y са валидни индекси и САМО АКО СА, проверяваме дали клетката е свободна.
- // Възползваме се, че при A || B, ако A е истина, не проверява стойността на B.
-
- int currentSymbol = isFirstPlayersTurn ? 1 : -1;
- table[x - 1][y - 1] = currentSymbol;
-
- system("CLS"); //Изчиства всичко от конзолата. Работи само на Visual Studio.
- print(table);
- if (isWinner(table,currentSymbol))
- {
- cout << "End game!";
- break;
- }
- isFirstPlayersTurn = !isFirstPlayersTurn;
- }
-}