DEPARTEMENT BEDRIJFSKUNDE BME Schoonmeersstraat 52 9000 GENT ACADEMIEJAAR 2004-2005
PROJECTWERK
STUDENTEN: Bekaert Wannes Claes Peter Debray Thomas
BEGELEIDER: Leen Vuyge
HEROQUEST
1
InhoudsOpgave
1. Inhoudsopgave
2
2. Inleiding
3
3. Analyse en ontwerp
4
4. Uitbreidingen
5
5. Aantrekkelijkheid
6
6. Uitbreiding, zwakke en sterke punten
7
7. Besluit
8
8. Bronnen
9
9. Verklarende woordenlijst
10
9. Bijlagen
11
• • •
9.1 Klassendiagram 9.2 Doolhof 9.3 Monsters
11 12 12
2
1. Inleiding Om studenten uit het eerste jaar Toegepaste Informatica te kunnen evalueren in hun opleiding, wordt hen de kans gegeven in kleine groepjes aan een project te werken. De projecten die dit jaar ter beschikking staan, zijn “Kinderopvang Nijntje”, “Broodautomaat” en “HeroQuest”. Het project dat wij kozen is het gevechtsspel ‘HeroQuest’, een computerspel dat gebaseerd is op het gelijknamige bordspel ‘HeroQuest’. Dit is een spel waarbij een held van doolhof naar doolhof moet reizen en onderweg allerlei monsters verslaat. Dit project is een uitdaging voor ons omdat er veel bij komt kijken bij komt kijken. Niet alleen een goede uitwerking van de programmacodes, maar ook een nauwe samenwerking is hierbij zeer belangrijk. Bovendien is de code vrij complex en is er de mogelijkheid tot verdere uitbreiding met eigen extra speciale acties of regels. ‘HeroQuest’ leek ons de meest creatieve opdracht van de drie. Binnen onze groep zijn we met drie personen. De samenwerking valt vrij goed mee en we proberen onze programmacodes op dezelfde manier te schrijven zodat ze voor elk lid van de groep duidelijk zijn. We zijn tot een aantal vooraf afgesproken structuren gekomen, zoals opsplitsing, afbakening en groepering van programmacode. Dit vergemakkelijkt de samenwerking. Sommigen binnen de groep zijn wel intensiever met het project bezig dan anderen en niet iedereen heeft dezelfde sterke punten, maar we proberen het werk goed te verdelen. • • •
Thomas’ sterkte ligt vooral bij het programmeren zelf. Hij is degene die een heel groot stuk van het programmeerwerk heeft gedaan. Hij implementeerde ook de nieuwe stukken code van de anderen. Peter heeft grotendeels de aanvalitems en -spreuken geprogrammeerd. Zijn sterkte is eerder grafisch en hij heeft ook een deel van de afbeeldingen gemaakt. Wannes heeft een groot deel van de grafische interface ontworpen, dit is het deel van het spel dat de speler toelaat om zijn gegevens op het scherm weer te geven, of om nieuwe items aan te kopen. Daarnaast heeft hij ook de meeste doolhoven met bijhorende monsters gemaakt.
In ons rapport geven we meer uitleg omtrent de uitwerking van het spel. Ook bepaalde problemen en drempels die we overwonnen hebben zullen we beschrijven. Verder komt er ook een stuk waarin we een deel van onze ideeën en extra uitbreidingen beschrijven, hoewel deze misschien niet allemaal de eindversie van het spel halen. De verschillende fases worden daarna meer in detail besproken. Eerst zullen we bespreken hoe we de opdracht geanalyseerd hebben en de taken verdeeld hebben. Vervolgens zullen we enkele uitbreidingen belichten, alsook hoe we ‘HeroQuest’ zo aantrekkelijk mogelijk hebben gemaakt. We eindigen met de sterke en zwakke punten van ons spel en ons besluit.
3
2. Analyse en ontwerp 2.1 Het klassendiagram* We beginnen met het opstellen van het klassendiagram dat ons een algemeen beeld geeft van de componenten waaruit het spel zal bestaan en hoe we het spel zullen programmeren. Zo wordt onder andere de opdeling gemaakt van "karakter" - die zowel alle helden als monsters zou typeren - en "aanval" (wapens en spreuken). Vervolgens delen we deze componenten op in kleinere en meer specifieke onderdelen, zoals de verschillende soorten wapens, karakters, drankjes,… en spreken we af wie welke onderdelen zal uitwerken.
2.2 Grafische Interface Sommige onderdelen van het spel, zoals de ‘GUI*’, zijn eenvoudig te schetsen. Zo zijn er enkele schermen die de speler te zien kan krijgen in het spel. Voor elk van deze schermen dient bepaald te worden wat de gebruiker moet zien (afbeeldingen, tekst,…) , en waar.
2.3 Taakverdeling We zijn overeengekomen dat Thomas de karakterklasse zou uitwerken, Peter de wapenklasse en dat Wannes de schermen zou maken. Ook hebben we een forum opgezet om de samenwerking te optimaliseren. Hier konden we onze tussentijdse uitwerkingen plaatsen zodat de andere leden daar meteen mee verder konden werken. Uiteraard werd ook veelvuldig gebruik gemaakt van MSN.
2.4 Uitwerking Het is heel belangrijk dat de fundamentele klassen (karakter, wapens, spreuken) goed uitgewerkt worden, omdat ze de basis vormen voor het hele spel. Bovendien moeten deze klassen zo duidelijk mogelijk worden geprogrammeerd. Hierdoor kunnen ze later nog regelmatig bijwerkt worden wegens allerhande uitbreidingen.
2.5 Testen Om te na te gaan of de uitwerking correct verloopt, testen we de componenten aan de hand van verscheidene testversies. Deze minuscule programma’s zijn puur tekstueel en bevatten bijgevolg geen grafische elementen zoals het doolhof of interactieve schermen. Na een reeks testversies wordt ook een eerste demo* uitgebracht die toelaat een monster aan te vallen en allerlei andere functies uit te proberen. Om de werking van deze demo te garanderen zijn we op zoek gegaan naar verscheidene vrijwilligers, die meteen hun feedback konden geven op ons forum.
* verklaring terug te vinden in de verklarende woordenlijst
4
3. Uitbreidingen 3.1 Weergave doolhof Bij het uitwerken en ontwerpen van het doolhof zijn we een aantal problemen tegengekomen. De weergave van het doolhof op het scherm was een moeilijkheid die we uiteindelijk wel met de hulp van een andere medestudent hebben kunnen oplossen. We wilden ook andere monsters implementeren dan het ene standaardmonster dat door de docenten al vooraf bezorgd was. Daarom hebben we verschillende soorten monsters ontworpen die elk in een doolhof voorkomen. Deze monsters zien er grafisch anders uit en hebben ook verschillende eigenschappen.
3.2 Artificiële intelligentie Om de spelervaring boeiender te maken was het noodzakelijk om de monsters, die door de computer worden bestuurd, een vorm van intelligentie mee te geven. Dit is de ‘AI*’ die bestaat uit een aantal regels die bijdragen tot het gedragspatroon van een monster. Op deze manier kan het monster bepalen hoe het monster beweegt en aanvalt indien nodig. Het monster zal nagaan over welke aanvalsmogelijkheden hij bezit en welke de meeste schade zal aanrichten. Indien het monster gewond is zal hij zichzelf genezen met een spreuk.
3.3 Aanval Bij een aanval met een wapen hebben we ook een ‘slijtagefunctie’ toegevoegd, zodat je wapen schade oploopt wanneer je er veel mee vecht. Dit beïnvloedt de schade die het wapen kan veroorzaken in negatieve zin. Er is ook de mogelijkheid om je wapen opnieuw te laten herstellen. Dit kost echter geld, in de vorm van goudstukken. De speler start met een bepaalde hoeveelheid goudstukken waarmee hij in het begin wapens, drankjes of spreuken kan kopen. Bij het verslaan van een monster krijgt de speler ook een hoeveelheid goudstukken. Met wat geluk vindt hij ook een schat. Als je tovenaar of monnik bent, kan je het monster ook aanvallen met allerlei toverspreuken. Elke spreuk vereist een bepaalde kennis en een hoeveelheid magiepunten. Een spreuk kan het monster schade doen oplopen, de speler genezen of sterker maken.
3.4 Winkel Tijdens het spel kan de speler zich in ‘de winkel’ bevoorraden en nieuwe wapens of spreuken aankopen. Sommige spreuken of wapens zijn in het begin nog niet beschikbaar omdat ze een bepaalde hoeveelheid magie of kracht vereisen. Wanneer de speler genoeg ervaring heeft opgedaan kan hier echter verandering in komen. Ook kan de speler zijn uitrusting verbeteren met het goud dat hij gevonden heeft op de lijken van de monsters of in schatten.
* verklaring terug te vinden in de verklarende woordenlijst
5
4. Aantrekkelijkheid 4.1 Grafische aantrekkelijkheid We vonden dat de schermen die getoond worden aan de speler naast functioneel, ook visueel aantrekkelijk moesten zijn. Een duidelijke lay-out, sfeervolle lettertypes en afbeeldingen moesten hiervoor zorgen. Om de speler veel interactie te kunnen bieden, zijn er een groot aantal schermen: ‘winkel’, ‘aanval’, ‘eigenschappen van de speler’, ‘stijgen in ervaring’, ‘nieuw spel’, enz… Een groot aantal van deze schermen zijn als tabbladen geïmplementeerd om de navigatie te vereenvoudigen. Om de weergave van de schermen te optimaliseren, hebben we de mogelijkheid toegevoegd om de resolutie te kiezen bij het starten van een nieuw spel. De optimale resolutie wordt automatisch bepaald bij het opstarten van het spel.
Fig. 1 – Laadscherm HeroQuest De indeling van het hoofdscherm bestaat uit het bovenaanzicht van het doolhof enerzijds en een controlepaneel anderzijds. Bij dit controlepaneel is één van de bonusopdrachten geïmplementeerd. Het aantal beschikbare bewegingspunten van de speler wordt bepaald door het gooien van twee dobbelstenen.
4.2 Audiovisuele aantrekkelijkheid Omdat een spel zonder muziek minder aanvoelt als een spel, mocht dit zeker niet ontbreken in onze ‘HeroQuest’. We hebben allerlei audioclips* toegevoegd, tot zelfs geluiden die je bij het uitvoeren van een spreuk of drinken van een drankje hoort.
* verklaring terug te vinden in de verklarende woordenlijst
6
5. Uitbreiding, zwakke en sterke punten 5.1 Zwakke punten De voornaamste zwakke punten in ons programma zijn te wijten aan een probleem dat we ondervonden met Java. Omdat het onmogelijk bleek het doolhof te hertekenen na elk level, waren we genoodzaakt het hele doolhofscherm telkens opnieuw op te bouwen. Dit heeft tot gevolg dat er maar één monster per doolhof kan zijn.
5.2 Sterke punten Het spel heeft een groot aantal uitbreidingen: - vele soorten wapens en toverspreuken - monsters en levels met unieke afbeeldingen - mogelijkheid zelf wapens en spreuken toe te voegen, verwijderen of aan te passen - mogelijkheid tot eigen achtergrond muziek - verhaal - muziek en geluiden - configuratiescherm - online handleiding - laad- en bewaarfunctie - cheats*
5.3 Verdere uitbreiding Het zou efficiënter zijn om de levels op te slaan in een database. Dit zou de gebruiker toelaten zelf levels aan te maken, te verwijderen of aan te passen. Een andere interessante uitbreiding zou een leveleditor zijn. Hierdoor zal de gebruiker nog vlotter nieuwe levels aan kunnen maken en aanpassen.
* verklaring terug te vinden in de verklarende woordenlijst in Bijlage 9.4
7
6. Besluit De motivatie was voor sommigen van onze groep erg groot. Niet zelden waren we nog tot laat in de nacht aan het werk. Bijgevolg hopen we dat dit zich zal weerspiegelen in ons eindresultaat. Omwille van onze beperkte voorkennis hebben we af en toe dubbel werk moeten leveren. Een voorbeeld hiervan is de overzetting van alle monsters, wapens en spreuken naar de database. We hebben ook vele zaken moeten opzoeken op het net omdat heel wat functies die we wouden implementeren geen leerstof voor het eerste jaar zijn. Tenslotte verliep het samenbrengen van de verschillende onderdelen niet altijd even efficiënt. Dit kwam omdat we tijdens het programmeren regelmatig klassen wijzigden. We hebben daarom de verschillende taken zo goed mogelijk afgebakend, zodat er terug een vlotte samenwerking ontstond. Het eindresultaat van ons project vormt één geheel dat ondanks de enkele beperkingen vooral veel extra mogelijkheden heeft. Het doel om een interessant, aantrekkelijk en vlot werkend spel te maken is bereikt. Het was een leerrijke ervaring.
8
7. Bronnen
7.1 Handleidingen -
JavaTM 2 Platform Standard Edition 5.0 API Specification, internet, http://java.sun.com/j2se/1.5.0/docs/api/ DEITEL, H.M., DEITEL, P.J., JAVA How to program, Pearson Education Inc., Upper Saddle River, New Jersey, 2003,1447 pagina’s
7.2 Programmatuur Om ons programma te maken, maken wij gebruik van volgende software: - Borland Together 6.2: professionele editor voor het ontwerpen en programmeren in java - Exe4j: programma dat uitvoerbare bestanden maakt van de java-class bestanden. - Adobe Acrobat Professional: professioneel programma dat toelaat allerlei elektronische bestanden eenvoudig te delen met anderen die niet over de nodige software beschikken. - Microsoft Word: uitgebreide tekstverwerker - Photoshop: programma voor het bewerken en maken van afbeeldingen
9
8. Verklarende woordenlijst AI: Artificiële intelligentie bestaat uit programmacode die aan de hand van bepaalde variabele waarden het programma toelaat beslissingen te maken. Een geavanceerdere AI kan een gedrag simuleren en laat het programma toe om ‘slimme’ beslissingen te maken. Audioclip: Een audioclip is een kort muziekfragment of geluidseffect. Cheats: cheats, ook wel cheat codes genoemd, zijn manieren om opzettelijk vals te spelen. Deze cheat codes worden soms als extraatje door de programmeurs toegevoegd. Vb: een bepaalde cheat code kan je karakter onsterfelijk maken. Demo: Een demo is een ruwe testversie van een programma, waar nog fouten in kunnen zitten. Een demo wordt aan een beperkte groep mensen bezorgd die dan het programma uittesten en eventuele problemen rapporteren aan de ontwikkelaars. GUI: Graphical User Interface, dit is het grafische gedeelte van het programma waar de gebruiker mee in contact komt. Al de knoppen, tekstvakken, afbeeldingen en schermen die de gebruiker te zien krijgt behoren tot dit gedeelte. Klassendiagram: Het klassendiagram toont een overzicht van de klassen van het programma. Klassen zijn de fundamenten van een programma. Een goede samenwerking van de klassen is vereist om een efficiënt werkend programma te maken.
10
9. Bijlagen 9.1 Klassendiagram Aanval
Karakter
+Aanval +Wapen +GenezingsMagie +GevechtsMagie +CurseMagie +Toverspreuk
+Ridder +Held +Monster +Tovenaar +Monnik +Karakter
Random +Random
graphics
Settings +CurrentLevel +LoadConnectie +UserSettings +DatabaseConnectie +WapenConnectie +MonsterConnectie +MuziekConnectie +SpreukenConnectie +Objects +Constants
Gui
level
+doolhof +LoadingScreen +Defeat +Victorious +Upgraden +Readme +browser +Hoofdscherm +Output +EindeScherm +Credits graphics
+Level +Level1 +Level2 +Level3 +Level4 +Level5 +Level6 +Level7 +Level8 +Level9 +Level10 +Level11 +Level12 +Level13
potions +Potion +LevensPotion +KleineLevensPotion +MediumLevensPotio +GroteLevensPotion +ManaPotion +KleineManaPotion +MediumManaPotion +GroteManaPotion
exception +BewegingsException +ActiepuntenException +SelectieException +HoeveelheidExceptio +BereikException
HeroQuestBeta
+main:void
sounds +Muziek
11
9.2 Doolhof
9.3 Monsters
12