Hjälp med kod till tärningsspel (c++)
Hej!
(Se koden nedanför)
Jag är väldigt ny på programmering och försöker förstå mig på hur man skapar ett tärningsspel där en användare ska utmana datorn.
Behöver hjälp med att kika på koden, något som ser konstigt ut och vad behöver jag ändra/lägga till för att få med vissa funktioner.
Spelet går ut på att användaren och datorn får kasta två tärningar åt gången i tre omgångar. Den som får högst vinner
omgången (bäst av tre). I början av programmet ska användaren ange hur mycket pengar som han/hon vill satsa, 100kr, 300kr eller 500kr. Om användaren vinner ett spel erhålls summan av användarens och datorns insats, men vid förlust så
förloras insatsen.
Det som jag ska få med är:
• För varje omgång måste användarens och datorns tärningskast redovisas.
• Tydligt framgå vem som vann spelet totalt och för respektive omgång.
• Onödiga omgångar ska inte spelas, dvs. om någon vinner två omgångar i rad.
• Användaren får spela hur många gånger som helst och väljer själv när den vill avsluta
programmet.
• Lyckas användaren vinna ett spel ska programmet skriva ut aktuell vinst samt den
totala vinstsumman (om användaren spelat flera gånger).
• Om datorn vinner ett spel ska programmet skriva ut ett tröstmeddelande och den
totala vinstsumma som finns kvar.
• Användaren får sätta in max 5.000 kr åt gången.
• Om det finns pengar innestående så behöver inte användaren sätta in mer pengar vid
nytt spel.
• Betalningsmomentet kan symboliseras med ex. information om att pengar dras från
användarens konto. Använd gärna ett heltal som minskas och ökas beroende på
aktuella vinster och förluster.
• Tärningarna kan symboliseras med hjälp av en fördefinierad randomfunktion, ex.
rand() som returnerar ett slumpmässigt heltal.
#include <iostream>
#include <string>
#include <ctime>
#include <algorithm>
#include <vector>
using namespace std;
// constants
const int CRED = 3000;
const string CURRENCY = "USD";
// prototypes
bool doRunAgain();
int betMoney(int &x);
string startGame();
void showInfo(int &x, int &y);
int main()
{
//using clock for randomgenerator
srand(time(0));
// Variabels
int pot = 0;
int usrR = 0;
int cmpR = 0;
// Money account
int usrAcc = CRED;
int cmpAcc = CRED;
// main program loop
do
{
cout << endl;
showInfo(usrAcc, cmpAcc);
pot = betMoney(usrAcc);
usrAcc -= pot;
cmpAcc -= pot;
pot += pot;
for (int i = 0; i < 3; i++)
{
string str = startGame();
if (str == "usr")
usrR++;
else if (str == "cmp")
cmpR++;
else
{} // nothing, just for demonstration
if (cmpR == 2 || usrR == 2)
i = 3;
}
if (cmpR == 2)
{
cout << endl << "Computer won. Pot goes to computer!" << endl;
cmpAcc += pot;
}
else if (usrR == 2)
{
cout << endl << "You won. You win the pot!" << endl;
usrAcc += pot;
}
else
{
cout << endl << "Game was a tie. Money transfered back to players." << endl;
usrAcc += pot/2;
cmpAcc += pot / 2;
}
cmpR = 0;
usrR = 0;
if (cmpAcc <= 0)
{
cout << "Computer have no money left. You won!" << endl;
cout << "Computers mobfriends added some more money!" << endl;
cmpAcc += CRED;
}
else if (usrAcc < 0)
{
}
cout << endl;
} while (doRunAgain());
return 0;
}
string startGame()
{
vector<int> usr;
vector<int> cmp;
usr.push_back(rand() % 6 + 1);
usr.push_back(rand() % 6 + 1);
cmp.push_back(rand() % 6 + 1);
cmp.push_back(rand() % 6 + 1);
sort(usr.begin(), usr.end(),
[](const int& left, const int& right)
{
return left < right;
});
sort(cmp.begin(), cmp.end(),
[](const int& left, const int& right)
{
return left < right;
});
if (cmp[1] == usr[1])
return "equal"; //not using this anyway
else if (cmp[1] > usr[1])
return "cmp";
else
return "usr";
}
int betMoney(int &x)
{
string bet;
while (true)
{
if (x < 100)
{
cout << "Your out of money. Please write 'ADD500' to add 500 " << CURRENCY << "." << endl;
}
cout << "Bet:\n1 = 100\n3 = 300\n5 = 500" << endl;
cout << "Your choice: ";
getline(cin, bet);
if (bet == "1")
return 100;
else if (bet == "3")
return 300;
else if (bet == "5")
return 500;
else if (bet == "ADD500")
x += 500;
else
cout << endl << "Wrong choice or out of money! Please try again.\n" << endl;
}
}
bool doRunAgain()
{
string ch;
cout << "Do you want to play again? (y/n): ";
while (true)
{
getline(cin, ch);
transform(ch.begin(), ch.end(), ch.begin(), ::toupper);
if (ch == "Y")
return true;
else if (ch == "N")
return false;
else
cout << "Please enter (y)es or (n)o: ";
}
}
void showInfo(int &x, int &y)
{
cout << "Stats: " << endl;
cout << "Player: " << x << CURRENCY << endl;
cout << "Computer: " << y << CURRENCY << endl;
cout << endl;
}