Bookmark and Share

Svårighetsgrad
Svårighetsgrad
Betyg (9 röster)
BetygBetygBetygBetygBetyg
 

innehållsförteckning

Multiplayer Tanks - Del 1 (Design)

Inledning

Målet med detta projekt är att skapa ett enkelt men roligt spel med nätverksstöd samt att tillämpa en mer objektorienterad programmering (OOP). Syftet är att visa fördelarna med objektorienterad programmering jämfört med mer grundläggande (icke-objektorienterad) programmering vilket många som börjar intressera sig för programmering lätt fastnar i.

Vi kommer här att utgå ifrån att man är lite bekant med OOP men att det känns lite ovant. Rena nybörjare bör inte heller ha allt för svårt att hänga med. De som kan det mesta om OOP kommer förhoppningsvis att uppskatta nätverksbiten eller upptäcka lite finesser med C#-språket.

Vi kommer även att utgå ifrån att man har en viss vana av XNA och kommer därför inte att förklara sådant som beskrivits mer utförligt i tidigare artiklar här på csharpskolan. Vi kommer dock som alltid att börja från början och förklara varje steg och olikheter från tidigare projekt på ett förhoppningsvis pedagogiskt sätt.

Med detta sagt så drar vi igång vårt projekt!

Spelidé

Spelet "Multiplayer Tanks" ska vara ett enkelt men roligt nätverksspel. Spelarna skall ha varsin "Tank" som de styr och ska försöka skjuta sönder varandra i en typ av "death match". Tanken är att det ska kräva lite skicklighet för att hantera sin Tank, likt kanonerna i spelet "North and South" som kom 1989 till en rad olika plattformer. (För er som inte är så gamla hittar mer information HÄR ).

Vi kommer till en början att göra en så enkel implementation som möjligt med 2 Tanks, en enkel bana och ett standardvapen. Spelet kan sedan byggas ut i all oändlighet med olika vapen, banor, "power-ups" etc.

bild

Design

När man lärt sig lite mer om programmering och ska börja skapa större projekt så inser man snabbt vikten av bra design. Det lönar sig att i förväg sätta sig ner och fundera på hur man ska bygga upp sitt projekt så att man enkelt kan lägga till funktioner utan att behöva skriva om en massa kod.

En stor fördel med OOP är att indelningen i objekt och klasser påminner mer om "verkligheten" där vi kan kategorisera olika objekt efter funktion och egenskaper vilket underlättar när vi ska designa ett projekt. Förutom att det blir mer strukturerat så återanvänds kod vilket är trevligt eftersom vi vill åstadkomma så mycket som möjligt med så lite ansträngning som möjligt. Löser man ett problem i ett projekt på ett bra sätt så kan man enkelt återanvända lösningen även i ett annat projekt.

Vi kommer att utgå från en relativt enkel men användbar design som fungerar bra för mindre spelprojekt. Vi kommer till en början använda oss av följande klasser:

GameObj Detta blir grundobjektet som alla andra objekt ärver från. Alla saker (objekt) som vi behöver i spelet har egenskaper som är mer eller mindre gemensamma. Dessa samlar vi i klassen GameObj. Egenskaper som varje GameObj har är position, vinkel, grafik, samt en metod för att rita ut objektet.
MovingGameObj Denna klass ärver från GameObj och används för alla objekt som på något sätt ska kunna förflytta sig med egenspaker som hastighet och riktning.
Tank Denna klass ärver från MovingGameObj och kunde egentligen döpas till "Player" eller liknande. Förutom de egenskaper som ärvs så lägger vi till egenskaper som har med maxhastighet och avlossande av skott att göra. En Update-metod behövs också.
Shot Denna klass har förutom det som ärvs även en "power"-egenskap som avgör kraften för skottet och används för att avgöra hur långt skottet flyger, samt en Update-metod.
Meter Denna klass kommer att användas för kraftmätare, livmätare och alla andra mätare som vi vill ha.
Explosion Denna klass kunde lika gärna heta "Animation" eller liknande och kommer att användas för alla animerade objekt. För att detta behövs egenskaper som Animationshastighet, aktiv bildruta, tid etc.

Nedan ser vi en bild över klassdiagrammet som skapats av Visual Studio. Vissa tillägg kommer eventuellt att ske beroende på hur mycket tillägg till den ursprungliga idén som implementeras.

bild

Klassernas uppbyggnad och användning beskrivs givetvis mer ingående när vi börjar med implementationen.

Det kan vara bra att känna till UML (Unified Modeling Language) som är "är ett objektorienterat generellt språk för modellering av alla typer av system. Språket används främst inom programvarukonstruktion men är även användbart inom andra områden som exempelvis modellering av affärsprocesser med mera. Genom att skapa en modell av systemet som skall konstrueras blir det enklare att förstå och bygga det." (Källa: Wikipedia).

Det finns massvis med program för UML där man bl.a. kan designa sina klasser grafiskt och sedan låta programmet generera koden för klasserna. Det finns även stöd för detta i Visual Studio Professional via "Class Designer" där man i grafiskt läge kan skapa klasser och ge dem relationer, egenskaper och metoder som även genereras som kod samtidigt.

bild

Viktiga begrepp

  • UML

Kommentarer

1 inlägg