jmario equipe augusto cesar neves lima filho. jmario jogo usando java2d fiel ao clássico mario para...
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