In this post, we will make a c++ program for a cricket match. You can also download it. Vipul Khokhar makes this post.
Table of Contents
C++ program for a cricket match
There is only one program name virtual-cricket-game. Please download it using this link
DownloadName: C++ program for cricket match.
#include<bits/stdc++.h>
using namespace std;
class Player {
public:
Player();
std::string name;
int id;
int runsScored;
int ballsPlayed;
int ballsBowled;
int runsGiven;
int wicketsTaken;
};
Player::Player() {
runsScored = 0;
ballsPlayed = 0;
ballsBowled = 0;
runsGiven = 0;
wicketsTaken = 0;
}
class Team {
public:
Team();
std::string name;
int totalRunsScored;
int wicketsLost;
int totalBallsBowled;
std::vector<Player> players;
};
Team::Team() {
totalRunsScored = 0;
wicketsLost = 0;
totalBallsBowled = 0;
}
class Game {
public:
Game();
int playersPerTeam;
int maxBalls;
int totalPlayers;
std::string players[11];
bool isFirstInnings;
Team teamA, teamB;
Team *battingTeam, *bowlingTeam;
Player *batsman, *bowler;
void welcome();
void showAllPlayers();
int takeIntegerInput();
void selectPlayers();
bool validateSelectedPlayer(int);
void showTeamPlayers();
void toss();
void tossChoice(Team);
void startFirstInnings();
void initializePlayers();
void playInnings();
void bat();
bool validateInningsScore();
void showGameScorecard();
void startSecondInnings();
void showMatchSummary();
};
Game::Game() {
playersPerTeam = 4;
maxBalls = 6;
totalPlayers = 11;
players[0] = "Virat";
players[1] = "Rohit";
players[2] = "Dhawan";
players[3] = "Pant";
players[4] = "Karthik";
players[5] = "KLRahul";
players[6] = "Jadeja";
players[7] = "Hardik";
players[8] = "Bumrah";
players[9] = "BKumar";
players[10] = "Ishant";
isFirstInnings = false;
teamA.name = "Team-A";
teamB.name = "Team-B";
}
void Game::welcome() {
cout << "---------------------------------------" << endl;
cout << "|============== CRIC-IN ==============|" << endl;
cout << "| |" << endl;
cout << "| Welcome to Virtual Cricket Game |" << endl;
cout << "---------------------------------------" << endl;
cout << endl << endl;
cout << "----------------------------------------------------" << endl;
cout << "|================== Instructions ==================|" << endl;
cout << "----------------------------------------------------" << endl;
cout << "| |" << endl;
cout << "| 1. Create 2 teams (Team-A and Team-B with 4 |" << endl;
cout << "| players each) from a given pool of 11 players.|" << endl;
cout << "| 2. Lead the toss and decide the choice of play. |" << endl;
cout << "| 3. Each innings will be of 6 balls. |" << endl;
cout << "----------------------------------------------------" << endl;
}
void Game::showAllPlayers() {
cout << endl;
cout << "---------------------------------------" << endl;
cout << "|========== Pool of Players ==========|" << endl;
cout << "---------------------------------------" << endl;
cout << endl;
for (int i = 0; i < totalPlayers; i++) {
cout << "\t\t[" << i << "] " << players[i] << endl;
}
}
int Game::takeIntegerInput() {
int n;
while (!(cin >> n)) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input! Please try again with valid input: ";
}
return n;
}
bool Game::validateSelectedPlayer(int index) {
int n;
vector<Player> players;
players = teamA.players;
n = players.size();
for (int i = 0; i < n; i++) {
if (players[i].id == index) {
return false;
}
}
players = teamB.players;
n = players.size();
for (int i = 0; i < n; i++) {
if (players[i].id == index) {
return false;
}
}
return true;
}
void Game::selectPlayers() {
cout << endl;
cout << "------------------------------------------------" << endl;
cout << "|========== Create Team-A and Team-B ==========|" << endl;
cout << "------------------------------------------------" << endl;
for (int i = 0; i < playersPerTeam; i++) {
// Add player to team A
teamASelection:
cout << endl << "Select player " << i + 1 << " of Team A - ";
int playerIndexTeamA = takeIntegerInput();
if (playerIndexTeamA < 0 || playerIndexTeamA > 10) {
cout << endl << "Please select from the given players" << endl;
goto teamASelection;
} else if (!validateSelectedPlayer(playerIndexTeamA)) {
cout << endl << "Player has been already selected. Please select other player" << endl;
goto teamASelection;
} else {
Player teamAPlayer;
teamAPlayer.id = playerIndexTeamA;
teamAPlayer.name = players[playerIndexTeamA];
teamA.players.push_back(teamAPlayer);
}
// Add player to team B
teamBSelection:
cout << endl << "Select player " << i + 1 << " of Team B - ";
int playerIndexTeamB = takeIntegerInput();
if (playerIndexTeamB < 0 || playerIndexTeamB > 10) {
cout << endl << "Please select from the given players" << endl;
goto teamBSelection;
} else if (!validateSelectedPlayer(playerIndexTeamB)) {
cout << endl << "Player has been already selected. Please select other player" << endl;
goto teamBSelection;
} else {
Player teamBPlayer;
teamBPlayer.name = players[playerIndexTeamB];
teamB.players.push_back(teamBPlayer);
}
}
}
void Game::showTeamPlayers() {
vector<Player> teamAPlayers = teamA.players;
vector<Player> teamBPlayers = teamB.players;
cout << endl << endl;
cout << "--------------------------\t\t--------------------------" << endl;
cout << "|======= Team-A =======|\t\t|======= Team-B =======|" << endl;
cout << "--------------------------\t\t--------------------------" << endl;
for (int i = 0; i < playersPerTeam; i++) {
cout << "|\t" << "[" << i << "] " << teamAPlayers[i].name << "\t |"
<< "\t\t"
<< "|\t" << "[" << i << "] " << teamBPlayers[i].name << "\t |" << endl;
}
cout << "--------------------------\t\t--------------------------" << endl << endl;
}
void Game::toss() {
cout << endl;
cout << "-----------------------------------" << endl;
cout << "|========== Let's Toss ==========|" << endl;
cout << "-----------------------------------" << endl << endl;
cout << "Tossing the coin..." << endl << endl;
srand(time(NULL));
int randomValue = rand() % 2; // 0 or 1
switch (randomValue) {
case 0:
cout << "Team-A won the toss" << endl << endl;
tossChoice(teamA);
break;
case 1:
cout << "Team-B won the toss" << endl << endl;
tossChoice(teamB);
break;
}
}
void Game::tossChoice(Team tossWinnerTeam) {
cout << "Enter 1 to bat or 2 to bowl first. " << endl
<< "1. Bat" << endl
<< "2. Bowl " << endl;
int tossInput = takeIntegerInput();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
switch (tossInput) {
case 1:
cout << endl << tossWinnerTeam.name << " won the toss and elected to bat first" << endl << endl;
if (tossWinnerTeam.name.compare("Team-A") == 0) { // if Team-A is the toss winner
battingTeam = &teamA;
bowlingTeam = &teamB;
} else { // else Team-B is the toss winner
battingTeam = &teamB;
bowlingTeam = &teamA;
}
break;
case 2:
cout << endl << tossWinnerTeam.name << " won the toss and choose to bowl first" << endl << endl;
if (tossWinnerTeam.name.compare("Team-A") == 0) { // if Team-A is the toss winner
bowlingTeam = &teamA;
battingTeam = &teamB;
} else { // else Team-B is the toss winner
bowlingTeam = &teamB;
battingTeam = &teamA;
}
break;
default:
cout << endl << "Invalid input. Please try again:" << endl << endl;
tossChoice(tossWinnerTeam);
break;
}
}
void Game::startFirstInnings() {
cout << "\t\t ||| FIRST INNINGS STARTS ||| " << endl << endl;
isFirstInnings = true;
initializePlayers();
playInnings();
}
void Game::startSecondInnings() {
cout << "\t\t ||| SECOND INNINGS STARTS ||| " << endl << endl;
isFirstInnings = false;
// Swap battingTeam and bowlingTeam pointers
Team tempTeam = *battingTeam;
*battingTeam = *bowlingTeam;
*bowlingTeam = tempTeam;
// Select the batsman and the bowler for 2nd Innings
initializePlayers();
playInnings();
}
void Game::initializePlayers() {
// Choose batsman and bowler: Initialize *batsman and *bowler
batsman = &battingTeam->players[0];
bowler = &bowlingTeam->players[0];
cout << battingTeam->name << " - " << batsman->name << " is batting " << endl;
cout << bowlingTeam->name << " - " << bowler->name << " is bowling " << endl << endl;
}
void Game::playInnings() {
for (int i = 0; i < maxBalls; i++) {
cout << "Press Enter to bowl...";
getchar();
cout << "Bowling..." << endl;
bat();
if (!validateInningsScore()) {
break;
}
}
}
void Game::bat() {
srand(time(NULL));
int runsScored = rand() % 6;
// Update batting team and batsman score
batsman->runsScored = batsman->runsScored + runsScored;
battingTeam->totalRunsScored = battingTeam->totalRunsScored + runsScored;
batsman->ballsPlayed = batsman->ballsPlayed + 1;
// Update bowling team and bowler score
bowler->ballsBowled = bowler->ballsBowled + 1;
bowlingTeam->totalBallsBowled = bowlingTeam->totalBallsBowled + 1;
bowler->runsGiven = bowler->runsGiven + runsScored;
if (runsScored != 0) { // if runsScored = 1, 2, 3, 4, 5, or 6
cout << endl << bowler->name << " to " << batsman->name << " " << runsScored << " runs!" << endl << endl;
showGameScorecard();
} else { // else runScored = 0 and the batsman is ‘OUT’
cout << endl << bowler->name << " to " << batsman->name << " OUT!" << endl << endl;
battingTeam->wicketsLost = battingTeam->wicketsLost + 1;
bowler->wicketsTaken = bowler->wicketsTaken + 1;
showGameScorecard();
int nextPlayerIndex = battingTeam->wicketsLost;
batsman = &battingTeam->players[nextPlayerIndex];
}
}
bool Game::validateInningsScore() {
if (isFirstInnings) {
if (battingTeam->wicketsLost == playersPerTeam || bowlingTeam->totalBallsBowled == maxBalls) {
cout << "\t\t ||| FIRST INNINGS ENDS ||| " << endl << endl;
cout << battingTeam->name << " " << battingTeam->totalRunsScored << " - "
<< battingTeam->wicketsLost << " (" << bowlingTeam->totalBallsBowled
<< ")" << endl;
cout << bowlingTeam->name << " needs " << battingTeam->totalRunsScored + 1
<< " runs to win the match" << endl << endl;
return false;
}
} else { // Else 2nd innings
if (battingTeam->totalRunsScored > bowlingTeam->totalRunsScored) { //Case1: If batting team score > bowling team score
cout << battingTeam->name << " WON THE MATCH" << endl << endl;
return false;
//Case2: Batting team is all OUT OR Bowling team is done bowling
} else if (battingTeam->wicketsLost == playersPerTeam || bowlingTeam->totalBallsBowled == maxBalls) {
if (battingTeam->totalRunsScored < bowlingTeam->totalRunsScored) {
cout << bowlingTeam->name << " WON THE MATCH" << endl << endl;
} else {
cout << "MATCH DRAW" << endl << endl;
}
return false;
}
}
return true;
}
void Game::showGameScorecard() {
cout << "--------------------------------------------------------------------------" << endl;
cout << "\t" << battingTeam->name << " " << battingTeam->totalRunsScored << " - "
<< battingTeam->wicketsLost << " (" << bowlingTeam->totalBallsBowled << ") | " << batsman->name
<< " " << batsman->runsScored << " (" << batsman->ballsPlayed << ") \t" << bowler->name << " "
<< bowler->ballsBowled << " - " << bowler->runsGiven << " - " << bowler->wicketsTaken << "\t" << endl;
cout << "--------------------------------------------------------------------------" << endl << endl;
}
void Game::showMatchSummary() {
cout << "\t\t ||| MATCH ENDS ||| " << endl << endl;
cout << battingTeam->name << " " << battingTeam->totalRunsScored << "-" << battingTeam->wicketsLost << " (" << bowlingTeam->totalBallsBowled << ")" << endl;
cout << "==========================================" << endl;
cout << "| PLAYER \t BATTING \t BOWLING |" << endl;
for (int j = 0; j < playersPerTeam; j++) {
Player player = battingTeam->players[j];
cout << "|----------------------------------------|" << endl;
cout << "| " << "[" << j << "] " << player.name << " \t "
<< player.runsScored << "(" << player.ballsPlayed << ") \t\t "
<< player.ballsBowled << "-" << player.runsGiven << "-"
<< player.wicketsTaken << "\t |" << endl;
}
cout << "==========================================" << endl << endl;
cout << bowlingTeam->name << " " << bowlingTeam->totalRunsScored << "-" << bowlingTeam->wicketsLost << " (" << battingTeam->totalBallsBowled << ")" << endl;
cout << "==========================================" << endl;
cout << "| PLAYER \t BATTING \t BOWLING |" << endl;
for (int i = 0; i < playersPerTeam; i++) {
Player player = bowlingTeam->players[i];
cout << "|----------------------------------------|" << endl;
cout << "| " << "[" << i << "] " << player.name << " \t "
<< player.runsScored << "(" << player.ballsPlayed << ") \t\t "
<< player.ballsBowled << "-" << player.runsGiven << "-"
<< player.wicketsTaken << "\t |" << endl;
}
cout << "==========================================" << endl << endl;
}
int main() {
Game game;
game.welcome();
cout << "\nPress Enter to continue";
getchar();
game.showAllPlayers();
cout << "\nPress Enter to continue";
getchar();
game.selectPlayers();
game.showTeamPlayers();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cout << "\nPress Enter to toss";
getchar();
game.toss();
game.startFirstInnings();
game.startSecondInnings();
game.showMatchSummary();
return 0;
}
Copy Code
---------------------------------------
|============== CRIC-IN ==============|
| |
| Welcome to Virtual Cricket Game |
---------------------------------------
----------------------------------------------------
|================== Instructions ==================|
----------------------------------------------------
| |
| 1. Create 2 teams (Team-A and Team-B with 4 |
| players each) from a given pool of 11 players.|
| 2. Lead the toss and decide the choice of play. |
| 3. Each innings will be of 6 balls. |
----------------------------------------------------
Press Enter to continue
---------------------------------------
|========== Pool of Players ==========|
---------------------------------------
[0] Virat
[1] Rohit
[2] Dhawan
[3] Pant
[4] Karthik
[5] KLRahul
[6] Jadeja
[7] Hardik
[8] Bumrah
[9] BKumar
[10] Ishant
Press Enter to continue
------------------------------------------------
|========== Create Team-A and Team-B ==========|
------------------------------------------------
Select player 1 of Team A - 0
Select player 1 of Team B - 1
Select player 2 of Team A - 2
Select player 2 of Team B - 3
Select player 3 of Team A - 4
Select player 3 of Team B - 5
Select player 4 of Team A - 6
Select player 4 of Team B - 7
-------------------------- --------------------------
|======= Team-A =======| |======= Team-B =======|
-------------------------- --------------------------
| [0] Virat | | [0] Rohit |
| [1] Dhawan | | [1] Pant |
| [2] Karthik | | [2] KLRahul |
| [3] Jadeja | | [3] Hardik |
-------------------------- --------------------------
Press Enter to toss
-----------------------------------
|========== Let's Toss ==========|
-----------------------------------
Tossing the coin...
Team-A won the toss
Enter 1 to bat or 2 to bowl first.
1. Bat
2. Bowl
1
Team-A won the toss and elected to bat first
||| FIRST INNINGS STARTS |||
Team-A - Virat is batting
Team-B - Rohit is bowling
Press Enter to bowl...
Bowling...
Rohit to Virat 4 runs!
--------------------------------------------------------------------------
Team-A 4 - 0 (1) | Virat 4 (1) Rohit 1 - 4 - 0
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Rohit to Virat 1 runs!
--------------------------------------------------------------------------
Team-A 5 - 0 (2) | Virat 5 (2) Rohit 2 - 5 - 0
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Rohit to Virat 4 runs!
--------------------------------------------------------------------------
Team-A 9 - 0 (3) | Virat 9 (3) Rohit 3 - 9 - 0
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Rohit to Virat 4 runs!
--------------------------------------------------------------------------
Team-A 13 - 0 (4) | Virat 13 (4) Rohit 4 - 13 - 0
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Rohit to Virat 2 runs!
--------------------------------------------------------------------------
Team-A 15 - 0 (5) | Virat 15 (5) Rohit 5 - 15 - 0
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Rohit to Virat 2 runs!
--------------------------------------------------------------------------
Team-A 17 - 0 (6) | Virat 17 (6) Rohit 6 - 17 - 0
--------------------------------------------------------------------------
||| FIRST INNINGS ENDS |||
Team-A 17 - 0 (6)
Team-B needs 18 runs to win the match
||| SECOND INNINGS STARTS |||
Team-B - Rohit is batting
Team-A - Virat is bowling
Press Enter to bowl...
Bowling...
Virat to Rohit OUT!
--------------------------------------------------------------------------
Team-B 0 - 1 (1) | Rohit 0 (1) Virat 1 - 0 - 1
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Virat to Pant OUT!
--------------------------------------------------------------------------
Team-B 0 - 2 (2) | Pant 0 (1) Virat 2 - 0 - 2
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Virat to KLRahul 3 runs!
--------------------------------------------------------------------------
Team-B 3 - 2 (3) | KLRahul 3 (1) Virat 3 - 3 - 2
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Virat to KLRahul 3 runs!
--------------------------------------------------------------------------
Team-B 6 - 2 (4) | KLRahul 6 (2) Virat 4 - 6 - 2
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Virat to KLRahul OUT!
--------------------------------------------------------------------------
Team-B 6 - 3 (5) | KLRahul 6 (3) Virat 5 - 6 - 3
--------------------------------------------------------------------------
Press Enter to bowl...
Bowling...
Virat to Hardik OUT!
--------------------------------------------------------------------------
Team-B 6 - 4 (6) | Hardik 0 (1) Virat 6 - 6 - 4
--------------------------------------------------------------------------
Team-A WON THE MATCH
||| MATCH ENDS |||
Team-B 6-4 (6)
==========================================
| PLAYER BATTING BOWLING |
|----------------------------------------|
| [0] Rohit 0(1) 6-17-0 |
|----------------------------------------|
| [1] Pant 0(1) 0-0-0 |
|----------------------------------------|
| [2] KLRahul 6(3) 0-0-0 |
|----------------------------------------|
| [3] Hardik 0(1) 0-0-0 |
==========================================
Team-A 17-0 (6)
==========================================
| PLAYER BATTING BOWLING |
|----------------------------------------|
| [0] Virat 17(6) 6-6-4 |
|----------------------------------------|
| [1] Dhawan 0(0) 0-0-0 |
|----------------------------------------|
| [2] Karthik 0(0) 0-0-0 |
|----------------------------------------|
| [3] Jadeja 0(0) 0-0-0 |
==========================================
Viva Questions
- What are inheritance and overloading
- How many classes are used, and how many are derived classes?
- Can you explain in short about each void function?
- How did the bowling and out system work?
- Which is the central part for out, bowling, and toss?
Related Posts:
Menu Driven Program in C using Switch Case and Do-While Loop
Odd and even numbers program in c
Palindrome Program in Python