Skip to content
Snippets Groups Projects
Commit b5370a3c authored by sabrina.lapaire's avatar sabrina.lapaire
Browse files

Modifier twoPlayers.c

parent 736535f8
Branches
No related tags found
No related merge requests found
#include "twoPlayers.h"
void play(){
int current_line(struct board board, int no_col){
int no_line = board.line-1;
while(board.data[no_line][no_col] != Vide){
no_line--;
}
return no_line;
}
bool winner(){
bool is_full_board(struct board board){
for(int i = 0; i < board.line; i++){
for(int j = 0; j < board.col; j++){
if(board.data[i][j] == Vide){
return false;
}
}
}
return true;
}
bool row_of_four(struct board *board){
int sum = 0;
int i = 0;
int old_i = -1;
while(i < board->col){
old_i = i;
i++;
if(board->data[board->last_pos_x][i] == board->last_symbole && board->data[board->last_pos_x][old_i] == board->last_symbole){
sum++;
}
}
if(sum >= 4){
return true;
}
return false;
}
bool col_of_four(struct board *board){
int sum = 0;
int i = board->line -1;
int old_i = -1;
while(i >= 0){
old_i = i;
if(board->data[i][board->last_pos_y] == board->last_symbole && board->data[old_i][board->last_pos_y] == board->last_symbole){
sum++;
}
i--;
}
if(sum >= 4){
return true;
}
return false;
}
bool diag_of_four_left_right(struct board *board){
int sum = 1; // Nous commençons à 1 car le dernier symbole est déjà compté
int current_x = board->last_pos_x;
int current_y = board->last_pos_y;
int oldx = -1;
int oldy = -1;
// Vérification de la diagonale supérieure gauche à la diagonale inférieure droite
while (current_x > 0 && current_y > 0) {
oldx = current_x;
oldy = current_y;
current_x--;
current_y--;
if (board->data[current_x][current_y] == board->last_symbole && board->data[oldx][oldy] == board->last_symbole) {
sum++; // Increment only if we find consecutive symbols
}
}
// Réinitialisation des coordonnées
current_x = board->last_pos_x;
current_y = board->last_pos_y;
// Vérification de la diagonale inférieure droite à la diagonale supérieure gauche
while (current_x < board->line - 1 && current_y < board->col - 1) {
oldx = current_x;
oldy = current_y;
current_x++;
current_y++;
if (board->data[current_x][current_y] == board->last_symbole && board->data[oldx][oldy] == board->last_symbole) {
sum++; // Increment only if we find consecutive symbols
}
}
// Vérifie si sum est exactement égal à 4
if (sum == 4) {
return true; // We found 4 consecutive symbols
}
return false; // No 4 consecutive symbols found
}
bool diag_of_four_right_left(struct board *board){
int sum = 1; // On commence à 1 car le dernier symbole est déjà compté
int current_x = board->last_pos_x;
int current_y = board->last_pos_y;
int oldx = -1;
int oldy = -1;
// Vérification de la diagonale montante gauche à la diagonale descendante droite
while (current_x >= 0 && current_y < board->col - 1) {
oldx = current_x;
oldy = current_y;
current_x--;
current_y++;
if (board->data[current_x][current_y] == board->last_symbole && board->data[oldx][oldy] == board->last_symbole) {
sum++; // Incrémenter seulement si les symboles sont consécutifs
}
}
// Réinitialisation des coordonnées
current_x = board->last_pos_x;
current_y = board->last_pos_y;
// Vérification de la diagonale descendante gauche à la diagonale montante droite
while (current_x < board->line - 1 && current_y >= 0) {
oldx = current_x;
oldy = current_y;
current_x++;
current_y--;
if (board->data[current_x][current_y] == board->last_symbole && board->data[oldx][oldy] == board->last_symbole) {
sum++; // Incrémenter seulement si les symboles sont consécutifs
}
}
// Vérifie si sum est exactement égal à 4
if (sum == 4) {
return true; // Si 4 symboles consécutifs sont trouvés, retourner true
}
return false; // Sinon, retourner false
}
bool winner(struct board board){
if(row_of_four(&board) || diag_of_four_left_right(&board) || diag_of_four_right_left(&board) || col_of_four(&board)){
return true;
}
return false;
}
void play(struct board board){
int no_col = 0;
int no_line = 0;
int no_round = 1;
while(!is_full_board(board)){
printf("Column number? (starts at 1):");
scanf("%d", &no_col);
no_line = current_line(board,no_col - 1);
if(no_round % 2 != 0){
board.data[no_line][no_col - 1] = Croix;
board.last_symbole = Croix;
}
else{
board.data[no_line][no_col - 1] = Cercle;
board.last_symbole = Cercle;
}
board.last_pos_x = no_line;
board.last_pos_y = no_col - 1;
print_game(&board);
if(winner(board)){
if(board.last_symbole == Croix){
printf("Player one won\n");
}
else if(board.last_symbole == Cercle){
printf("Player two won\n");
}
break;
}
no_round++;
}
if(is_full_board(board)){
printf("It is a draw\n");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment