// kapplopning.cpp : Defines the entry point for the console application.
// Donerat av Didirk Olsson John Bauergymnasiet i Uddevalla 2011
#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
#include "time.h"
using namespace std;
// Detta är ett spel som först och främst ställer några frågor men leder sedan till
// att man måste spela på kapplöpning, Man har 500 kronor från början och sen när dom tar slut
// dör programmet, jag ger odds till varje häst och sen beroende på om hästen vinner eller inte
// så kommer oddsen påverkas till nästa gång, om du väljer att fortsätta spela.
// Du kan både vinna och förlora pengar! Lycka till =) */
double hastodds[8]={1.9,2.4,2.1,2.0,2.1,2.3,2.2,1.9}; // skapar en array med 8 olika "häst odds"
double lagring[8]; // skapar en array som jag senare i programmet kommer använda till att
// lagra dom talen varje häst får under loppet och som jag sen kommer
// sortera tillsammans med vinnar array nedanför
char *hastnamn[]= {"Mongo","Etertomten", "Floyd","Bountey","Bamse","Lilleskutt","Pollux","Svartablixten"};
// skapar en array med 8 hästnamn i och även med en
//pekare för att senare i programmet kunna peka ut och slumpa hästarna
char hastval;
int vinnare[8]; // skapar en array som jag senare i programmet kommer använda till att
// sortera om samtidigt som lagring för att jag ska kunna se vilken häst som är vilken
int hastval1;
int slumpa() // skapar en funktion som retunerar ett slumptal
{
int slumpa1=rand()%(7); // slumpar ett tal mellan 0 och 7
return slumpa1; // retunerar slumptalet
}
int slumpadodds() // skapar en funktion som retunerar ett slumptal
{
int slumpa2=rand()%(100)+1; // slumpar ett tal mellan 1 och 101
return slumpa2; // retunerar slumptalet
}
void hastar(double *hastodds, char *hastnamn[], char hastval) // Skapar en funktion som inte
// ska retunera något, jag tar med mig några arrayerna hastodds, hastnamn och variabeln hastval.
{
int i;
bool felval=true; // använder mig av en bool true/false
printf("\nVilken h\x84st vill du satsa p\x86?\n"); // skriver ut text med hjälp av printf
for (i=0; i<8; i++) // Gör en for snurra som ökar med 1 och som skriver ut texten neranför
// så länge som i är mindre än 8
{
printf("H\x84st nummer %d, Namn: %s, Odds: %2.2f \n",i+1, hastnamn[i], hastodds[i]);
// använder mig av en printf och skriver även ut några värden från hastnamn och hastodds
}
cout << "Ditt val, h\x84st nummer(1-8):";
while (felval) // gör en while slinga, som snurrar så länge som felval är lika med true,
// när felval är lika med false så börjar den inte om
{
cin >> hastval;
switch (hastval) // använder mig av en switch för att välja häst
{
case '1': // Om användaren skriver 1
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '2': // Om användaren skriver 2
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '3': // Om användaren skriver 3
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '4': // Om användaren skriver 4
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '5': // Om användaren skriver 5
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '6': // Om användaren skriver 6
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '7': // Om användaren skriver 7
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
case '8': // Om användaren skriver 8
felval=false; // ställer om till false och while snurran stoppas eftersom att felval
// inte är lika med true längre
break;
default: // skriver du inte något av numren ovanstående så skriv denna texten ut
// som är nedanför och switchen börjar om igen
cout << "Fel val, F\x94rs\x94k igen (1-8):\n";
break;
}
}
hastval1=atoi(&hastval); // Gör om char hastval1 till en int hastval1
// för att senare i programmet kunna använda hastvalet
}
void tavling(double *hastodds, double *lagring) // Gör en funktion som inte ska retunera något värde,
// jag tar också med mig in arrayerna hastodds och lagring
{
int i;
double x;
int z;
for (i=0; i<8; i++) // Gör en for snurra som ökar med 1 så länge som i är mindre än 8
{
x=slumpadodds()/hastodds[i]; // Tar in ett slumptal från funktionen slumpadodds
// och delar de med hastodds och lägger det i variabeln x
cout << i+1;
for (z=1; z<=x; z++) // skriver ut "-" så länge som z är mindre eller lika med x
{
cout << "-";
}
lagring[i]=x; // flyttar över värdet i x till en array
cout << "\n";
}
}
void vinst(double *lagring, int *vinnare) // Gör en funktion som inte retunerar något värde,
// tar även med mig in i funktionen dom globala arrayerna lagring och vinnare
{
int y=0;
int z=1;
double lokallagring;
int lokallagring1;
bool change=true;
while (change) // Skapar en while slinga som endast snurrar så länge som change är lika med true
{
change=false; // Ändrar till false för att när jag är klar med nästa while slinga
// så vill jag inte att allt ska börja om igen
while (z<8) // så länge som z är mindre än 8
{
if (lagring[y]>lagring[z]) // Om lagring[y] är större än lagring[z]
{
change=true; //jag ändrar till true för att jag vill att första while slingan
// ska börja om, eftersom att inte sorteringen är färdig
lokallagring=lagring[y]; // talet i första platsen lagras i variabeln "lokallagring"
lagring[y]=lagring[z]; // jag anger att andra talet kopierar över första talet/platsen
lagring[z]=lokallagring; // jag tar talet från lokallagring som från början kom från första platsen
// och anger det talet till andra platsen
// jag byter alltså plats på första med andra
lokallagring1=vinnare[y]; // talet i första platsen lagras i variabeln "lokallagring1"
vinnare[y]=vinnare[z]; // jag anger att andra talet kopierar över första talet/platsen
vinnare[z]=lokallagring1; // jag tar talet från lokallagring1 som från början kom från första platsen
// och anger det talet till andra platsen
}
z++; // ökar med 1
y++; // ökar med 1
}
y=0; // nollställer y
z=1; // nollställer z
}
}
int _tmain(int argc, _TCHAR* argv[])
{
double vinnandepengar;
double nyapengar=500; // han har 500 kronor från början
double pengar;
bool ejklarpengar=true;
bool ejklar=true;
bool inteklar=true;
bool omstart=true;
char val1;
char val2;
char spela_igen;
char name[100];
int dinhast;
int i;
int x;
int q;
int z;
srand((unsigned int)time(NULL)); // startar slump generatorn
cout << "Hej vad \x84r ditt namn?";
cin >> name;
printf("Hej %s, Du har pengar som du vill sl\x94sa vad ska du g\x94ra med dem? \n1. K\x94pa en bil \n2. Satsa p\x86 kappl\x94pning \n(1-2):", name);
// skriver ut text med hjälp av printf och tar in variabeln name
while (ejklar) // gör en while slinga som snurrar så länge som ejklar är lika med true
{
cin >> val1;
switch (val1) // gör en switch med två case
{
case '1': // om användaren skriver 1
cout << "Bil aff\x84ren var st\x84ngd idag s\x86 du best\x84mmer dig f\x94r att \x84nd\x86 ta dig till kappl\x94pningen!\n";
ejklar=false; // ställer om till false och while snurran stoppas eftersom att
// ejklar är inte lika med true längre
break;
case '2': // om användaren skriver 2
ejklar=false; // ställer om till false och while snurran stoppas eftersom att
// ejklar är inte lika med true längre
break;
default: // användaren har inte skrivit de ovan, därför skrivs denna texten ut
// och switchen börjar om igen
cout << "Fel val f\x94rs\x94k igen!(1-2):\n";
break;
}
}
cout << "Hur tar du dig till t\x84vlingen? \n1.Bil \n2.G\x86 \n(1-2):";
ejklar=true; // ställer om ejklar till true för att jag ska använda den igen
while (ejklar) // gör en while slinga som snurrar så länge som ejklar är lika med true
{
cin >> val2;
switch (val2) // gör en switch med två case
{
case '1': // om användaren skriver 1
cout << "\nDin bil startar inte och blir tvungen att g\x86! \n";
ejklar=false; // ställer om till false och while snurran stoppas eftersom att ejklar
// är inte lika med true längre
break;
case '2': // om användaren skriver 1
ejklar=false; // ställer om till false och while snurran stoppas eftersom att ejklar
// är inte lika med true längre
break;
default: // användaren har inte skrivit de ovan, därför skrivs denna texten ut
// och switchen börjar om igen
cout << "Fel val, f\x94rs\x94k igen!(1-2):\n";
break;
}
}
dinhast=slumpa(); // Läger ett slumptal från funktionen slumpa i variabeln dinhast
printf ("\nDu tr\x84\x66\x66\x61r en kompis som tipsar om %s \n\n", hastnamn[dinhast]);
// skriver ut text med hjälp av printf och lägger även in en slumpad häst från variabeln hastnamn
while (omstart) // så länge som omstart är lika med true så snurrar slingan om igen
{
for (z=0; z<8; z++) // gör en for snurra som ökar med 1 så länge som z är mindre än 8
{
lagring[z]=z; // tilldelar arrayen lagring med värden, börjar med 0
// och ökar upp till 7 med hjälp av for snurran
vinnare[z]=z; // tilldelar arrayen vinnare med värden, börjar med 0
// och ökar upp till 7 med hjälp av for snurran
// nollställer alla värdena i vinnare och lagring
}
pengar=0; // nollställer pengar
hastar(hastodds, hastnamn, hastval); // anropar funktionen hastar som skriver ut dom olika häst valen
printf("Du har valt h\x84sten: %s, Du har %g kronor. Hur mycket pengar vill du satsa? ", hastnamn[hastval1-1], nyapengar);
// skriver ut text med hjälp av printf och tar med hästen som användaren valde förut,
// jag tar hastval1 minus 1 och med hjälp av de kan jag få fram platsen i arrayen hastnamn
cin >> pengar;
ejklarpengar=true; // nollställer ejklarpengar till true
while(ejklarpengar) // gör en slinga som snurrar så länge som ejklar är lika med true
{
if (nyapengar<pengar) // Om nyapengar/dom 500 kronorna användaren hade från början är mindre än pengar
{
cout << "Du har inte s\x86 mycket pengar, F\x94rs\x94k igen:";
cin >> pengar;
}
if(nyapengar>=pengar) // om nyapengar/dom 500 kronorna användaren hade från början
// är lika med eller mindre än de han valt
{
ejklarpengar=false; // för att komma ur while snurran så ändrar jag till false
}
}
tavling(hastodds, lagring); // anropar funktionen tavling, här skrivs tävlingen ut på skärmen
vinst(lagring, vinnare); // andropar funktionen vinst sorterar vinnare
// jag har sorterat vinnaren så den ligger sist i arrayen
printf("\nF\x94rsta plats: %s \nAndra plats: %s \nTredje plats: %s\n\n", hastnamn[vinnare[7]], hastnamn[vinnare[6]], hastnamn[vinnare[5]]);
// skriver ut text med hjälp av printf, jag tar även in första,
// andra och tredje vinnaren med hjälp av hastnamn och placeringen i arrayen vinnare
if (hastval1-1==vinnare[7]) // om hastval1 minus 1 är lika med vinnare[7] med andra ord om valet användaren gjorde är lika med hästen som kom först
{
vinnandepengar=pengar*hastodds[vinnare[7]]; // jag gångrar hastodds[7] med pengarna som användaren
// tidigare angav att han skulle satsa och lägger dom i en variabel som heter vinnandepengar
nyapengar=nyapengar+vinnandepengar;
// tar vinnande pengar gånger nyapengar och lägger pengarna i nyapengar
printf("Grattis din h\x84st kom p\x86 f\x94rsta plats, du har nu: %gkr\n", nyapengar);
// skriver ut text med hjälp av printf, och tar in variabeln nyapengar
}
if (hastval1-1==vinnare[6]) // om hastval1 minus 1 är lika med vinnare [6] med andra ord
// om valet användaren gjorde är lika med hästen som kom på andra plats
{
vinnandepengar=pengar*hastodds[vinnare[6]]; // jag gångrar hastodds[6] med pengarna som användaren
// tidigare angav att han skulle satsa och lägger dom i en variabel som heter vinnandepengar
nyapengar=nyapengar+vinnandepengar; // tar vinnande pengar gånger nyapengar och lägger pengarna
// i nyapengar
printf("Grattis din h\x84st kom p\x86 andra plats, du har nu: %gkr\n", nyapengar); // skriver ut text
// med hjälp av printf och tar med variabeln nyapengar
}
if (hastval1-1==vinnare[5]) // om hastval1 minus 1 är lika med vinnare [5]
// med andra ord om valet användaren gjorde är lika med hästen som kom på tredje plats
{
vinnandepengar=pengar*hastodds[vinnare[5]]; // jag gångrar hastodds[5] med pengarna som
// användaren tidigare angav att han skulle satsa och lägger dem i en variabel som heter vinnandepengar
nyapengar=nyapengar+vinnandepengar; // tar vinnande pengar gånger nyapengar och lägger pengarna
// i nyapengar
printf("Grattis din h\x84st kom p\x86 tredje plats, du har nu: %gkr\n", nyapengar);
// skriver ut text med hjälp av printf och tar med variabeln nyapengar
}
for (x=0; x<5; x++) // gör en for snurra som ökar med 1 så länge som x är mindre än 5
{
if (hastval1-1==vinnare[x]) // om hastval1 minus 1 är lika med vinnare x så skrivs texten nedanför
// ut på skärmen, med hjälp av for snurran så får jag ut alla hästar som
// kom på 4 till 8 plats och slipper skriva massa kod
{
nyapengar=nyapengar-pengar; // tar nyapengar dom som från början var 500 kronor och tar de
// minus de han satsade/pengar och lägger det i nyapengar
printf("\nDu f\x94rlorade och har d\x84rmed bara: %g kr kvar.\n\n", nyapengar);
// skriver ut text med hjälp av printf och tar med in variabeln nyapengar
}
}
hastodds[vinnare[7]]=hastodds[vinnare[7]]-0.3; // Hästen som kom på första plats,
// hans odds minskas med 0.3
hastodds[vinnare[6]]=hastodds[vinnare[6]]-0.2; // Hästen som kom på andra plats,
// hans odds minskas med 0.2
hastodds[vinnare[5]]=hastodds[vinnare[5]]-0.1; // Hästen som kom på tredje plats,
// hans odds minskas med 0.1
for (q=0; q<5; q++) //gör en for snurra som ökar med 1 så länge som q är mindre än 5
{
hastodds[vinnare[q]]=hastodds[vinnare[q]]+0.1; // Hästarna som kom på 4 till 8 plats
// ökar sin odds med 0.1
}
for (i=0; i<8; i++) // gör en for snurra som ökar med 1 så länge som i är mindre än 8
{
if (hastodds[i]<1) // om hastodds är mindre än 1
{
hastodds[i]=hastodds[i]+0.4; // så ökar jag hästens odds med 0.4
printf("\n%s vinner f\x94r mycket, h\x84stens odds kommer \x94ka", hastnamn[i]);
// skriver ut texten med hjälp av printf och tar även med hästnamnet med in
}
}
if (nyapengar<=0) // om nyapengar är mindre än eller lika med 0
{
cout << "Du har inga pengar kvar, du kommer sv\x84lta ihj\x84l och d\x94!\n\n";
omstart=false; // avslutar while snurran för att programmet inte ska startas börja om
}
if (nyapengar>0) // Om nyapengar är större än 0 så får användaren en chans
// att köra om programmet igen
{
cout << "\nVill du spela p\x86 kappl\x94pning igen?(J/N):";
ejklar=true; // ställer om ejklar till true för att jag ska använda den igen
while (ejklar) // gör en while slinga som snurrar så länge som ejklar är lika med true
{
cin >> spela_igen;
switch (spela_igen) // gör en switch med 4 case
{
case 'J': // om användaren skriver J
case 'j': // om användaren skriver j
ejklar=false; // ställer om till false och while snurran stoppas eftersom
// att ejklar är inte lika med true längre
break;
case 'N': // om användaren skriver N
case 'n': // om användaren skriver n
omstart=false; // ställer om omstart till false eftersom att jag inte längre
// vill börja om med while slingan, och där med avslutas programmet
ejklar=false; // ställer om till false och while snurran stoppas eftersom att
// ejklar är inte lika med true längre
break;
default: // användaren har inte skrivit de ovan, därför skrivs denna texten ut
// och switchen börjar om igen
cout << "Fel val, f\x94rs\x94k igen!(J/N):";
break;
}
}
}
}
return 0;
}