Obligatorisk uppgift 2 Yatzy - Institutionen för

Specifikation
2015-09-15
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 2
Sid 1 (5)
Obligatorisk uppgift 2 Yatzy Introduktion Yatzy är ett tärningsspel med 5 sexsidiga tärningar som uppfanns på 1950-talet. Rättigheterna till spelet
köptes 1956 upp av spelmakaren Edwin S. Lowe från ett kanadensiskt par som spelade spelet på sin yacht.
Antalet deltagare är obegränsat och vinnare blir den deltagare som uppnått högst poängsumma efter spelets
slut. I den här laborationen ska du skriva ett program som innehåller några funktioner som kan användas om
man vill utveckla ett fullständigt Yatzy-spel. Laborationen ska lösas enskilt.
Syfte Syftet med uppgiften är att träna på:
• Arrayer
• Olika typer av loopar
• Funktioner
Uppgift Din uppgift är att skriva ett antal funktioner som kan användas i ett Yatzy-spel. Funktionerna ska användaren
kunna använda via ett kommandoradsbaserat gränssnitt. I ditt program ska användaren kunna välja mellan
följande handlingar:
• Visa menyn med vilka val som kan göras
• Slå ett slumpmässigt slag och då även kunna välja vilket frö (seed) som ska användas till
slumptalsgeneratorn
• Skriva in värden för de fem tärningarna
• Visa slagets tärningsvärden på skärmen
• Bestämma slagets värde med avseende på tretal och liten stege.
Definierade konstanter Följande definierade konstanter ska användas, värdena får ej ändras:
const int nrOfDice = 5;
const int nrOfDieValues = 6;
nrOfDice anger antalet tärningar som finns och nrOfDieValues anger antalet värden per tärning (1-6).
Konstanterna ska finnas i början på main-funktionen där variabler deklareras.
Funktionsdeklarationer Följande funktionsdeklarationer ska användas:
void printMenu(void);
void throwDice(int dice[], int nrOfDice, int nrOfDieValues);
void readDieValues(int dice[], int nrOfDice);
void printDice(const int dice[], int nrOfDice);
void printScores(const int dice[], int nrOfDice, int nrOfDieValues);
int isThreeOfAKind(const int dieValues[], int nrOfDieValues);
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 2
Specifikation
2015-09-15
Sid 2 (5)
int isSmallStraight(const int dieValues[], int nrOfDieValues);
Funktionen printMenu ska endast skriva ut menyn med de val som användaren kan göra. Algoritm:
• Skriv ut menytexten
Funktionen throwDice ska ta emot en array dice som representerar nrOfDice tärningar. I funktionen ska
en slumptalsgenorator (rand) användas för att ge slumpmässiga värden till tärningarna. Slumptalsgeneratorn
använder sig av ett frö som ger ett startvärde för den slumpmässiga talsekvensen. För att de slumpmässiga
värdena ska vara mellan 1 och 6 (nrOfDieValues) används %-operatorn som ger resten vid heltalsdivision.
Algoritm:
• Fråga efter ett frö till slumptalsgeneratorn (om en 1:a anges ska ett slumpmässigt frö användas)
• Initiera slumptalsgeneratorn
• För varje tärning
o Ta fram ett slumptal mellan 1 och 6 (nrOfDieValues)
Funktionen readDieValues läser in värden för tärningarna i arrayen dice från tangentbordet. nrOfDice
anger hur många tärningar som arrayen representerar. Algoritm:
• För varje tärning
o Läs in ett tärningsvärde
Funktionen printDice skriver ut värden för de nrOfDice tärningarna i arrayen dice. Algoritm:
• För varje tärning
o Skriv ut tärningens värde
Funktionen printScores tar emot en array dice som representerar nrOfDice tärningar. I funktionen
undersöks vilka värden som tärningarna representerar, samt vilka poäng tärningarna kan ge med avseende på
tretal och liten stege. nrOfDieValues innehåller antalet värden en tärning kan representera. Algoritm:
• Skapa och nollställ en array där varje arrayelement representerar ett tärningsvärde
• För varje tärning
o Räkna upp dess tärningsvärdes position i den nya arrayen med 1
• Kontrollera om det finns ett tretal och skriv ut resultatet (tärningsvärde och poäng (tärningsvärdet
gånger 3))
• Kontrollera om det finns en liten stege och skriv ut resultatet (tärningsvärde och poäng (summan av
tärningsvärdena, dvs 15))
Funktionen isThreeOfAKind tar emot en array dieValues som innehåller antalet av varje tärningsvärde
som fanns i slaget. nrOfDieValues innehåller antalet värden en tärning kan representera. Om ett tretal
finns returnerar funktionen tärningsvärdet som gav ett tretal, annars returneras 0. Funktionen behöver bara
klara av normalfallet, dvs att arrayen dieValues representerar 6 tärningsvärden samt att spelet innehåller 5
tärningar. Algoritm:
• För varje tärningsvärde
o Kolla om det fanns 3 eller flera tärningar som hade detta värde
o Om så var fallet returnera tärningsvärdet
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 2
Specifikation
2015-09-15
Sid 3 (5)
• Om inget tretal fanns returnera 0
Funktionen isSmallStraight tar emot en array dieValues som innehåller antalet av varje värde som
fanns i slaget. nrOfDieValues innehåller antalet värden en tärning kan representera. Funktionen behöver
bara klara av normalfallet, dvs att arrayen dieValues representerar 6 tärningsvärden. Om en liten stege
finns returneras 1, annars returneras 0. Algoritm:
• Kolla om alla element i arrayen som representerar tärningsvärdena 1 till 5 har värdet 1
• Om så är fallet returnera 1, annars 0
Huvudfunktionen main ska använda sig av följande algoritm:
• Skriv ut menyn
• Så länge inte användaren vill avsluta (med -1)
o Fråga efter användarens val och läs in det
o Anropa aktuell funktion
o Om användaren gör ett felaktigt val
§ Skriv ut at det var ett ogiltigt val
§ Skriv ut menyn
All text som skrivs ut från programmet ska se ut som exempelutskrifterna nedan.
Krav på lösningen Här nedan finns det ett antal krav som programmet ska uppfylla:
• Källkoden ska vara kommenterad. Kommentarerna ska tydliggöra hur programmet fungerar. Det ska
finnas beskrivande text som förklarar programmets syfte och funktion, förväntad indata och utdata
ska beskrivas. I den beskrivande texten ska du även skriva ditt namn och din cs-användare. Vidare
ska det finnas beskrivande text för varje enskild funktion som förklarar vad funktionen gör, vad som
krävs för att funktionen ska fungera korrekt och vilken effekt funktionen har.
• Källkoden ska vara väl indenterad.
• De specificerade funktionsdeklarationerna får inte ändras.
• All utskrift på skärm ska se exakt ut som enligt nedanstående exempel.
• I funktionerna isThreeOfAKind och isSmallStraight ska ingen utskrift till skärm ske.
• Vid deklaration av villkor i loopar ska de definierade konstanterna användas.
• Kommandona goto och longjmp får ej användas.
• Källkodsfilen ska heta ou2.c.
• Programmet ska kompileras med kompilatorn gcc med flaggorna –Wall och –std=c99.
Resurser Till ert förfogande för att lösa uppgiften finns det ett antal datorer och ett antal handledningstillfällen i
laborationssal (tider framgår i respektive grupps schema). Det är tillåtet att lösa laborationen på annan plats,
till exempel hemma, men tänk på att programmet ska kompileras och vara körbart på institutionens
linuxdatorer.
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 2
Specifikation
2015-09-15
Sid 4 (5)
Redovisning Uppgiften redovisas genom att lämna in källkodsfilen via webbgränssnittet, se adress på kursens hemsida,
senast den tid som anges på websajten.
Tips Här följer några tips som kan hjälpa till:
• Börja med att förstå uppgiften, vad ska göras, vilka krav finns det, vad ska lämnas in, etc.
• Implementera interaktionsdelen, dvs se till att menyn kan skrivas ut och ett val kan läsas in från
användaren.
• Utveckla programmet stegvis, en funktion/funktionalitet i taget. Fundera på i vilken ordning du ska
implementera de olika delarna.
• Försök att testa varje steg utförligt innan nästa steg tas och kom ihåg att testa att tidigare steg
fortfarande fungerar när nästa steg testas.
• När du vill ha hjälp av handledare, var beredd på att först förklara vad du vill uppnå/göra och hur du
tänkt göra det i koden.
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 2
Specifikation
2015-09-15
Sid 5 (5)
Exempel på utskrift MENU:
0. Display the menu
1. Make a random throw
2. Enter die values for a throw
3. Display the die values for the throw
4. Display the score for the throw
-1. End program
Make your choice: 3
Your dice: 0 0 0 0 0
Make your choice: 1
Enter seed (1 gives a random seed): 2
Make your choice: 3
Your dice: 4 3 1 6 1
Make your choice: 1
Enter seed (1 gives a random seed): 1
Make your choice: 3
Your dice: 6 3 1 4 4
Make your choice: 4
No three of a kind
No small straight
Make your choice: 2
Die 1: 1
Die 2: 2
Die 3: 3
Die 4: 4
Die 5: 5
Make your choice: 3
Your dice: 1 2 3 4 5
Make your choice: 4
No three of a kind
Small straight: 15 points
Make your choice: 2
Die 1: 2
Die 2: 4
Die 3: 5
Die 4: 4
Die 5: 4
Make your choice: 3
Your dice: 2 4 5 4 4
Make your choice: 4
Three of a kind: 4:s, 12 points
No small straight
Make your choice: 0
MENU:
0. Display the menu
1. Make a random throw
2. Enter die values for a throw
3. Display the die values for the throw
4. Display the score for the throw
-1. End program
Make your choice: 5
Invalid choice!
MENU:
0. Display the menu
1. Make a random throw
2. Enter die values for a throw
3. Display the die values for the throw
4. Display the score for the throw
-1. End program
Make your choice: -1
The program is finished