#include<bits/stdc++.h> //this header file used for include all the properties of all functions we seen previously
using namespace std;
/********** Classes *********/
class cric {
public:
cric();
string name;
int id;
int runsScored;
int ballsPlayed;
int ballsBowled;
int runsGiven;
int wicketsTaken;
};
cric::cric() {
runsScored = 0;
ballsPlayed = 0;
ballsBowled = 0;
runsGiven = 0;
wicketsTaken = 0;
}
class group {
public:
group();
string name;
int totalRunsScored;
int wicketsLost;
int totalBallsBowled;
vector<cric> players;
};
group::group() {
totalRunsScored = 0;
wicketsLost = 0;
totalBallsBowled = 0;
}
class Game {
public:
Game();
int playersPerTeam;
int maxBalls;
int totalPlayers;
string players[22];
bool isFirstInnings;
group teamA, teamB;
group *battingTeam, *bowlingTeam;
cric *batsman, *bowler;
void welcome();
void showAllPlayers();
int takeIntegerInput();
void selectPlayers();
bool validateSelectedPlayer(int);
void showTeamPlayers();
void toss();
void tossChoice(group);
void startFirstInnings();
void initializePlayers();
void playInnings();
void bat();
bool validateInningsScore();
void showGameScorecard();
void startSecondInnings();
void showMatchSummary();
};
void Game::welcome() {
cout << "---------------------------------------" << endl;
cout << "|============== CRIC-IN ==============|" << endl;
cout << "| |" << endl;
cout << "| Welcome to our group project..! |" << 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 11 |" << endl;
cout << "| players each) from a given pool of 22 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 << "| 4.This is a T-20 match. 20 overs and each over |" << endl;
cout << "| contains 6 balls |" << endl;
cout << "----------------------------------------------------" << endl;
}
Game::Game() {
playersPerTeam = 10;
maxBalls = 20;
totalPlayers = 22;
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] ="Mdhoni";
players[11] ="Rahul";
players[12] ="Sourav";
players[13] ="Ravishankar";
players[14] ="Sachin";
players[15] ="Kapil";
players[16] ="Anil";
players[17] ="Zaheer";
players[18] ="Harbhajan";
players[19] ="Yuvraj";
players[20] ="Imran";
players[21] ="Brian";
isFirstInnings = false;
teamA.name = "Team-A";
teamB.name = "Team-B";
}
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: ";
} //if u input another number so this warning shows
return n;
}
bool Game::validateSelectedPlayer(int index) {
int n;
vector<cric> 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 (-: only numbers :-) - ";
int playerIndexTeamA = takeIntegerInput();
if (playerIndexTeamA < 0 || playerIndexTeamA > 22) {
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 {
cric 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 (-: only numbers :-) -";
int playerIndexTeamB = takeIntegerInput();
if (playerIndexTeamB < 0 || playerIndexTeamB > 22) {
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 {
cric teamBPlayer;
teamBPlayer.name = players[playerIndexTeamB];
teamB.players.push_back(teamBPlayer);
}
}
}
void Game::showTeamPlayers() {
vector<cric> teamAPlayers = teamA.players;
vector<cric> 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's the toss!!!!!!!!" << endl << endl;
tossChoice(teamA);
break;
case 1:
cout << "Team-B won's the toss!!!!!!!!" << endl << endl;
tossChoice(teamB);
break;
}
}
void Game::tossChoice(group 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. Enter a valid 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
group 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() % 15;//u increse this count
// 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;
}
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;
}
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++) {
cric cric = battingTeam->players[j];
cout << "|----------------------------------------|" << endl;
cout << "| " << "[" << j << "] " << cric.name << " \t "
<< cric.runsScored << "(" << cric.ballsPlayed << ") \t\t "
<< cric.ballsBowled << "-" << cric.runsGiven << "-"
<< cric.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++) {
cric cric = bowlingTeam->players[i];
cout << "|----------------------------------------|" << endl;
cout << "| " << "[" << i << "] " << cric.name << " \t "
<< cric.runsScored << "(" << cric.ballsPlayed << ") \t\t "
<< cric.ballsBowled << "-" << cric.runsGiven << "-"
<< cric.wicketsTaken << "\t |" << endl;
}
cout << "==========================================" << endl << endl;
}
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++ and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}