This is what i got so far:
#include"MainGame.h"
int main(int argc, char** argv)
{
MainGame mainGame;
mainGame.run();
return 0;
}
MainGame.cpp:
#include"MainGame.h"
#include<iostream>
#include<ctime>
#include <random>
#include<string>
MainGame::MainGame() :
_playerInput(0),
_secretNumber(0),
_playerTries(5),
_isRunning(true),
_gameState(GameState::MENU)
{
}
MainGame::~MainGame()
{
}
void MainGame::run()
{
//Initialize game state machine
stateMachine();
}
void MainGame::stateMachine()
{
while (_gameState != GameState::EXIT)
{
updateState();
}
//Debug purposes
std::cout << "end of stateMachine loop\n";
system("pause");
}
void MainGame::updateState()
{
switch (_gameState){
case GameState::PLAY:
gameRun();
break;
case GameState::MENU:
mainMenuDisplay();
processInput();
mainMenuDecision();
break;
case GameState::EXIT:
break;
}
}
void MainGame::gameRun()
{
clearScreen();
initLevel();
generateSecretNumber(1, 10);
gameLoop();
}
void MainGame::mainMenuDisplay()
{
displayText("***MainMenu***\n1->Play\n2->Exit\n");
}
void MainGame::mainMenuDecision()
{
if (_playerInput == 1)
{
_gameState = GameState::PLAY;
}
if (_playerInput == 2)
{
_gameState = GameState::EXIT;
}
}
void MainGame::initLevel()
{
_levels.push_back(new Level("Levels/level1.txt"));
_currentLevel = 0;
}
void MainGame::generateSecretNumber(int min, int max)
{
// Seed the random number generator
srand(static_cast<unsigned int>(time(NULL)));
//secretNumber is a number between min and max i.e(1,10)
_secretNumber = (rand() % max) + min;
}
void MainGame::gameLoop()
{
// Main loop
while (_isRunning)
{
updatePlayerTries();
processInput();
clearScreen();
checkVictory();
giveHint();
}
//Reset all variables
_isRunning = true;
_playerTries = 5;
_gameState = GameState::MENU;
//Debug purposes
std::cout << "End of gameloop loop\n";
system("pause");
clearScreen();
}
void MainGame::checkVictory()
{
// Check if player wins, lose, low, high guess
if (_playerTries == 0 && _playerInput != _secretNumber){
displayText("***Game Over ***\n");
_isRunning = false;
}
if (_playerInput == _secretNumber) {
// Print victory message
displayText("*** You win! ***\n");
_isRunning = false;
}
}
void MainGame::giveHint()
{
// Giving a hint if guess is low
if (_playerInput < _secretNumber && _isRunning == true){
displayText("*** Your guess was to low! ***\n");
}
// Giving a hint if guess is high
if (_playerInput > _secretNumber && _isRunning == true){
displayText("*** Your guess was to high! ***\n");
}
}
void MainGame::processInput()
{
//Get player input guess
retry:
if (_gameState == GameState::PLAY)
{
displayText("Make your guess: ");
}
std::cin >> _playerInput;
// we need to ignore anything non-number so that not cause any bug or failure
if (std::cin.fail()){
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
//print warning to player to input a number
displayText("you need to input a number\n");
//If player input is non numeric we goto retry;
goto retry;
}
}
void MainGame::updatePlayerTries(){
if (_playerTries != 0){
//Display tries remaining
displayText("Tries remaining: " + std::to_string(_playerTries) + "\n");
_playerTries--;
}
}
void MainGame::displayText(std::string messageDisplay)
{
std::cout << messageDisplay;
}
void MainGame::clearScreen()
{
system("CLS");
}
MainGame.h:
#pragma once
#include<vector>
#include"Level.h"
enum class GameState
{
PLAY,
MENU,
EXIT
};
class MainGame
{
public:
MainGame();
~MainGame();
void run();
private:
//State Machine
void stateMachine();
//Update State
void updateState();
//Game run
void gameRun();
//MainMenu
void mainMenuDisplay();
//Main Menu Decision
void mainMenuDecision();
//Initialize the Level
void initLevel();
void generateSecretNumber(int min, int max);
//Main gameLoop for our program
void gameLoop();
//Checks the victory condition
void checkVictory();
//We give hint to player
void giveHint();
//Handles input processing
void processInput();
//We check for player tries remaining
void updatePlayerTries();
//We display text
void displayText(std::string messageDisplay);
//Clean screen
void clearScreen();
int _playerInput;
int _secretNumber;
int _playerTries;
int _currentLevel;
bool _isRunning;
//Vector of all levels
std::vector<Level*> _levels;
GameState _gameState;
};
Level.cpp:
#include"Level.h"
#include<string>
#include<fstream>
#include<iostream>
Level::Level(const std::string& fileName)
{
std::ifstream file;
file.open(fileName);
// Error checking
if (file.fail()) {
std::cout << "Failed to open " + fileName + "\n";
}
std::string tmp;
// Read the level data
while (std::getline(file, tmp)) {
_levelData.emplace_back(tmp);
}
for (int i = 0; i < _levelData.size(); i++){
std::cout << _levelData[i] << "\n";
}
}
Level::~Level()
{
}
Level.h:
#pragma once
#include<string>
#include<vector>
class Level
{
public:
Level(const std::string& fileName);
~Level();
private:
std::vector<std::string> _levelData;
};
if anyone provide me with some help i appreciate it.
Thank you