-
Notifications
You must be signed in to change notification settings - Fork 1
/
core.c
128 lines (124 loc) · 2.56 KB
/
core.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "mastermind.h"
/**
* generateSecretCode - function to generate the secret code
* Return: void
*/
void generateSecretCode(void)
{
int i, n;
srand(time(0));
for (i = 0; i < 4; i++)
{
n = (rand() % 6) + 49;
if (secretCode[0] == n || secretCode[1] == n
|| secretCode[2] == n || secretCode[3] == n)
i--;
else
secretCode[i] = n;
}
}
/**
* motor - function to get the input from the user
* @chances: counter for the amount of chances that the player has
* Return: void
*/
void motor(int chances)
{
char *number = NULL;
size_t size = 0;
int c, length;
if (number)
free(number);
c = getline(&number, &size, stdin);
if (c == EOF)
{
free(number);
good_bye();
}
length = strlen(number);
if (length > 5)
{
combo();
printf("\t\t\t\t\t\t\t\tNo more than four digits\n");
motor(chances);
}
else if (length < 5)
{
combo();
printf("\t\t\t\t\t\t\t\tNo less than four digits\n");
motor(chances);
}
else
if (check_input(number))
compare(chances, number);
else
{
combo();
printf("\t\t\t\t\t\t\t Please type only numeric digits\n");
motor(chances);
}
free(number);
}
/**
* combo - function to clear screen, print the title and the board
* Return: void
*/
void combo(void)
{
system("clear");
title();
printBoard();
}
/**
* compare - function to compare the input of the player and the secret Code
* @chances: counter for the amount of chances that the player has
* @number: the number from the input of the player
* Return: void
*/
void compare(int chances, char *number)
{
int i, j, k, black_asserts = 0, white_asserts = 0;
char *copy = NULL;
copy = strdup(secretCode);
/* compare black key pegs */
for (i = 0; i < 4; i++)
if (number[i] == copy[i])
{
black_asserts++;
copy[i] = '0';
}
if (black_asserts == 4)
congratulations();
/* compare white key pegs */
for (j = 0; j < 4; j++)
{
for (k = 0; k < 4; k++)
{
if (copy[j] == number[k] && copy[j] != '0')
{
white_asserts++;
copy[j] = '0';
break;
}
}
}
for (i = 0; i < 4; i++)
tries[chances][i] = number[i];
free(copy);
fill_rows(chances, black_asserts, white_asserts);
}
/**
* fill_rows - function to fill the slot of the game
* @chances: counter for the amount of chances that the player has
* @black: the amount of correct matches that the player made
* @white: the amount of numbers in the secret code but does not matche
* Return: void
*/
void fill_rows(int chances, int black, int white)
{
int i, j;
for (i = 0; i < black; i++)
rows[chances][i] = 'X';
for (j = 0; j < white; i++, j++)
rows[chances][i] = 'O';
}