Landsby
Problembeskrivelse
Temaet er en landsby bestående av tomter med veier mellom. På tomtene kan det være parker, hus av ulik art, skulpturer eller andre ting som med rimelig romslighet kan høre hjemme i en landsby.
Vi ønsker å lage en struktur som gjør det enkelt å lage og inkorporere nye slike enheter i en struktur som tegner ut landsbyplaner med valgfrie enheter og valgfri plassering av enhetene.
Hver enhet er tildelt en bokstav, og vi lager en landsbyplan rett og slett ved å skrive inn en tekst. Du kan laste ned og kjøre en demonstrasjon: village03.exe.
Programstruktur
Oppgaven lar seg løse på et utall forskjellige måter. For å forenkle innsamlingen av tomtescener, kalt hus i fortsettelsen, må vi ha noen kjøreregler. De er i all enkelhet slik: Alle hustyper skal beskrives i en klasse som identifiseres med en bokstav. F.eks. hus assosiert med bokstaven f skal implementeres i klassen fHouse og skal distribueres på filene fhouse.h og fhouse.cpp. Alle slike husklasser skal avledes av klassen house.
Hver tomt har et areal på HX x HY, og veier har bredden ROAD. Veier opptrer ved linjeskift og som bredden på space (tomme tomter mellom hus).
Headerfila for house er slik:
house.h
//---------------------------------- // base class for houses // Functionality: // Draw - complete OGL draw of the house // DrawOutline - simple fast OGL-draw // used during movement // PickAction - may be used for inteactive // respons when selected // Members: // origo_X,origo_Y where the ground for // this house is locted // a house has at its disposal HX x HY meters (20 x 20) // b.stenseth nov 2000 #if !defined(BASE_HOUSE) #define BASE_HOUSE #include "stdafx.h" class house : public CObject { public: house(); house(GLfloat x,GLfloat y); ~house(); DECLARE_DYNCREATE(house); GLfloat origo_X; GLfloat origo_Y; virtual void DrawOutline(); virtual void Draw(); virtual BOOL PickAction(); }; #endif // !defined(BASE_HOUSE)
Prosjektet
Du kan laste ned VC++ prosjektet village (se ref), unzippe det og åpne det i Visual Studio. Du kan bruke dette prosjektet både til å utvikle dine egne bidrag og til å teste andres. Her vil du finne følgende klasser:
CMainFrame | Dette er standard klassen som tar seg av hovedvinduet i en MFC-applikasjon. Du trenger ikke editere denne. |
CVillageApp | Dette er selve applikasjonen og meldingspumpa. Du trenger ikke editere denne. |
CVillageDoc | Dette er dokument klassen som tar seg av filhåndtering. Du kan kikke på denne dersom du ønsker at programmet skal kunne skrive/lese landsbyfiler til/fra disk, vilket er en naturlig utvidelse av programmets funksjonalitet. Du trenger ikke editere denne. |
CVillageView | Dette er klassen som tar seg av framvisning. I Village er denne avledet av CFormView slik at vi kan handtere tekstfeltet og knappen på en enkel måte. Du vil editere denne dersom du vil legge til yterligere funksjonalitet. Du trenger ikke editere denne. |
COGLWnd | Dette er en klasse som jeg har skrevet for å introdusere koplingen til OpenGL. Du trenger ikke editere denne, men det kan være lurt å inspisere den. |
CMyScene | Dette er klassen som handterer landsbyen. Denne må du forstå og endre. |
house | Dette er basisklassen for alle husklasser, dine egne og andres. Denne må du ikke editere. |
aHouse | Dette er et minimumsbidrag til landsbyen som belegger bokstaven a. |
NOHouse | Dette er det huset som vises når det skrives inn en bokstav som det ikke er definert noen klasse for. Det er lurt å beholde denne, men den kan editeres. |
I tillegg må du altså lage dine nHouse-klasser avledet av house, der n er en eller annen bokstav.
Prosjektet er brukt som laboratorieøvelse i et kurs for 3.klasse dataingeniørstudenter 2001 og 2002.
- Exe-fil som samler opp bidragene fra 2001, 2002 og 2003: village03.exe
-
Selve skjelettet uten andre hus enn for a er tilgjengelig som zippet VC++ prosjekt:
village.zip(VC++/gml)
village.zip(VC++/.Net)