---
# System prepended metadata

title: 'Programmering 1: Tärningsspel'

---

# Programmering 1: Tärningsspel

I det här projektet ska vi öva på att skriva kod för att bygga ett lite större program.

Vi ska bygga ett enkelt tärningsspel i som spelas i konsolen, baserat på spelet Blackjack. Projektet är upplagt så att vi först ska bygga de grundläggande funktionerna, och i mån av tid kan vi utveckla programmet med fler funktioner.

### Spelregler

Spelet spelas mellan en spelare och en datorstyrd spelare, och spelas över ett antal rundor. Varje runda får spelaren välja om hen vill fortsätta slå tärningen, eller stanna. Slår man tärningen läggs tärningskastet till på ens poäng, väljer man att stanna så stannar man på den poängen. Dealern gör samma sak, och den som i slutet av spelet har närmast 21 poäng, utan att vara över 21, vinner. 
En exempelkörning av programmet kan se ut så här:


```
Välkommen till spelet 21!

Vill du slå eller stanna?
slå
Du slog: 1, din poäng är: 1
Dealern slog:  3, dealerns poäng är: 3

Vill du slå eller stanna?
slå
Du slog: 2, din poäng är: 3
Dealern slog:  4, dealerns poäng är: 7

[...]

Vill du slå eller stanna?
slå
Du slog: 2, din poäng är: 19
Dealern slog:  5, dealerns poäng är: 18

Vill du slå eller stanna?
stanna
Dealerns poäng är: 18 och har stannat

Dina poäng: 19
Dealerns poäng: 18
Du var närmare 21 än dealern, du har vunnit!
```

### Del 1: Sätt upp projektet

Öppna visual studio 2022 och skapa ett nytt projekt. Samma inställningar som vi brukar:
* Console App
* Ett relevant namn, till exempel DiceGame
* Kryssa i "Do not use top-level statements"

### Del 2: Tärningskast

För att genomföra ett tärningskast vill vi generera ett slumpat tal mellan 1 och 6. Det kan vi göra på följande sätt:

```csharp
Random rand = new Random();
int randomNumber = rand.Next(1,7);
```

Här skapar vi alltså ett `Random` objekt som vi kallar för `rand`. Vi kan då använda metoden `rand.next(a,b)` som tar in två heltal a och b, som returnerar ett slumptal mellan a (inklusive) och b (exklusive).

*Testa gärna koden ovan och skriv ut resultatet med `Console.WriteLine()`*

### Del 3: Spelaren

Börja med att skapa funktion för att låta spelaren kasta en tärning tills den skriver stanna. Efter varje tärningskast ska tärningskastet och den totala summa skrivas ut.

*Tips:*
* Använd en while loop som bryts när använderen skriver stanna
* Ta in användarens svar med `Console.ReadLine()`
* Ha koll på den total summan genom en variabel som skapas innan while-loopen, och som ökas efter varje kast

*Resultat*

```
Välkommen till spelet 21
Vill du slå tärningen eller stanna?
slå
Du slog 6, du har nu 6 poäng
slå
Du slog 3, du har nu 9 poäng
slå
Du slog 4, du har nu 13 poäng
slå
Du slog 2, du har nu 15 poäng
slå
Du slog 6, du har nu 21 poäng
stanna
```

### Del 4: Dealern

Gör på liknande sätt som för spelaren för att låta dealern spela. Dealern ska fortsätta kasta tills summan är 17 eller mer. 

*Resultat*
```
Dealern slog 3, dealern har nu 3 poäng
Dealern slog 4, dealern har nu 7 poäng
Dealern slog 4, dealern har nu 11 poäng
Dealern slog 6, dealern har nu 17 poäng
```

### Del 5: Avgör vinnaren

Efter att spelaren och dealern har genomfört sina kast, avgör vem som har vunnit enligt följande regler:

* Om dealern har över 21 vinner spelaren
* Om spelaren har över 21 har spelaren förlorat
* Om både dealern och spelaren har under 21, så har den med flest poäng vunnit.
* Om det är lika vinner dealen


### Utmaning: Förbättra spelet
Om du har fått ihop ett fungerande spel kan du jobba med att implementera någon eller några av följade förbättringar:

* Just nu kastar spelaren alla sina tärningskast innan dealern börjar. Ändra så att spelaren och dealern turas om att kasta.
* Nu kan det bli så att spelaren och dealern får båda över 21. Ändra så att så fort någon går över 21 avslutas spelet och den andra vinner. 
* Lägg till så att man kan spela igen efter att spelet har avslutats
* Lägg till att varje spelare som inte är dealern, har en pott pengar som man kan satsa. Vinner man får man tillbaka dubbelt, förlorar man förlorar man pengarna man har satsat
* Ändra så att man spelar med kort istället. Dvs att istället för att slå en tärning drar man ett kort med en siffra mellan 1 och 13, och där 11, 12, 13 (knekt, dam och kung) ger 10 poäng.
* Har du nån idé på hur man kan förbättra spelet? Läs mer om reglerna till Blackjack här: https://sv.wikipedia.org/wiki/Black_Jack och implementera någon förbättring.