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
© Copyright 2024