#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
}