33
JMario Equipe Augusto Cesar Neves Lima Filho

JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Embed Size (px)

Citation preview

Page 1: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

JMario

Equipe Augusto Cesar Neves Lima Filho

Page 2: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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

Page 3: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 4: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 5: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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

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

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

}

Feature - Language

Page 6: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature - Language

Page 7: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 9: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 10: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature - Language

Page 11: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

LanguageStrategy

PortugueseLanguageStrategy EnglishLanguageStrategy

LanguageFactory GameManager

Feature – Changeable Language

Page 12: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 14: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Gráfico de Clones

Page 16: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Gráfico de Clones

Page 17: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 18: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Page 19: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Técnica : Code Generation and Transformation (CGT)

Page 20: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature – Static Enemy

Page 21: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Gráfico de Clones

Page 24: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Gráfico de Clones

Page 25: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Gráfico de Clones

Redução : 54%

Page 26: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature Model

Técnica : Adaptive Object Model (AOM)

Page 27: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature: User-Defined enemys

Page 28: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Feature: User-Defined enemys

Page 29: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

//#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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Dificuldades

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

• Flip-Pure-Variants

Page 32: JMario Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

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 Equipe Augusto Cesar Neves Lima Filho. JMario Jogo usando Java2D Fiel ao clássico Mario para snes

Conclusões

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

• Uso extensivo de AO