-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gameplay.cpp
136 lines (116 loc) · 2.88 KB
/
Gameplay.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "Gameplay.h"
#include <iostream>
#include "ORDNCHS.h"
GameResult Gameplay::CheckWin(int rowIndex, int colIndex)
{
int symbol = grid[rowIndex][colIndex];
int count = 0;
int row=0, col=0;
// Проверка горизонтальных линий
count = 0;
for (col = 0; col < 6; col++)
{
if (grid[rowIndex][col] == symbol)
count++;
else
count = 0;
if (count >= 5)
return GameResult::OrderWin;
}
// Проверка вертикальных линий
count = 0;
for (row = 0; row < 6; row++)
{
if (grid[row][colIndex] == symbol)
count++;
else
count = 0;
if (count >= 5)
return GameResult::OrderWin;
}
// Проверка прямых диагоналей
count = 0;
row = rowIndex;
col = colIndex;
while (row > 0 && col > 0)
{
row--;
col--;
}
while (row < 6 && col < 6)
{
if (grid[row][col] == symbol)
count++;
else
count = 0;
if (count >= 5)
return GameResult::OrderWin;
row++;
col++;
}
// Проверка обратных диагоналей
count = 0;
row = rowIndex;
col = colIndex;
while (row > 0 && col < 5)
{
row--;
col++;
}
while (row < 6 && col >=0)
{
if (grid[row][col] == symbol)
count++;
else
count = 0;
if (count >= 5)
return GameResult::OrderWin;
row++;
col--;
}
for (row = 0; row < 6; row++)
{
for (col = 0; col < 6; col++)
{
if (IsEmpty(row, col))
return GameResult::Continue; // Есть доступный ход, игра продолжается
}
}
return GameResult::ChaosWin;
}
void Gameplay::Winner(int rowIndex, int colIndex) {
GameResult win = CheckWin(rowIndex, colIndex);
if (win == GameResult::OrderWin) {
System::Windows::Forms::MessageBox::Show("Гравець 1 (Порядок) переміг!");
NewGame();
}
else if (win == GameResult::ChaosWin) {
System::Windows::Forms::MessageBox::Show("Гравець 2 (Хаос) переміг!");
NewGame();
}
}
void Gameplay::ResetGrid()
{
for (int row = 0; row < 6; row++)
{
for (int col = 0; col < 6; col++)
{
grid[row][col] = 0;
}
}
}
bool Gameplay::IsEmpty(int rowIndex, int colIndex)
{
if (grid[rowIndex][colIndex] == 0) {
return true;
}
else{ return false; }
}
void Gameplay::NewGame()
{
isPlayer1Turn = true;
ResetGrid();
ORDNCHS^ form = dynamic_cast<ORDNCHS^>(System::Windows::Forms::Application::OpenForms[0]);
Panel^ panel1 = form->GetPanel();
panel1->Invalidate();
}