-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkl.c
114 lines (105 loc) · 2.89 KB
/
kl.c
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
#include <stdio.h>
#include <stdlib.h>
#define SPACE ' '
char matrix[3][3] = {/* матрица для крестиков-ноликов */
{SPACE, SPACE, SPACE},
{SPACE, SPACE, SPACE},
{SPACE, SPACE, SPACE}};
void get_computer_move(void), get_player_move(void);
void disp_matrix(void);
char check(void);
int main()
{
char done;
printf("You will be playing against the computer.\n");
done = SPACE;
do
{
disp_matrix(); /* вывод игровой доски */
get_player_move(); /* ходит игрок */
done = check(); /* проверка на победу */
if (done != SPACE)
break; /* победитель */
disp_matrix();
printf("\n");
get_computer_move(); /* ходит компьютер */
done = check(); /* проверка на победу */
} while (done == SPACE);
if (done == 'X')
printf("You won!\n");
else
printf("I won!!!!\n");
disp_matrix(); /* отображение результирующего положения */
return 0;
}
/* ввод хода игрока */
void get_player_move(void)
{
int x, y;
printf("Enter coordinates for your X.\n");
printf("Row? ");
scanf("%d", &x);
printf("Column? ");
scanf("%d", &y);
x--;
y--;
if (x < 0 || y < 0 || x > 2 || y > 2 || matrix[x][y] != SPACE)
{
printf("Invalid move, try again.\n");
get_player_move();
}
else
matrix[x][y] = 'X';
}
/* ход компьютера */
void get_computer_move(void)
{
register int t;
char *p;
p = (char *)matrix;
for (t = 0; *p != SPACE && t < 9; ++t)
p++;
if (t == 9)
{
printf("draw\n");
exit(0); /* game over */
}
else
*p = 'O';
}//TODO: Сделать логику компьютеру
/* отображение игровой доски */
void disp_matrix(void)
{
int t;
for (t = 0; t < 3; t++)
{
printf(" %c | %c | %c", matrix[t][0], matrix[t][1], matrix[t][2]);
if (t != 2)
printf("\n---|---|---\n");
}
printf("\n");
}
/* проверка на победу */
char check(void)
{
int t;
char *p;
for (t = 0; t < 3; t++)
{ /* проверка строк */
p = &matrix[t][0];
if (*p == *(p + 1) && *(p + 1) == *(p + 2))
return *p;
}
for (t = 0; t < 3; t++)
{ /* проверка столбцов */
p = &matrix[0][t];
if (*p == *(p + 3) && *(p + 3) == *(p + 6))
return *p;
}
/* проверка диагоналей */
if (matrix[0][0] == matrix[1][1] && matrix[1][1] == matrix[2][2])
return matrix[0][0];
if (matrix[0][2] == matrix[1][1] && matrix[1][1] == matrix[2][0])
return matrix[0][2];
return SPACE;
}