Obligatorisk uppgift 2 -- DV:s Robot-Garden

Uppgiften skall redovisas i form av en komplett rapport på papper enligt anvisningarna. Rapporten skall vara inlämnad senast Måndagen den 14:e Maj, klockan 15.00.

Du är en handledare på en av Universitetets mer framstående institutioner, och du har som ambition att starta ett robot-projekt. För att visa hur bra det skulle vara med robot-forskning på institutionen, framförallt för att visa att 'det händer saker här', beslutar du dig för att skriva ett simuleringsprogram med en massa små robotar som kan springa runt och uppvisa olika beteenden. Du bestämmer dig för att det bör finnas två olika robot-typer:

Ljus-älskare, som styr mot närmaste ljuskälla,
Ljus-hatare, som skyr ljus och trivs bäst i mörkret.

Dessutom blir robotarna bara hungrigare och hungrigare allteftersom tiden går.

I robotarnas värld finns det också en eller flera ljuskällor, och en eller flera matställen. När en hungrig robot lyckats att ta sig fram till ett matställe så blir den mätt. Hungern kan tydligen också bli så stor att en ljushatare kan övervinna sin rädsla för ljus, och en ljusälskare överge sin kära ljuskälla.

För att du skall kunna prova dina teorier så bestämmer du dig för att robotarna lever i en 'rutig' värld. I varje ruta kan det bara finnas en robot åt gången, och en ruta kan också vara upptagen av en lampa eller ett matställe. Simuleringen skulle kunna gå till så att du går igenom alla robotar en efter en och ser om de skall förflytta sig åt något håll. Förflyttningen beror på avståndet till ljuskällorna och också på hur hungrig roboten är. Du måste också undvika kollisioner med andra robotar, lampor och väggarna runt den rutiga världen. Efter att alla robotar fått möjlighet att förflytta sig (de kan bara röra sig en ruta åt gången i åtta olika riktningar), så skriver programmet ut hur världen ser ut, och så är det dags för en simuleringsomgång till. Du inser också att det skulle vara bra om det gick att spara undan en 'värld' för att kunna ladda in den igen vid ett senare tillfälle för att simulera vidare, så någon form av filhantering blir nödvändig.

Uppgift: Skriv ett simuleringsprogram efter dessa riktlinjer. En lämplig storlek på världen är kanske 20 x 40 rutor med ett par lampor och matställen, och 100 robotar (du får avgöra vad som passar dig), och antingen slumpar du ut robotar, lampor och matställen eller också kan du låta användaren specificera dem. Du kan använda vilken sorts grafik du vill, antingen vanliga bokstäver (kanske R för robot, L för lampa osv) och skriva ut rad efter rad, eller också använder du DOS-grafik eller skriver en Windows-applikation. Vilken metod du använder har ingen betydelse för bedömningen av din lösning. Tänk över hur du skall representera världen och robotarna (eftersom 'datarepresentationen är halva arbetet'), vilka som skall ärva av vilka och hur du skall representera de olika egenskaperna hos robotar och annat som finns i din värld.

Rita också ett klassdiagram över ditt system.

Tips:

Det är lämpligt att beakta avståndet till ljuskällor och matställen och på något sätt väga hunger mot ljusskygghet. Du kan om du vill experimentera med olika funktioner och också sätta gränser för hur starkt ljus en ljusälskare tål, t.ex.

I objektorienterade system är det lämpligt att låta objekten själva utföra det de skall göra, till exempel rita ut sig själv på skärmen eller spara sig själv på en fil. Det är ett annorlunda tankesätt än vid 'vanlig' programmering och tar ett tag att bli van vid, men fundera på hur du kan få dina objekt att bli så självständiga som möjligt. Observera att vi inte godkänner en 'icke-objektorienterad' lösning, typ en matris med heltal som representerar robotar. En matris är kanske den bästa lösningen för att hålla reda på robotarna men den måste i så fall innehålla robot-objekt eller pekare till sådana. Robotarna skall också vara så självständiga som möjligt och huvuddelen av koden skall finnas i dem, undvik att ha ett stort huvudprogram som sköter simuleringen !


Och som vanligt: inga publika attribut och inga globala variabler !