UU | IT | OOP med Java våren 2025

Uppgift 2 - Spela Nm


Mål

Målet för denna uppgift är att

Spelet Nm

Din uppgift är att skriva ett program som spelar en variant av det klassiska spelet Nim, låt oss kalla det Nm.

Nm spelas av två spelare. Man har en hög med ett antal stickor. Spelarna turas om att ta stickor från högen. En spelare måste ta minst en sticka och ej mer än hälften av stickorna. Den spelare som ej kan utföra sitt drag (ta minst en sticka från högen) förlorar. Så den sista stickan plockas aldrig.

Implementation

Idén är att använda arv/polymorfi för att låta den del av programmet som representerar spelet interagera med den mänskliga spelaren och datorspelaren på samma sätt. Samma program ska med små ändringar kunna användas för att låta två människor spela mot varandra, eller låta datorspelaren spela mot sig själv.

Det här är tänkt att vara en ganska enkel uppgift; det ska gå att implementera uppgiften med drygt hundra rader kod och det är ingen detalj som är särskilt krånglig att få till.

OOP

Som sagt, ett av målen med uppgiften är att ge en första inblick i objektorienterad programmering och att ge ett tillfälle att arbeta med OOP design. Några saker du bör tänka på:

Tips

Tips 1: Om du tycker att det är svårt att hitta en bra objektorienterad lösning på en gång kan det vara lättare att först fokusera på att få ihop nåt som fungerar och sedan hitta en bra objektorienterad organisation.

Tips 2: Exempel på ett program som läser på kommandoraden och ett program som läser från standard input.

Tips 3: Hälften av 5 är 2.5. Om fem stickor återstår kan den som står på tur endast dra en eller två stickor (minst en sticka, ej mer än 2.5). Om en sticka återstår går det inte att utföra ett drag och den som står på tur förlorar.

Redovisning

Till denna uppgift förväntar jag mig en rapport enligt beskrivningen på uppgiftssidan. Olika designbeslut ska redovisas. Exempel på vad som bör tas upp: