JMario

33
JMario Equipe Augusto Cesar Neves Lima Filho

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 of JMario

Page 1: JMario

JMario

Equipe Augusto Cesar Neves Lima Filho

Page 2: JMario

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

Page 3: JMario

Feature Model

Page 4: JMario

Feature Model

Page 5: JMario

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

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

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

}

Feature - Language

Page 6: JMario

Feature - Language

Page 7: JMario

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";

}

Page 8: JMario

Feature Model

Page 9: JMario

Feature Model

Page 10: JMario

Feature - Language

Page 11: JMario

LanguageStrategy

PortugueseLanguageStrategy EnglishLanguageStrategy

LanguageFactory GameManager

Feature – Changeable Language

Page 12: JMario

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");

...}

Page 13: JMario

Feature Model

Page 14: JMario

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

Page 15: JMario

Gráfico de Clones

Page 16: JMario

Gráfico de Clones

Page 17: JMario

Feature Model

Page 18: JMario

Feature Model

Page 19: JMario

Feature Model

Técnica : Code Generation and Transformation (CGT)

Page 20: JMario

Feature – Static Enemy

Page 21: JMario

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

...

Page 22: JMario

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>...

Page 23: JMario

Gráfico de Clones

Page 24: JMario

Gráfico de Clones

Page 25: JMario

Gráfico de Clones

Redução : 54%

Page 26: JMario

Feature Model

Técnica : Adaptive Object Model (AOM)

Page 27: JMario

Feature: User-Defined enemys

Page 28: JMario

Feature: User-Defined enemys

Page 29: JMario

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

Page 30: JMario

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

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

Feature: User-Defined enemys

Page 31: JMario

Dificuldades

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

• Flip-Pure-Variants

Page 32: JMario

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

Page 33: JMario

Conclusões

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

• Uso extensivo de AO