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

Modifier twoPlayers.c

parent 736535f8
No related branches found
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.
Finish editing this message first!
Please register or to comment