forked from Minor-lazer/Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame using c
More file actions
126 lines (96 loc) · 1.96 KB
/
game using c
File metadata and controls
126 lines (96 loc) · 1.96 KB
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
#include<stdio.h>
#include<stdlib.h>
char** T();
void print(char** A);
int draw(char** A);
char move(char** A, int i, int j);
int main() {
char** A = T();
char winner = '\0';
char row;
char col;
char turn = 'X';
while(!winner && !draw(A)) {
print(A);
printf("Player %c, It’s your turn: ", turn);
fflush(stdout);
scanf(" %c %c", &row, &col);
int rowind = row - 'A';
int colind = col - '1';
if (A[rowind][colind] == ' ') {
A[rowind][colind] = turn;
if (turn == 'X') {
turn = 'O';
} else {
turn = 'X';
}
winner = move(A, rowind, colind);
} else {
printf("already filled ; try again.\n");
}
}
print(A);
if (winner == 'X' || winner == 'O') {
printf("%c you are the winner!\n", winner);
} else {
printf("Game ends in a draw.\n");
}
return 0;
}
char** T() {
char** B = calloc(3, sizeof(char*));
for(int i = 0; i < 3; ++i) {
B[i] = calloc(3, sizeof(char));
}
for(int j=0; j < 3; ++j) {
for(int k=0; k < 3; ++k) {
B[j][k] = ' ';
}
}
return B;
}
void print(char** A) {
printf(" |1|2|3|\n");
for(int i = 0; i < 3; ++i) {
printf("%c|", 'A' + i);
for(int j = 0; j < 3; ++j) {
printf("%c|", A[i][j]);
}
printf("\n");
}
}
int draw(char** A) {
for(int i = 0; i < 3; ++i) {
for(int j = 0; j < 3; ++j) {
if (A[i][j] == ' ') {
return 0;
}
}
}
return 1;
}
char move(char** A, int i, int j) {
if (A[i][j] == A[i][(j+1)%3]
&& A[i][j] == A[i][(j+2)%3])
{
return A[i][j];
}
else if (A[i][j] == A[(i+1)%3][j]
&& A[i][j] == A[(i+2)%3][j])
{
return A[i][j];
}
else if (i == j && A[i][j] == A[(i+1)%3][(j+1)%3]
&& A[i][j] == A[(i+2)%3][(j+2)%3])
{
return A[i][j];
}
else if (i+j == 2 && A[i][j] == A[(i+2)%3][(j+1)%3]
&& A[i][j] == A[(i+1)%3][(j+2)%3])
{
return A[i][j];
}
else {
return 0;
}
}