Number Game

Alright I have been working on this game for like a week or 2 now, but I am having some trouble towards the end. I need it for c++ work, but I have gotten so far I am sure someone can give me a little help with some bits.

Heres the code I have gotten so far:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;
char play;
int guess;
bool done;
int noOfGuesses = 0;
int random;
int c;
double bank, winnings, total;
int check;

void printPayout()
{
				cout << "1 guess, win 2.00" << endl;
				cout << "2 guesses, win 1.75" << endl;
				cout << "3 guesses, win 1.5" << endl;
				cout << "4 guesses, win 1.25" << endl;
				cout << "5 guesses, win 1.00" << endl;
				cout << "6 guesses, .75" << endl;
				cout << "7 guesses, win .5" << endl;
				cout << "8 guesses, win .25" << endl << endl;
}

int checkGuess(int guess)
{
	if (guess > random)
		{
			check = 1;
		}
	else if (guess < random)
		{
			check = -1;
		}
	else
		{
			check = 0;
		}

	return (check);
}

int genRandom()
{
	int r;
	srand(time(NULL));
	r = rand() % 100 + 1;

return r;
}


int game()
{
	cout << "Welcome to the guess-o-matic. It only costs a dollar to play. You could double your bet." << endl << endl;
	cout << "Do you want to play (y / n)" << endl;
			bank = 100.00;
	cin >> play;
		if (play=='y')
		{
		winnings = 2.00;
		cout << "Great!, your payout will be as follows:" << endl << endl;
		printPayout();

		random = genRandom();
		while((bank!=0)&&(play=='y'))
{
noOfGuesses=0;
random = genRandom();
winnings = 2.00;

		while ((noOfGuesses!=8))
		{
cout << "Now guess a number between 1 and 100" << endl;
		cin >> guess;
		noOfGuesses++;
		c = checkGuess (guess);
		if (c == 0)
		{
	bank = bank + winnings;
cout << "Correct, you win " << winnings << ", your bank is now "<< bank<< endl<<"Do You Wanna Play Again??(Y/N)";
cin>>play;
break;
		}
		else if (c == -1)
		{
		cout << "Sorry too low try higher" << endl;
				winnings = winnings - .25;
		}
		else if (c == 1){
		cout << "Sorry too high try lower" << endl;
		winnings = winnings - .25;
		}
}
}
	}
	cout<<"Thank You For Playing, you are left with a total of " <<bank<<" $\n Wishing you will be back to play once more.";
return 0;
}


int main()
{

	game();

	return 0;
} 


I am missing this part I just realized and dont know how I can take it out and make it a function.

4. You must have a function called calcWinnings that takes as an argument, the number of guesses it took to determine the number. You must use a switch statement to determine the winnings. This function returns the number of winnings.



I also realized it doesn't take a dollar away when you lose.

another part I am also missing is

3. You must ask the user if they want to continue after each correct guess. This means they cannot quit in the middle of a game


Anyone know of a good way to add these. I have been trying and keep doing something wrong. If someone could help me out here I would be so thankful :)
4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double calcWinnings(int numberOfGuesses) {
 double ret = 0.0;

 switch(numberOfGuesses) {
  case 1:
   ret = 2.00;
   break;
  case 2:
   ret = 1.75;
   break;
 }

 return ret;
}


3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main() {

 while (game()); // Continue while game returns true;

}

bool game() {
  // Do Game Stuff


  // Something like will suffice:
  string answer = "";
  cout << "play again? ";
  getline(cin, answer);
  if ((answer == "Y") || (answer == "y"))
   return true;

  return false;
}


That should be more than sufficient code to help you on your way.
Not use the || ! It will accept any letter!

Use this:

if (!(variable != 'y' && variable != 'Y'))

thanks to Jsmith.
Not use the || ! It will accept any letter!


My code will only accept Y or y, all other values are to be considered a negative response. If the answer is Y or y then it'll return true, thus continuing the while-loop and re-calling the game function. Do notice I am doing a string comparison, not a char comparison, and I am using getLine() not >>.

Happy to be corrected, but you should test other peoples code before you say it won't work.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>

using std::string;
using std::cout;
using std::endl;
using std::cin;


int main() {

  string answer = "";

  bool bCont = false;

  do {
    cout << "Loop again? " << endl;
    std::getline(cin, answer);
    if ((answer == "Y") || (answer == "y"))
      bCont = true;
    else
      bCont = false;

  } while (bCont);

  cout << "Finished" << endl;

  return 0;
}



Loop again? y
Answer was: y
Loop again? y
Answer was: y
Loop again? Y
Answer was: Y
Loop again? c
Answer was: c
Finished


Last edited on
Uh... :P Sorry then ^^'
HeatMan, I appreciate you citing references, though I answered your question about DeMorgan's rule without concern of the context of the question.

Although they are identical, I would never condone using

if( !( !expr && !expr ) )

in place of

if( expr || expr )

as I find the former unilaterally more confusing than the latter. More than likely you were experiencing operator precedence problems that was leading you to conclude that the former was necessary, whereas in fact it isn't.

Topic archived. No new replies allowed.