Permalänk

C++ Hjälp! (nybörjare)

Jag skall skapa ett spel där datorn vs användare skall kasta två tärningar var, högsta individuella tärning vinner. Jag har fastnat på när jag ska jämföra de olika kasten, alltså utse en vinnare. Hur går jag tillväga? Jag är nybörjare har hållit på i en vecka ca. Kan någon duktigt, ge mig lite råd? Om vad som borde ändras/göra om i koden? och även hjälpa mig med hur jag tar mig vidare i problemet jag nämnde ovan.

//
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int balance;
int deposit = 0;
int bet;
string namn;
int kastad_tarning1,kastad_tarning2,kastad_tarning3,kastad_tarning4;
int resultat1 = kastad_tarning1;
int resultat2 = kastad_tarning2;
int resultat3 = kastad_tarning3;
int resultat4 = kastad_tarning4;

int tarning ()
{
int slumptal;
slumptal = rand() % 6 + 1;
return slumptal;
}

int main ()
{

cout<<"_______________________________________________"<<endl;

cout << "Hello and welcome!"<<endl;
cout << "What's your name?"<<endl;
cin >>namn;

cout << "Please make a deposit (min 100, max 5000)"<< endl;
cin >> deposit;

if (deposit <= 5000 && deposit >= 100)
{
balance = +deposit;
cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl;
}

while (deposit > 5000 || deposit<100)
{

cout << "The amount you entered isn't valid, please try again"<<endl;
cin >> deposit;

if (deposit <= 5000 && deposit >= 100)
{
balance = +deposit;
cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl;
}

}

cout <<"Please make a bet, 100, 300 or 500"<<endl;
cin >> bet;

while(bet > balance)
{
cout <<"Your balance is too low, your balance is "<<balance<<""<<endl;
cin>>bet;
}

while (bet != 100 && bet!=300 && bet!=500)
{
cout<< "Please make another bet"<<endl;
bet = 0;
cin>> bet;

}

if (bet == 100 || bet ==300 || bet == 500){
balance = balance - bet;
cout <<"You bet "<<bet<<""<<endl;

}

srand(time(0));
kastad_tarning1=tarning();
kastad_tarning2=tarning();
kastad_tarning3=tarning();
kastad_tarning4=tarning();

cout<<"Your dice "<<kastad_tarning1<<""<<endl;
cout<<"Your dice "<<kastad_tarning2<<""<<endl;
cout<<"________________________________________"<<endl;
cout<<"Computers dice "<<kastad_tarning3<<""<<endl;
cout<<"Computers dice "<<kastad_tarning4<<""<<endl;

resultat1 = kastad_tarning1;
resultat2= kastad_tarning2;
resultat3= kastad_tarning3;
resultat4 = kastad_tarning4;

}

Permalänk
Medlem

Utan att titta på koden så kan jag säga att du behöver spara det högsta tärningskastet från båda spelarna. Sedan kan du jämföra dessa 2 spelares högsta tärningskast för att utse en vinnare.

Visa signatur

Dator: (Kommer senare)

Permalänk

Hur gör jag?

Permalänk
Medlem

Här är koden med forumets code-tagg (fast det syns uppenbarligen inte om man citerar någon )

Skrivet av BinaryBard:

#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int balance; int deposit = 0; int bet; string namn; int kastad_tarning1,kastad_tarning2,kastad_tarning3,kastad_tarning4; int resultat1 = kastad_tarning1; int resultat2 = kastad_tarning2; int resultat3 = kastad_tarning3; int resultat4 = kastad_tarning4; int tarning () { int slumptal; slumptal = rand() % 6 + 1; return slumptal; } int main () { cout<<"_______________________________________________"<<endl; cout << "Hello and welcome!"<<endl; cout << "What's your name?"<<endl; cin >>namn; cout << "Please make a deposit (min 100, max 5000)"<< endl; cin >> deposit; if (deposit <= 5000 && deposit >= 100) { balance = +deposit; cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl; } while (deposit > 5000 || deposit<100) { cout << "The amount you entered isn't valid, please try again"<<endl; cin >> deposit; if (deposit <= 5000 && deposit >= 100) { balance = +deposit; cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl; } } cout <<"Please make a bet, 100, 300 or 500"<<endl; cin >> bet; while(bet > balance) { cout <<"Your balance is too low, your balance is "<<balance<<""<<endl; cin>>bet; } while (bet != 100 && bet!=300 && bet!=500) { cout<< "Please make another bet"<<endl; bet = 0; cin>> bet; } if (bet == 100 || bet ==300 || bet == 500){ balance = balance - bet; cout <<"You bet "<<bet<<""<<endl; } srand(time(0)); kastad_tarning1=tarning(); kastad_tarning2=tarning(); kastad_tarning3=tarning(); kastad_tarning4=tarning(); cout<<"Your dice "<<kastad_tarning1<<""<<endl; cout<<"Your dice "<<kastad_tarning2<<""<<endl; cout<<"________________________________________"<<endl; cout<<"Computers dice "<<kastad_tarning3<<""<<endl; cout<<"Computers dice "<<kastad_tarning4<<""<<endl; resultat1 = kastad_tarning1; resultat2= kastad_tarning2; resultat3= kastad_tarning3; resultat4 = kastad_tarning4; }

Dold text

1. Använd gärna code-taggarna för att gör det snyggare
2. Jag är Noob inom programmering också.
3. Varför är detta före "int main()"?

int balance; int deposit = 0; int bet; string namn; int kastad_tarning1,kastad_tarning2,kastad_tarning3,kastad_tarning4; int resultat1 = kastad_tarning1; int resultat2 = kastad_tarning2; int resultat3 = kastad_tarning3; int resultat4 = kastad_tarning4;

3. Varför är detta ens med?

int resultat1 = kastad_tarning1; int resultat2 = kastad_tarning2; int resultat3 = kastad_tarning3; int resultat4 = kastad_tarning4;

Visa signatur

Citera för svar!

Permalänk

Vore nog helt klart enklare om du körde den med störst total summa vinner - men det är bara en fotnot. Är även jag en riktig lekman när det gäller c++, så ska nog inte ens försöka.

Permalänk

Ändrade det nu

Permalänk

#simon253
Tog bort det nu, blev ju en sorts dubblering!

Permalänk

#sneakybutcher
Kan inte, har fått en antal instruktioner som man måste följa :/ hade jag bara haft totala summan hade det varit mycket enklare

Permalänk

jag vet inte hur kodningen ska se ut för hur jag jämför vem som vinner, blir galen...

Permalänk
Medlem

int resultat1 = kastad_tarning1; int resultat2 = kastad_tarning2; int resultat3 = kastad_tarning3; int resultat4 = kastad_tarning4;

Byt ut ovanstående mot

int resultat; int hogst1; int hogst2; /*Användarens högsta tärningskast*/ if(kastad_tarning1>=kastad_tarning2) hogst1 = kastad_tarning1; else hogst 1 = kastad_tarning2; /*Sedan forsätter man bara med jämförelsen för datorns tärningskast och till slut för att utse vinnaren.*/

Edit: Det är inte hela lösningen men du måste väl ha någon typ av bok för den här programmeringskursen!

Visa signatur

Dator: (Kommer senare)

Permalänk
Medlem

Tänkte nämna att du behöver jämföra om båda har samma tal och meddela om att ingen är vinnare.

Visa signatur

Dator: (Kommer senare)

Permalänk
Medlem
Skrivet av BinaryBard:

jag vet inte hur kodningen ska se ut för hur jag jämför vem som vinner, blir galen...

Oft: Använd "Citera" knappen när du replyar så dem hittar tillbaka.

om du använder VS2012 måste du nog ha med #include "stdafx.h" ,annars kanske #include <string> Vilket bibliotek använder du? VisualStudios?

Visa signatur

Chassi:BeQuietDarkBase900Pro PSU:BeQuietDarkPowerPro1000w Moderkort:AsusZ170ProGamingAURA
CPU:i7-6700K 4.2Ghz Kylare:BeQuiet!SilentLoop240mm Ram:Corsair 32GB DDR4 3200MHz Vengeance
GPU:AsusRadeonRX5700XT8GBRogStrixGamingOC SSD:Corsair 2x120GB, M.2 1TB HDD:Seagate/WD->30TB Skärmar:3xBenQ 24" LCD G2450HM, LG 65"UHD65UM7100 OS:W10
Tillbehör:LogitechG915,G915TKL,ProX,G502,MxMaster3,G930,Z906,G510,K350,M705,G440,C922Pro,MionixNaos3200,5000,7200,8200,NaosQG
Mobiler:Xperia 1 III,Xperia1,SonyZ5 🎮 🖥️ ⌨️ 🖱️ 🎧

Permalänk
Medlem

Damn...Bassic hann före, var just en sådan lösning jag tänkte skriva ner.

Däremot motsätter jag mig konventionen att dels ha variabelnamn på både Svenska och Engelska blandat, och dels variabelnamn öht på Svenska (speciellt när det dessutom är text på Eng.), kanske bara är jag eller vanesak men det blir också svårläst när åäö inte är med (vilket det definitivt inte ska vara, så plus för det).

Personligen hade jag skrivit: rolledDice1(alt.One) etc. lr userDice1 computerDice1 etc.

men egentligen ska jag väl inte vara så petig, du använder dig iaf konsekvent av samma stil vilket nog bör vara det viktigaste

Permalänk

DarkCC, har använt mig utav både språken mest för att komma ihåg själv. När jag lämnar in den så blir allt på engelska! Tror jag kommit fram till en bra lösning på koden:

srand(time(0));
kastad_tarning1=tarning();
kastad_tarning2=tarning();
kastad_tarning3=tarning();
kastad_tarning4=tarning();

cout<<"Your dices = "<<kastad_tarning1<<" & "<<kastad_tarning2<<""<<endl;
cout<<""<<endl;
cout<<"Computer dices = "<<kastad_tarning3<<" & "<<kastad_tarning4<<""<<endl;

cout<<""<<endl;

if (kastad_tarning1>kastad_tarning2)
{
resultat1=kastad_tarning1;
}
else
{
resultat1=kastad_tarning2;
}

if (kastad_tarning3 > kastad_tarning4)
{
resultat2 =kastad_tarning3;
}
else
{
resultat2=kastad_tarning4;
}

if (resultat1 > resultat2)
{
cout<<"Du vann omgången!"<<endl;

}
else{
cout<<"Du förlorade,tyvärr!"<<endl;

}

cout<<""<<endl;

}

Permalänk

En fråga, hur upprepar jag själva kastningmomentet, måste jag skriva samma kod en gång till eller kan jag loopa tillbaka till "första kast-momentet"?

Permalänk
Medlem
Skrivet av BinaryBard:

En fråga, hur upprepar jag själva kastningmomentet, måste jag skriva samma kod en gång till eller kan jag loopa tillbaka till "första kast-momentet"?

Osäker på om jag förstår dig rätt men du kan använda do-while sats för att köra delar av programmet upprepade gånger. typ:
do
{
kastningsmomentent (hela koden i princip)
}
while (1 == 1)

Permalänk
Medlem

Kontrollera om du behöver köra srand(time(0)); innan varje tärningskast med!

Visa signatur

Dator: (Kommer senare)

Permalänk

Så ser koden ut nu, något förslag på vad man kan ändra?

//
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main (){

int balance;
int deposit = 0;
int bet;
int userDice1,userDice2,compDice1,compDice2;
int result1;
int result2;
int user_win;
int comp_win;
string namn;

srand(time(0));

cout << "Welcome too , here are some instructions about the game!"<<endl; //Instruktioner
cout<<"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "<<endl;
cout<<"* Computer and user throws two dices each\n* Highest individual dice wins\n* Best of three rounds\n* Two rounds won, the third will not be played\n* Equal highest score = Computer wins"<<endl;
cout<<"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "<<endl;

cout<<""<<endl;

cout << "Please enter your name"<<endl;
cin >>namn;

cout<<"___________________________________________________________________"<<endl;
cout<<""<<endl;

cout << "Please make a deposit (min 100, max 5000)"<< endl;
cin >> deposit;

if (deposit <= 5000 && deposit >= 100)
{
balance = +deposit;
cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl;
}

while (deposit > 5000 || deposit<100)
{

cout << "The amount you entered isn't valid, please try again"<<endl;
cin >> deposit;

if (deposit <= 5000 && deposit >= 100)
{
balance = +deposit;
cout<<"Your deposit succeded your current balance is "<<balance<<" "<<endl;
}

}

cout<<"___________________________________________________________________"<<endl;
cout<<""<<endl;

cout <<"Please make a bet, 100, 300 or 500"<<endl;
cin >> bet;

while(bet > balance)
{
cout <<"Your balance is too low, your balance is "<<balance<<""<<endl;
cin>>bet;
}

while (bet != 100 && bet!=300 && bet!=500)
{
cout<< "Please make another bet"<<endl;
bet = 0;
cin>> bet;
}

if (bet == 100 || bet ==300 || bet == 500)
{
balance = balance - bet;
cout <<"You bet "<<bet<<" your balance is now "<<balance<<""<<endl;
}

cout<<"___________________________________________________________________"<<endl;
cout<<""<<endl;

cout<<" * R E S U L T *"<<endl;

while (comp_win < 2 && user_win <2)
{

userDice1=rand() % 6 + 1;
userDice2=rand() % 6 + 1;
compDice1=rand() % 6 + 1;
compDice2=rand() % 6 + 1;

cout<<""<<endl;
cout<<"___________________________________________________________________"<<endl;
cout<<""<<endl;
cout<<"User = "<<userDice1 <<" & "<<userDice2<<""<<endl;
cout<<"Computer = "<<compDice1<<" & "<<compDice2<<""<<endl;
cout<<""<<endl;

if (userDice1 > userDice2)
{
result1=userDice1;
}
else
{
result1=userDice2;
}

if (compDice1 > compDice2)
{
result2 =compDice1;
}
else
{
result2=compDice2;
}

if (result1 > result2)
{
user_win++;
cout<<"Comp = "<<comp_win<<" Win/s"<<endl;
cout<<"User = "<<user_win<<" Win/s"<<endl;
cout<<""<<endl;
}

else
{
comp_win++;
cout<<"User = "<<user_win<<" Win/s"<<endl;
cout<<"Comp = "<<comp_win<<" Win/s"<<endl;
}

}

cout<<""<<endl;
cout<<"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"<<endl;
if ( comp_win ==2)
{
balance = balance;
cout<<"You lost "<<bet<<""<<endl;
cout<<"Balance = "<<balance<<""<<endl;
}

else
{
balance = balance+bet+bet;
cout<<"You won "<<bet<<""<<endl;
cout<<"Balance = "<<balance<<""<<endl;
}

cout<<"___________________________________________________________________"<<endl;

}

Permalänk
Medlem
Skrivet av BASSiC:

Kontrollera om du behöver köra srand(time(0)); innan varje tärningskast med!

Nej, det där är ett vanligt nybörjarfel, srand bör endast anropas en gång i programmet för att seeda slumpgeneratorn. time har oftast en upplösning på en sekund, så om srand(time(0)) anropas före varje tärningskast så kommer alla tärningskast inom en sekund få samma resultat.

Permalänk
Medlem

Funktioner om du behärskar det koden blir mycket snällare och inte så lång

Permalänk
Medlem
Skrivet av perost:

Nej, det där är ett vanligt nybörjarfel, srand bör endast anropas en gång i programmet för att seeda slumpgeneratorn. time har oftast en upplösning på en sekund, så om srand(time(0)) anropas före varje tärningskast så kommer alla tärningskast inom en sekund få samma resultat.

Har ingen aning om hur skiten funkar rekommenderade bara att han skulle kontrollera hur det e...

Visa signatur

Dator: (Kommer senare)