Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // GuessANumber.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <random>
- #include <sstream>
- #include <string>
- using namespace std;
- //Skapar ett randomnummer mellan X och Y.
- //I de bästa av världar hade inte objekten instansierats i denna funktionen utan gjort det på ett annat ställe. Men detta påverkade inte prestandan något.
- int RandomNumberGenerator(int minGuess, int maxGuess)
- {
- random_device _randomDevice;
- mt19937 rng(_randomDevice());
- uniform_int_distribution<int> distr(minGuess, maxGuess);
- return distr(rng);
- }
- //Läser användarens inmatning
- string ReadUserInput()
- {
- string _input;
- getline(cin, _input);
- return _input;
- }
- //Struktor för att komma åt de värden som genereras i CheckUserInput.
- struct ValidUserInput
- {
- int _valueOfInput;
- bool _validInput;
- };
- //Validerar användarinmatningen. Tar hänsyn till ifall <ENTER> trycks ned genom att sätta värdet till 0 om strängen är tom.
- ValidUserInput CheckUserInput(string Input)
- {
- ValidUserInput _validUserInput;
- _validUserInput._validInput = false;
- int _inputValueToInt;
- stringstream _IntFromStream(Input);
- if(Input == "")
- {
- _validUserInput._valueOfInput = 0;
- _validUserInput._validInput = true;
- }
- else if(_IntFromStream >> _inputValueToInt)
- {
- if(_inputValueToInt >= 1 && _inputValueToInt <= 3)
- {
- _validUserInput._valueOfInput = _inputValueToInt;
- _validUserInput._validInput = true;
- }
- }
- else
- {
- _validUserInput._validInput = false;
- }
- return _validUserInput;
- };
- //Rekursiv funktion som hanterar felaktig inmatning.
- //Returnerar värdet från den sträng som matas in i CheckUserInput in.
- int GetUserInput()
- {
- ValidUserInput _userInput = CheckUserInput(ReadUserInput());
- int Result;
- if (_userInput._validInput == true)
- {
- Result = _userInput._valueOfInput;
- }
- else
- {
- cout << "Inget giltigt värde." << endl;
- Result = GetUserInput();
- }
- return Result;
- }
- /*
- void OutputToUser()
- {
- //Göra ytterligare en funktion som har hand om all form av output.
- }
- */
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "Tänk på ett tal mellan 1 och 100. Tryck ENTER när du är klar." << endl;
- cin.get();
- int _answer;
- int _guessCounter = 1;
- int _minGuess = 1;
- int _maxGuess = 100;
- int _numbersToGuess = RandomNumberGenerator(_minGuess, _maxGuess);
- bool _correctGuess = false;
- while ( _correctGuess == false && _guessCounter <= 7 && _minGuess != _maxGuess)
- {
- cout << "Jag gissar på " << _numbersToGuess << endl;
- cout << "Tryck 1 om det var rätt tal." << endl << "Tryck 2 om ditt tal är högre" << endl << "Tryck 3 om ditt tal är lägre" << endl << "Avsluta med ENTER." << endl;
- _answer = GetUserInput();
- cout << endl << _answer << endl;
- switch (_answer)
- {
- case 1:
- cout << "Hurra! Jag gissade rätt på " << _guessCounter << " försök." << endl;
- cin.get();
- _correctGuess = true;
- break;
- //Adderar eller subtraherar 1 från varje gissning så att den inte råkar slumpa fram föregående värde.
- //Kan ske ifall första gissningen är väldigt hög/låg.
- case 2:
- if (_minGuess + 1 <= _maxGuess)
- {
- _minGuess = _numbersToGuess ++;
- }
- _numbersToGuess = RandomNumberGenerator(_minGuess, _maxGuess);
- break;
- case 3:
- if (_maxGuess - 1 >= _minGuess)
- {
- _maxGuess = _numbersToGuess --;
- }
- _numbersToGuess = RandomNumberGenerator(_minGuess, _maxGuess);
- break;
- case 0:
- cout << "Avslutar programmet.";
- _correctGuess = true;
- default:
- cout << "Här borde du inte hamna om kontrollet gjorts ordentligt" << endl;
- break;
- }
- _numbersToGuess++;
- }
- //Om nummergeneratorn av någon anledning skulle genenera samma värde, har användaren antingen gjort fel, eller så är det en bugg.
- if (_minGuess == _maxGuess)
- {
- cout << "Om du följde reglerna borde du inte hamnat här." << endl << "Gör om, gör rätt." << endl;
- cin.get();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement