jmario

Post on 04-Jan-2016

40 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

JMario. Equipe Augusto Cesar Neves Lima Filho. JMario. Jogo usando Java2D Fiel ao clássico Mario para snes. Feature Model. Feature Model. public void init(){ ... imagemInterfacePontuacao = resourceManager.loadImage("interfacePontuacao.png"); - PowerPoint PPT Presentation

TRANSCRIPT

JMario

Equipe Augusto Cesar Neves Lima Filho

JMario• Jogo usando Java2D• Fiel ao clássico Mario para snes

Feature Model

Feature Model

public void init(){...imagemInterfacePontuacao = resourceManager.loadImage("interfacePontuacao.png");

imagemInterfaceTotal = resourceManager.loadImage( "interfaceTotal.png");

imagemInterfacePausa = resourceManager.loadImage( "interfacePausa.png" );

}

Feature - Language

Feature - Language

Feature - Languageprivileged abstract aspect LanguageSupport { ...

private Image GameManager.loadImageLang (String name, String language) {...

}pointcut resourceInit(GameManager gm) : execution(* *.init()) && ...protected abstract String getLanguageCode();

after(GameManager gm) returning : resourceInit(gm){gm.imagemInterfacePontuacao = gm.loadImageLang("interfacePontuacao.png",

getLanguageCode ());...

}} ...aspect EnglishSupport extends LanguageSupport{

protected String getLanguage(){return "US";

}

Feature Model

Feature Model

Feature - Language

LanguageStrategy

PortugueseLanguageStrategy EnglishLanguageStrategy

LanguageFactory GameManager

Feature – Changeable Language

Feature – Changeable Language

privileged aspect ChangeLanguageAspect ...

private LanguageStrategy GameManager.languageStrategy;private LanguageFactory GameManager.languageFactory = new

LanguageFactory();before(GameManager gm) : checkInput(gm){

if (gm.language.isPressed()) {...

}}

...

private void GameManager.changeLanguage() {languageStrategy = languageFactory.createLanguageStrategy();

imagemInterfacePontuacao = languageStratrategy.loadImageLang("interfacePontuacao.png");

...}

Feature Model

public void loadCreatureSprites() { ...

Image[][] imagensBat = new Image[4][];Image[][] imagensTurtle = new Image[4][];Image[][] imagensMummyTurtle = new Image[4][];Image[][] imagensBlueDragon = new Image[4][];

...imagensFlyGoomba[1] = new Image[imagensFlyGoomba[0].length];imagensFlyGoomba[2] = new Image[imagensFlyGoomba[0].length];imagensFlyGoomba[3] = new Image[imagensFlyGoomba[0].length];

imagensGoomba[1] = new Image[imagensGoomba[0].length];imagensGoomba[2] = new Image[imagensGoomba[0].length];imagensGoomba[3] = new Image[imagensGoomba[0].length];

imagensGreenKoopa[1] = new Image[imagensGreenKoopa[0].length];imagensGreenKoopa[2] = new Image[imagensGreenKoopa[0].length];imagensGreenKoopa[3] = new Image[imagensGreenKoopa[0].length];

...

Feature Model

Gráfico de Clones

Gráfico de Clones

Feature Model

Feature Model

Feature Model

Técnica : Code Generation and Transformation (CGT)

Feature – Static Enemy

Feature – Static Enemypublic void loadCreatureSprites() {

#foreach($enemy in $enemys)Image[][] imagens$enemy.Name = new Image[4][];#end

...#foreach($enemy in $enemys)imagens$enemy.Name[ 1 ] = new Image[ imagens$enemy.

Name[ 0 ].length ];imagens$enemy.Name[ 2 ] = new Image[ imagens$enemy.

Name[ 0 ].length ];imagens$enemy.Name[ 3 ] = new Image[ imagens$enemy.

Name[ 0 ].length ];#end

...

Feature – Static Enemy<?xml version="1.0"?> <Enemys>

<Enemy NAME="Goomba" CODIGO="1" SPEED="0.1" FLYER="false">

<Frame NAME="goomba1.png"/> <Frame NAME="goomba2.png"/>

</Enemy>

<Enemy NAME="Fly Goomba" CODIGO="2" SPEED="0.1" FLYER="false">

<Frame NAME="flyGoomba1.png"/> <Frame NAME="flyGoomba2.png"/>

</Enemy>...

Gráfico de Clones

Gráfico de Clones

Gráfico de Clones

Redução : 54%

Feature Model

Técnica : Adaptive Object Model (AOM)

Feature: User-Defined enemys

Feature: User-Defined enemys

public void loadCreatureSprites() { XMLEnemyHandler handler = new XMLEnemyHandler();

...List<EnemyDescription> enemys = handler.getEnemys();

for (int i = 0; i < enemys.size(); i++) {EnemyDescription enemyDescription = enemys.get(i);

...EnemyType enemyType = new EnemyType(enemyDescription.getCodigo(),

enemyDescription.getName(), enemyDescription.getSpeed(),enemyDescription.isFlyer());

...

Feature: User-Defined enemys

//#ifdef aomimport variations.EnemyType;//#endif

//#ifdef aompublic class Creature extends Sprite {//#else//@public abstract class Creature extends Sprite {//#endif

Feature: User-Defined enemys

Dificuldades

• Uso de técnicas não definidas diretamente em decision models

• Flip-Pure-Variants

Atividades – Tempo Atividade Técnica ou Ferramenta Tempo

Identificação de features Manualmente/CCFinder 2 horas

Desenho do modelo de features

Captain Feature 1 hora

Configuração do ambiente e estudo de ferramentas

Flip/Pure-Variants 3 horas

Extração da feature de Linguagem

Flip 2 horas

Inclusão do ponto de variação para feature de inimigos

Manualmente 1 hora

Extração da feature de StaticEnemys

Flip/Manualmente 3 horas

Extração da feature de User-Defined enemys

Manualmente 6 horas

Montagem do configuration knowledge

Pure-Variants 2 horas

Conclusões

• Uso de diversas técnicas em uma mesma variação

• Uso extensivo de AO

top related