Write a program for a game called \"connect four\" (in C++14) ***I\'m not sure h
ID: 3801755 • Letter: W
Question
Write a program for a game called "connect four" (in C++14)
***I'm not sure how to even begin writing this. Any help provided would be greatly appreciated!***
This program:
1. Lays out a Connect 4 board (6 high x 7 long) and assigns each space a number.
2. Allows each player to select a space to play, filling that space with either an ‘R’ or ‘B’ for Red or Black.
3. Uses a random number generator to determine which player goes first.
4. One additional unique component.
Program must include:
- Functions
- Array
- Loop
- Branching
- Random number generator
Assumptions:
- The player can only fill in from the bottom of the board and on top of other plays.
Creative Liberties:
- Symbols used for the board.
- Symbols used to indicate each player.
Explanation / Answer
#include<iostream>
#include<cstring>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#define R 6
#define C 7
using namespace std;
void printBoard(char *board);
int takeTurn(char *board, int player, const char*);
int checkWin(char *board);
int checkFour(char *board, int, int, int, int);
int horizontalCheck(char *board);
int verticalCheck(char *board);
int diagonalCheck(char *board);
int main(int argc, char **argv)
{
const char *options = "RB";
char board[R*C];
memset(board, ' ', R * C);
/* initialize random seed: */
srand (time(NULL));
int turn;
turn = rand() % 2;
int done = 0;
for(; turn < R * C && !done; turn++){
printBoard(board);
while(!takeTurn(board, turn % 2, options)){
printBoard(board);
puts("This Column full! Try another one. ");
}
done = checkWin(board);
}
printBoard(board);
if(turn == R * C && !done){
puts("It's a tie!");
} else {
turn--;
printf("Player %d (%c) wins! ", turn % 2 + 1, options[turn % 2]);
}
return 0;
}
void printBoard(char *board){
int row, col;
system("clear");
puts(" ---Welcome to Connect Four Game--- ");
for(row = 0; row < R; row++){
for(col = 0; col < C; col++){
printf("| %c ", board[C * row + col]);
}
puts("|");
puts("-----------------------------");
}
puts(" 1 2 3 4 5 6 7 ");
}
int takeTurn(char *board, int player, const char *options){
int row, col = 0;
printf("Player %d (%c): Enter place number: ", player + 1, options[player]);
while(1){
if(1 != scanf("%d", &col) || col < 1 || col > 7 ){
while(getchar() != ' ');
puts("Out of range! Try again.");
} else {
break;
}
}
col--;
for(row = R - 1; row >= 0; row--){
if(board[C * row + col] == ' '){
board[C * row + col] = options[player];
return 1;
}
}
return 0;
}
int checkWin(char *board){
return (horizontalCheck(board) || verticalCheck(board) || diagonalCheck(board));
}
int checkFour(char *board, int a, int b, int c, int d){
return (board[a] == board[b] && board[b] == board[c] && board[c] == board[d] && board[a] != ' ');
}
int horizontalCheck(char *board){
int row, col, idx;
const int WIDTH = 1;
for(row = 0; row < R; row++){
for(col = 0; col < C - 3; col++){
idx = C * row + col;
if(checkFour(board, idx, idx + WIDTH, idx + WIDTH * 2, idx + WIDTH * 3)){
return 1;
}
}
}
return 0;
}
int verticalCheck(char *board){
int row, col, idx;
const int HEIGHT = 7;
for(row = 0; row < R - 3; row++){
for(col = 0; col < C; col++){
idx = C * row + col;
if(checkFour(board, idx, idx + HEIGHT, idx + HEIGHT * 2, idx + HEIGHT * 3)){
return 1;
}
}
}
return 0;
}
int diagonalCheck(char *board){
int row, col, idx, count = 0;
const int DIAG_RGT = 6, DIAG_LFT = 8;
for(row = 0; row < R - 3; row++){
for(col = 0; col < C; col++){
idx = C * row + col;
if(count <= 3 && checkFour(board, idx, idx + DIAG_LFT, idx + DIAG_LFT * 2, idx + DIAG_LFT * 3) || count >= 3 && checkFour(board, idx, idx + DIAG_RGT, idx + DIAG_RGT * 2, idx + DIAG_RGT * 3)){
return 1;
}
count++;
}
count = 0;
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.