Question: Make this program turn the X's red and the O's yellow, and the board blue. #include #include #include #define ROWS 6 #define COLUMNS 7 #define
Make this program turn the X's red and the O's yellow, and the board blue.
#include
#include
#include
#define ROWS 6
#define COLUMNS 7
#define CONNECT 4
void printBoard(char board[ROWS][COLUMNS]);
int dropPiece(char board[ROWS][COLUMNS], int column, char piece);
int checkWin(char board[ROWS][COLUMNS], char piece);
int main()
{
char board[ROWS][COLUMNS];
int i, j;
char currentPlayer = 'X';
int gameMode;
int column;
int winner = 0;
int draw = 0;
// Initialize the board to all empty spaces
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLUMNS; j++)
{
board[i][j] = ' ';
}
}
// Choose who goes first randomly
srand(time(NULL));
if (rand() % 2 == 0)
{
currentPlayer = 'X';
}
else
{
currentPlayer = 'O';
}
printf("Welcome to Connect 4! ");
printf("Enter 1 to play against the computer or 2 to play against another player: ");
scanf("%d", &gameMode);
while (winner == 0 && draw == 0)
{
// Print the board
printBoard(board);
// Get the column choice from the current player
if (currentPlayer == 'X')
{
if (gameMode == 1)
{
// Player 1's turn (against the computer)
printf("Player 1's turn (X). Enter a column number (1-7): ");
scanf("%d", &column);
column--; // Convert the column number to an array index
}
else
{
// Player 1's turn (against another player)
printf("Player 1's turn (X). Enter a column number (1-7): ");
scanf("%d", &column);
column--; // Convert the column number to an array index
}
}
else
{
if (gameMode == 1)
{
// Computer's turn (Player 2)
printf("Computer's turn (O). ");
column = rand() % COLUMNS; // Choose a random column
}
else
{
// Player 2's turn (against another player)
printf("Player 2's turn (O). Enter a column number (1-7): ");
scanf("%d", &column);
column--; // Convert the column number to an array index
}
}
// Drop the piece into the column
if (dropPiece(board, column, currentPlayer) == 0)
{
printf("That column is full. Choose a different column. ");
}
else
{
// Switch players
if (currentPlayer == 'X')
{
currentPlayer = 'O';
}
else
{
currentPlayer = 'X';
}
// Check if the game has been won
winner = checkWin(board, currentPlayer);
if (winner == 1)
{
// The other player won
if (currentPlayer == 'X')
{
printf("Player 2 (O) has won the game! ");
}
else
{
printf("Player 1 (X) has won the game! ");
}
}
else
{
// Check for a draw
draw = 1;
for (i = 0; i < COLUMNS; i++)
{
if (board[0][i] == ' ')
{
// There is an empty space, so the game is not a draw
draw = 0;
break;
}
}
if (draw == 1)
{
printf("The game is a draw. ");
}
}
}
}
// Print the final board
printBoard(board);
return 0;
}
// Prints the current state of the board
void printBoard(char board[ROWS][COLUMNS])
{
int i, j;
printf(" ");
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLUMNS; j++)
{
printf("| %c ", board[i][j]);
}
printf("| ");
}
printf("------------------- ");
printf(" 1 2 3 4 5 6 7 ");
printf(" ");
}
// Drops the piece into the specified column and returns 1 if successful, 0 if the column is full
int dropPiece(char board[ROWS][COLUMNS], int column, char piece)
{
int i;
// Check if the column is full
if (board[0][column] != ' ')
{
return 0;
}
// Find the first empty space in the column and place the piece there
for (i = ROWS - 1; i >= 0; i--)
{
if (board[i][column] == ' ')
{
board[i][column] = piece;
return 1;
}
}
return 0;
}
// Checks if the current player has won the game and returns 1 if they have, 0 otherwise
int checkWin(char board[ROWS][COLUMNS], char piece)
{
int i, j;
int consecutiveCount;
// Check for horizontal wins
for (i = 0; i < ROWS; i++)
{
consecutiveCount = 0;
for (j = 0; j < COLUMNS; j++)
{
if (board[i][j] == piece)
{
consecutiveCount++;
if (consecutiveCount == CONNECT)
{
return 1;
}
}
else
{
consecutiveCount = 0;
}
}
}
// Check for vertical wins
for (j = 0; j < COLUMNS; j++)
{
consecutiveCount = 0;
for (i = 0; i < ROWS; i++)
{
if (board[i][j] == piece)
{
consecutiveCount++;
if (consecutiveCount == CONNECT)
{
return 1;
}
}
else
{
consecutiveCount = 0;
}
}
}
// Check for diagonal wins
for (i = 0; i < ROWS - CONNECT + 1; i++)
{
for (j = 0; j < COLUMNS - CONNECT + 1; j++)
{
if (board[i][j] == piece && board[i+1][j+1] == piece && board[i+2][j+2] == piece && board[i+3][j+3] == piece)
{
return 1;
}
}
}
for (i = 0; i < ROWS - CONNECT + 1; i++)
{
for (j = COLUMNS - 1; j >= CONNECT - 1; j--)
{
if (board[i][j] == piece && board[i+1][j-1] == piece && board[i+2][j-2] == piece && board[i+3][j-3] == piece)
{
return 1;
}
}
}
// No win was found
return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
