Best Data Structures and Algorithm Course Get now!

C++ Program for Cricket Match

C++ program for cricket match with source code. You can download source code easily. G drive link is also available for fast downloading.

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

Old files are a bit complicated for users, so I just made one program containing all the code. If it works fine, please comment "It is working" if there are any errors, let me know in the comment section. You can also ping me on my Instagram account.

C++ program for a cricket match

There is only one program name virtual-cricket-game. Please download it using this link

Download

Name: 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
Output:

---------------------------------------
|============== 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

  1. What are inheritance and overloading
  2. How many classes are used, and how many are derived classes?
  3. Can you explain in short about each void function?
  4. How did the bowling and out system work?
  5. Which is the central part for out, bowling, and toss?
If you have any issues, you can comment below. First, I want to tell you that you can use our source code for sharing, editing, and project purposes.

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

C++ program for cricket match

11 comments

  1. Good to see Raina back in team����
  2. The game .cpp shows that the first line showing "game.h no such file or directory compilation terminated
  3. I have included the program for the header file Game.h .
  4. Game,h shows team.h not included in file directory.
    1. Everything is working fine. If problem persists, you may dm me on my insta account https://www.instagram.com/codingwithsid_/
  5. They explained me very well and make me feel very easy to understand......Thank you
    1. Welcome, if you ever want resources for programming feel free to Dm me.
  6. why bowler is not changing
    1. Bowler is not changing because we are selecting the first team player and this program only runs for 1st over, so that's why bowler is not changing.
  7. sir but right output is not coming.
    1. It is working fine; please tell us what is wrong with the output
Please do not enter any spam link in the comment box.