Obligatorisk uppgift 3 Teaser - Institutionen för

Specifikation
2015-09-21
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 3
Sid 1 (4)
Obligatorisk uppgift 3 Teaser Introduktion Teaser är ett trevligt och enkelt spel. Givet är en spelplan med minst nio rutor, ordnade i minst tre rader och
minst tre kolumner. På dessa är slumpmässigt utplacerade brickor som kan ha ett av två olika värden. Spelet
är vunnet när alla brickor har samma värde förutom mittenbrickan, i figur 1 ses exempel med varierat antal
brickor.
Figur 1: Exempel på när spelet är slut.
Under spelets gång vänder man en bricka i taget, brickan byter då värde. Naturligtvis påverkas inte bara den
bricka man vänder utan även en del andra. Detta sker enligt följande regler:
1. Om man vänder en hörnbricka, så vänds även de tre angränsande brickorna. Se figur 2 för två
exempel.
Figur 2: Exempel på när en hörnbricka vänds. I det vänstra exemplet vänds
brickan som finns på rad 1 och i kolumn 1 (den övre vänstra). I det högra exemplet
vänds brickan som finns på rad 5 och i kolumn 5 (den i nedre högra hörnet).
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 3
Specifikation
2015-09-21
Sid 2 (4)
2. Om man vänder en kantbricka, så vänds även de två närmaste brickorna på den kanten (dvs. en
bricka på varje sida). Se figur 3 för två exempel.
Figur 3: Exempel på när en kantbricka vänds. I det vänstra exemplet vänds brickan
som finns på rad 2 och i kolumn 1. I det högra exemplet vänds brickan som finns
på rad 5 och i kolumn 2.
3. Om man vänder en inre bricka, så vänds även de närmsta fyra brickorna direkt ovanför, nedanför, till
vänster och till höger. Se figur 4 för två exempel.
Figur 4: Exempel på när en inre bricka vänds. I det vänstra exemplet vänds
brickan som finns på rad 2 och i kolumn 2. I det högra exemplet vänds brickan som
finns på rad 2 och i kolumn 4.
I den här obligatoriska uppgiften ska du implementera ett antal funktioner för spelet Teaser. Den
obligatoriska uppgiften ska lösas enskilt.
Syfte Syftet med uppgiften är att träna på:
• Arrayer
• Loopar
• Funktioner
• Egendefinierade datastrukturer
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 3
Specifikation
2015-09-21
Sid 3 (4)
Uppgift Din uppgift är att implementera klart ett enkelt program för spelet Teaser. Till din hjälp har du början till ett
program där huvudfunktionen redan är implementerad. Den tillhandahållna koden innehåller deklarationer
av datastrukturer och funktioner, samt tomma funktionsdefinitioner (förutom viss kod för att undvika
varningar från kompilatorn). I koden finns kommentarer och till respektive funktionsdefinition finns
beskrivande text. Vidare finns det två körbara program som exempel på hur ditt spel ska fungera. Din
uppgift är alltså att skriva färdigt programmet med hjälp av given kod och beskrivande text, samt de två
exemplen på körbara program. Du ska bara skriva kod i de givna tomma funktionsdefinitionerna.
Koden och de två körbara programmen finns tillgängliga från kursens hemsida (koden kompilerar utan fel).
(I senare kurs, Datastrukturer och algoritmer, introduceras dynamisk minneshantering som kan användas
för att skapa en bättre lösning än den givna.)
Krav på lösningen Här nedan finns det ett antal krav som programmet ska uppfylla:
• Given kod ska användas. Ny kod ska bara finnas i de givna tomma funktionsdefinitionerna.
• Den beskrivande texten ska kompletteras med ditt namn, din cs-användare och datum för senaste
ändring i filen. De beskrivande texterna för varje enskild funktion ska ej ändras.
• Källkoden ska vara väl indenterad.
• De givna datatyperna får inte ändras.
• De specificerade funktionsdeklarationerna får inte ändras. Det är tillåtet att använda sig av egna
funktioner, utöver de givna, för att lösa uppgiften (de givna räcker för att lösa uppgiften).
• All utskrift på skärm ska se exakt ut som i de tillhandahållna körbara exemplen, sådant som kan
variera i programmet (exempelvis framslumpad data och antal rader och kolumner) kan ha andra
värden jämfört med exemplet.
• Värden som finns i form av konstanter eller funktionsparametrar får ej hårdkodas.
• De definierade konstanterna ROWS och COLUMNS får ej användas på andra ställen i koden.
• Globala variabler eller ytterligare defines får ej användas.
• Kommandona goto och longjmp får ej användas.
• Källkodsfilen ska heta ou3.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 den obligatoriska uppgiften
på annan plats, till exempel hemma, men tänk på att programmet ska kompileras och vara körbart på
institutionens linuxdatorer.
Redovisning Uppgiften redovisas genom att lämna in källkodsfilen via webbgränssnittet, se adress på kursens hemsida,
senast den tid som anges på kursens websidor.
Umeå universitet, 901 87 Umeå
Institutionen för datavetenskap
Programmering i C, 7,5 hp
Obligatorisk uppgift 3
Specifikation
2015-09-21
Sid 4 (4)
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.
• Skapa algoritmer för samtliga funktioner som ska definieras.
• 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.