Avatar billede crazy_jellyfish Nybegynder
09. maj 2006 - 10:33 Der er 3 kommentarer

State pattern i Jython

Hej Eksperter

Opgave: Jeg skal lave et simpelt, turbaseret 2d-spil. I dette spil styrer man en hero, som skal samle nogle objekter for at færdiggøre en bane. Undervejs bliver han jagtet af forskellige fjender. Helten
kan samle power-ups og hero-objektet kan dermed indtræde i forskellige states (max ét af gangen - så undgår jeg composite). Disse states er "speed" (dobbelt hastighed), "bad trip" (omvendt styring) og "normal".

Jeg har fundet et eksempel på brug af statepattern, som dog var noget kryptisk. Her var ikke benyttet interface, som ellers er hvad jeg mener man skal til state. Idéen er at have hero-klassen, som styrer et interface der kan implementeres i de tre forskellige states.

Et almindeligt forklarende eksempel på brug af et statepattern ville være en kæmpe hjælp.

På forhånd tak
Lars Lauridsen
Avatar billede soreno Praktikant
09. maj 2006 - 11:07 #1
Tilstanden af helten skal defineres i det aktuelle state objekt. Dermed kan interfacet f.eks. se således ud:

public int getHeroSpeed();
public boolean isDirectionsNormal();

På den måde indeholder state objekter opførslen for heltens tilstand og du kan programmere således:

if(state.isDirectionsNormal()) {
  walk(state.getHeroSpeed());
} ..

Dvs. din spil logik behøver ikke kende til detaljer om spillets tilstand.

Jeg foretrækker at implementere State pattern som en abstrak klasse hvor subklasser overskrive de metoder som er specifikke for tilstanden. Dermed kan man samle kode som er fælles for tilstande i superklassen - hvis der da er noget der er fælles :-)
Avatar billede crazy_jellyfish Nybegynder
09. maj 2006 - 11:18 #2
Hej Soreno.

Tak

Så det vil sige, at jeg selv vælger om jeg vil benytte mig af et interface eller en abstrakt klasse? Jeg har forsøgt mig lidt frem med begge dele, uden at vide hvad der var "det korrekte".

Mvh.
Lars
Avatar billede soreno Praktikant
09. maj 2006 - 11:25 #3
Det korrekte er det som passer bedst til dit system i dag og 4 versioner frem i tiden ;-)

Jeg må erkende at jeg ikke har prøvet at implementere State ved brug af interface løsningen. Jeg har ikke kunne se nogle fordele frem for abstrakt klasse i mine systemer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester