legend666777
(usa Outra)
Enviado em 10/12/2023 - 16:04h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define ROWS 6
#define COLS 7
void setColor(int color) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
void resetColor() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
}
void initializeBoard(char board[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
board[i][j] = ' ';
}
}
}
void printBoard(char board[ROWS][COLS]) {
system("cls"); // Limpar a tela (Windows)
printf(" 1 2 3 4 5 6 7\n");
printf("----------------\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == ' ') {
setColor(13); // Cor roxa para espaço vazio
} else if (board[i][j] == '#') {
setColor(9); // Cor azul para jogador 1
} else {
setColor(12); // Cor vermelha para jogador 2
}
printf("|%c", board[i][j]);
resetColor();
}
printf("|\n");
}
printf("----------------\n");
}
int dropPiece(char board[ROWS][COLS], int col, char piece) {
for (int i = ROWS - 1; i >= 0; i--) {
if (board[i][col] == ' ') {
board[i][col] = piece;
return i;
}
}
return -1; // Coluna cheia
}
int checkWinner(char board[ROWS][COLS], int row, int col, char piece) {
// Verificar vitória em linhas, colunas e diagonais
int count;
// Verificar horizontal
count = 0;
for (int j = 0; j < COLS; j++) {
if (board[row][j] == piece) {
count++;
if (count == 4) return 1;
} else {
count = 0;
}
}
// Verificar vertical
count = 0;
for (int i = 0; i < ROWS; i++) {
if (board[i][col] == piece) {
count++;
if (count == 4) return 1;
} else {
count = 0;
}
}
// Verificar diagonal principal (/)
count = 0;
for (int i = row, j = col; i < ROWS && j < COLS; i++, j++) {
if (board[i][j] == piece) {
count++;
if (count == 4) return 1;
} else {
break;
}
}
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == piece) {
count++;
if (count == 4) return 1;
} else {
break;
}
}
// Verificar diagonal secundária (\)
count = 0;
for (int i = row, j = col; i >= 0 && j < COLS; i--, j++) {
if (board[i][j] == piece) {
count++;
if (count == 4) return 1;
} else {
break;
}
}
for (int i = row + 1, j = col - 1; i < ROWS && j >= 0; i++, j--) {
if (board[i][j] == piece) {
count++;
if (count == 4) return 1;
} else {
break;
}
}
return 0; // Nenhum vencedor ainda
}
int isBoardFull(char board[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == ' ') {
return 0; // O tabuleiro não está cheio
}
}
}
return 1; // O tabuleiro está cheio
}
int getPlayerMove(char piece) {
int col;
do{
printf("Jogador %c, insira sua jogada (coluna 1-7): ", piece);
scanf("%d", &col);
} while(col >= 7);
return col - 1; // Ajustar índice da coluna
}
void playGame() {
char board[ROWS][COLS];
int player1Wins = 0;
int player2Wins = 0;
int draws = 0;
int currentPlayer;
int gameOver = 0;
int col, row;
srand(time(NULL));
while (1) {
initializeBoard(board);
currentPlayer = 1; // Jogador 1 começa
gameOver = 0;
while (!gameOver) {
printBoard(board);
col = getPlayerMove((currentPlayer == 1) ? '#' : 'O');
row = dropPiece(board, col, (currentPlayer == 1) ? '#' : 'O');
if (row == -1) {
printf("Coluna cheia. Tente novamente.\n");
continue;
}
if (checkWinner(board, row, col, (currentPlayer == 1) ? '#' : 'O')) {
printBoard(board);
printf("Jogador %d vence!\n", currentPlayer);
(currentPlayer == 1) ? player1Wins++ : player2Wins++;
gameOver = 1;
} else if (isBoardFull(board)) {
printBoard(board);
printf("Empate!\n");
draws++;
gameOver = 1;
}
currentPlayer = (currentPlayer == 1) ? 2 : 1;
}
printf("Jogador 1: %d Jogador 2: %d Empates: %d\n", player1Wins, player2Wins, draws);
printf("Jogar novamente? (1 = Sim, 0 = Nao): ");
int playAgain;
scanf("%d", &playAgain);
if (!playAgain) {
break;
}
}
}
int main() {
playGame();
return 0;
}