• Nenhum resultado encontrado

Alexandre de Andrade Barbosa

N/A
N/A
Protected

Academic year: 2019

Share "Alexandre de Andrade Barbosa"

Copied!
139
0
0

Texto

(1)

Mini-curso:

Implementando uma aplicação interativa

com o WiiMote

Alexandre de Andrade Barbosa

(2)

Objetivos

Apresentar a área de Interação Humano Computador

Descrever como o Wiimote funciona se comunica

Revisar os conceitos de programação Java que

necessários para o projeto

Implementar uma aplicação simples de interação do

Wiimote com um computador

(3)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

3

Sobre o apresentador

Bacharel em Ciência da Computação pela UFAL

Engenharia de Software

Mestre em Ciência da Computação pela UFCG

(4)

Sobre o apresentador

Professor Assistente I na UFAL Arapiraca

E.S., B.D., G.P., L.P., P.L.P., L.I.C., outras

Coordenador do L.E.C.C e G.E.D.A.I

Coordenador do L.A.M.P

Áreas de atuação:

Engenharia de Software

(5)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

5

Sobre o apresentador

(6)

Sobre o apresentador

E o mais importante...

… feliz proprietário de

(7)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

7

Sobre os congressistas

Nome...

Curso / Período …

(8)

Roteiro

1ª Parte - Introdução IHC ( ~30 min. )

2ª Parte - Como o Wiimote funciona ( ~ 30 min. )

3ª Parte - Linguagem Java ( ~1hr. 30 min. )

(9)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

9

(10)

Introdução IHC – O sistema ideal

“The ideal system so buries the technology that the user

is not even aware of its presence. The goal is to let

people get on their activities, with the technology

enhancing their productivity, their power, and their

enjoyment, ever the more so because it is invisible, out of

(11)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

11

(12)

Introdução IHC – O que é interface?

“uma interface é uma superfície de contato que reflete as propriedades

físicas das partes que interagem, as funções a serem executadas e o

balanço entre poder e controle”

(13)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

13

Introdução IHC – O que é interface?

(14)

Introdução IHC – O que é IHC?

“IHC é a disciplina preocupada com o design, avaliação e

implementação de sistemas computacionais interativos para uso

humano e com o estudo dos principais fenômenos ao redor deles”

(15)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

15

Introdução IHC – IHC e computação

Desenvolvimento de software

explorar maneiras para melhorar a representação da

informação e a captura de dados

Desenvolvimento de hardware

buscar alternativas de dispositivos de interação (ex.

(16)

Introdução IHC – IHC e computação

(17)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

17

Introdução IHC – IHC e computação

(18)
(19)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

19

(20)

Introdução IHC – IHC e Jogos

Como você joga um

jogo de corrida?

a) apertando botões

b) movendo o volante

(21)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

21

Introdução IHC – IHC e Jogos

Como você joga um

jogo de corrida?

a)

apertando botões

b)

movendo o volante

(22)

Introdução IHC – IHC e Jogos

Como você joga um

jogo de corrida?

a)

apertando botões

b) movendo o volante

c) n. d. a

Como você dirige?

a) apertando botões

(23)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

23

Introdução IHC – IHC e Jogos

Como você joga um

jogo de corrida?

a)

apertando botões

b) movendo o volante

c) n. d. a

Como você dirige?

a) apertando botões

b)

movendo o volante

(24)

Introdução IHC – IHC e Jogos

Como você “luta com

os deuses”?

a) apertando botões

b) movendo o(s) braço(s)

(25)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

25

Introdução IHC – IHC e Jogos

Como você “luta com

os deuses”?

a)

apertando botões

b) movendo o(s) braço(s)

(26)

Introdução IHC – IHC e Jogos

Como você “luta com os

deuses”?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a.

Como você usa uma

espada no mundo real?

(27)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

27

Introdução IHC – IHC e Jogos

Como você “luta com os

deuses”?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a.

Como você usa uma

espada no mundo real?

a) apertando botões

b) movendo o(s) braço(s)

(28)

Introdução IHC – IHC e Jogos

Como você “luta com os

deuses”?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a.

Como você

usaria

uma

espada no mundo real?

(29)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

29

Introdução IHC – IHC e Jogos

Como você joga um

jogo de tênis?

a) apertando botões

b) movendo o(s) braço(s)

(30)

Introdução IHC – IHC e Jogos

Como você joga um

jogo de tênis?

a)

apertando botões

b) movendo o(s) braço(s)

(31)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

31

Introdução IHC – IHC e Jogos

Como você joga um

jogo de tênis?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a

Como você joga tênis?

a) apertando botões

b) movendo o(s) braço(s)

(32)

Introdução IHC – IHC e Jogos

Como você joga um

jogo de tênis?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a

Como você joga tênis?

a) Muito mal...

(33)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

33

Introdução IHC – IHC e Jogos

Como você joga um

jogo de tênis?

a)

apertando botões

b) movendo o(s) braço(s)

c) n. d. a

Como você joga tênis?

a) Muito mal...

b) Mais ou menos...

(34)

Se eu apertar o botão

o que acontece?

(35)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

35

Como eu faço para jogar?

Quais são os comandos?

(36)

Introdução IHC – IHC e Jogos

(37)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

37

Já sei irei pressionar as teclas e

verificar o que acontece...

(38)

Já sei irei pressionar as teclas e

verificar o que acontece...

Introdução IHC – IHC e Jogos

Problemas:

Comando sensível ao

contexto do jogo...

(39)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

39

Introdução IHC – IHC e Jogos

(40)

Introdução IHC – IHC e Jogos

(41)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

41

(42)
(43)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

43

Como o Wiimote funciona

Wiimote ou Wii Remote

(44)

Como o Wiimote funciona

(45)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

45

Como o Wiimote funciona

O Wiimote é o controle principal do console Wii

Controle auxiliar é chamado de “Nunchuck”

O Wiimote possui:

Câmera infravermelha, Acelerômetro e

Botões de ação

O Nunchuck possui um sensor:

Acelerômetro e Botões de ação

(46)

Como o Wiimote funciona

(47)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

47

Como o Wiimote funciona

(48)
(49)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

49

Como o Wiimote funciona

(50)

Como o Wiimote funciona

(51)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

51

Como o Wiimote funciona

(52)
(53)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

53

Como o Wiimote funciona

Instalando: Wmgui

(54)
(55)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

55

Como o Wiimote funciona

Câmera:

captura a luz infravermelha emitida por algum ponto de

luz infravermelha

Acelerômetro

permite obter aceleração em

três eixos: vertical, horizontal

(56)

Como o Wiimote funciona

Botões de ação

Ao pressionar um botão a identificação do botão é

enviada via bluetooth

(57)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

57

(58)

Linguagem Java

Instalação

Primeiro programa

Conceitos básicos

Estruturas de Controle

Classes e Objetos

Eventos

(59)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

59

Linguagem Java - Instalação

public class WiiApp {

// …

(60)

Linguagem Java - Instalação

Instalando: Java Runtime Environment (JRE )

Instalando: Java Developmente Kit (JDK)

$ sudo apt-get install sun-java6-jre

$ sudo update-alternatives --config java

$ sudo apt-get install sun-java6-jdk

(61)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

61

Linguagem Java - Instalação

Instalando: Eclipse

Abrir o Eclipse

Aplicativos > Desenvolvimento > Eclipse

$ eclipse

(62)

Linguagem Java - Primeiro programa

Criando projeto Java no Eclipse

Criando uma pasta

Criando pacote

Criando uma classe

File > New... > Java Project

“lib”

(63)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

63

Linguagem Java - Primeiro programa

Criando uma classe

package wiimoteapp.linguagemjava;

public class Primeiro {

public static void main(String[] args) {

System.out.println("Meu primeiro programa Java!");

}

}

(64)

Linguagem Java - Primeiro programa

Executando a classe no Eclipse

Saída esperada

Run > Run as... > Java Application

(65)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

65

Linguagem Java - Conceitos básicos

Tipos de dados

int

boolean

double

float

String

(66)

Linguagem Java - Conceitos básicos

Entrada

Saída

//...

import javax.swing.JOptionPane;

//...

JOptionPane.showInputDialog("Digite seu nome:");

//...

//...

(67)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

67

Linguagem Java - Conceitos básicos

Entrada e Saída

package wiimoteapp.linguagemjava;

import javax.swing.JOptionPane;

public class EntradaSaida {

public static void main(String[] args) { String nome;

nome = JOptionPane.showInputDialog("Digite seu nome:"); System.out.println(nome);

} }

(68)

Linguagem Java - Est. de controle

Condicionais

if...else

switch

Repetição

for

while

(69)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

69

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Controle01 {

public static void main(String[] args) { boolean x = true;

if (x) {

System.out.println("Executou o 'if'!"); } else {

System.out.println("Executou o 'else'!"); }

} }

(70)

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Controle02 {

public static void main(String[] args) { int x = 2;

switch (x) { case 1:

System.out.println("Trecho 1"); break; case 2:

System.out.println("Trecho 2"); break; default:

System.out.println("Trecho Padrão"); break; }

(71)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

71

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Controle03 {

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {

System.out.println("i = " + i); }

} }

(72)

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Controle04 {

public static void main(String[] args) { int i = 0;

while (i < 6) {

System.out.println("i = " + i); i++;

}

(73)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

73

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Controle05 {

public static void main(String[] args) { int i = 0;

do {

System.out.println("i = " + i); i++;

} while (i < 6);

} }

(74)
(75)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

75

(76)
(77)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

77

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class Pessoa { public String _nome; public int _idade;

public Pessoa(String nome, int idade) { _nome = nome;

_idade = idade; }

public void info() {

System.out.println(_nome + " tem " + _idade + " anos"); }

}

(78)

Linguagem Java - Est. de controle

package wiimoteapp.linguagemjava;

public class ClasseObjeto01 {

public static void main(String[] args) { Pessoa p = new Pessoa("Alexandre", 28); System.out.println(p._nome);

(79)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

79

Linguagem Java - Classes e Objetos

Classes podem reusar comportamentos e

características de outras classes (Herança)

package wiimoteapp.linguagemjava;

public class Aluno extends Pessoa { public String _matricula;

public Aluno(String nome, int idade, String matricula) { super(nome, idade);

_matricula = matricula; }

public void info() { info();

System.out.println("(" + _matricula + ")"); }

}

(80)

Linguagem Java - Classes e Objetos

Classes podem reusar comportamentos e

características de outras classes (Herança)

package wiimoteapp.linguagemjava;

public class ClasseObjeto02 {

public static void main(String[] args) { Pessoa p = new Pessoa("Alexandre", 28); System.out.println(p._nome);

Aluno a = new Aluno("Maria", 19, "2010G55D035"); }

(81)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

81

Linguagem Java - Classes e Objetos

package wiimoteapp.linguagemjava;

import javax.swing.JFrame;

public class Tela01 extends JFrame { public Tela01() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600);

pack();

setVisible(true); }

public static void main(String[] args) { Tela01 t = new Tela01();

} }

(82)

Linguagem Java - Classes e Objetos

package wiimoteapp.linguagemjava;

import java.awt.Color;

import javax.swing.JButton; import javax.swing.JPanel;

public class Tela02Panel extends JPanel {

public Tela02Panel(Color bg, String text) { setBackground(bg);

JButton b = new JButton(text); add(b);

(83)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

83

Linguagem Java - Classes e Objetos

// ...

public class Tela02 extends JFrame { public Tela02() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600);

setLayout(new GridLayout(0, 4));

add(new Tela02Panel(Color.BLUE, "L")); add(new Tela02Panel(Color.GREEN, "A")); add(new Tela02Panel(Color.RED, "M")); add(new Tela02Panel(Color.YELLOW, "P")); pack();

setVisible(true); }

public static void main(String[] args) { Tela02 t = new Tela02();

} }

(84)

Linguagem Java - Eventos

Um evento (em Java) pode ser descrito como

qualquer ação que ocorre entre o usuário e a

aplicação

Pressionar teclas no teclado

Clicar o mouse

(85)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

85

Linguagem Java - Eventos

package wiimoteapp.linguagemjava; import java.awt.Color;

import java.awt.Dimension;

import javax.swing.BorderFactory; import javax.swing.JLabel;

public class EventoPanel extends JLabel { public EventoPanel(Color color) {

setBackground(color);

setBorder(BorderFactory.createLineBorder(Color.black)); }

public Dimension getMinimumSize() { return new Dimension(100, 50); }

public Dimension getPreferredSize() { return new Dimension(100, 50); }

}

(86)

Linguagem Java - Eventos

package wiimoteapp.linguagemjava;

import java.awt.Color;

import java.awt.Dimension; import java.awt.GridLayout; import java.awt.TextArea;

import java.awt.event.MouseEvent; import java.awt.event.MouseListener;

import javax.swing.BorderFactory; import javax.swing.JFrame;

import javax.swing.JScrollPane; import javax.swing.JTextArea;

(87)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

87

Linguagem Java - Eventos

//...

public class Evento extends JFrame implements MouseListener{

EventoPanel ep; public Evento() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(0,1));

ep = new EventoPanel(Color.WHITE); add(ep);

ep.addMouseListener(this); addMouseListener(this);

setPreferredSize(new Dimension(450, 450)); pack();

setVisible(true); }

//...

(88)

Linguagem Java - Eventos

//...

public void mouseClicked(MouseEvent e) {

System.out.println("Mouse foi clicado!"); }

public void mouseEntered(MouseEvent e) {

System.out.println("Mouse entrou no painel!"); }

public void mouseExited(MouseEvent e) {

System.out.println("Mouse saiu do painel!"); }

public void mousePressed(MouseEvent e) {

System.out.println("Mouse foi pressionado!"); }

public void mouseReleased(MouseEvent e) {

(89)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

89

Linguagem Java - Eventos

//...

public static void main(String[] args) { Evento e = new Evento();

}

}

(90)
(91)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

91

Linguagem Java - Adicionando APIs

APIs são componentes com funcionalidades

específicas podem ser utilizados em outros

programas

Alguns exemplos de componentes/APIs:

Jfreechart – geras gráficos

Itext – gerar pdf

(92)

Linguagem Java - Adicionando APIs

Para inserir um componente que será usado em seu

projeto deve-se modificar o classpath

1.Copie o arquivo junit.jar para pasta lib

2.Clique direito sobre o arquivo junit.jar

3.Selecione:

4.Verifique que todas as classes do .jar estão

(93)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

93

(94)
(95)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

95

Implementação - Software

(96)

Implementação - Instalando WiiUseJ

1.Copie o arquivo

wiiusej.jar

para pasta lib

2.Clique direito sobre o arquivo

wiiusej.jar

3.Selecione:

4.Verifique que todas as classes do .jar estão

disponíveis em seu projeto

5.

Copie o arquivo libwiiuse.so para raiz do projeto

(97)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

97

Implementação - Instalando WiiUseJ

1.Copie os arquivos

libwiiuse.so

libWiiuseJ.so

(98)

Implementação - Instalando WiiUseJ

1. No menu

2. Na aba

3.

Adicione o parâmetro para iniciar a JVM p/ projeto

Run > Run configurations

Arguments > VM Arguments

(99)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

99

Implementação - Instalando WiiUseJ

1. No menu

2.Na aba

3.Selecione o botão

4.

Crie a variável

Run > Run configurations

Environment

LD_LIBRARY_PATH =

/home/alexandre/workspace/ensino/WiiUseJ

(100)

Implementação - Instalando WiiUseJ

1. No terminal execute

$ ln -s /usr/lib/libbluetooth.so.3

(101)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

101

Implementação – Eventos Wiimote

Para capturar eventos dos botões

Para capturar eventos da camêra IR

Para capturar eventos do acelerômetro

Outros eventos não serão citados...

public void onButtonsEvent(WiimoteButtonsEvent b)

public void onIrEvent(IREvent arg0)

(102)

Implementação – Eventos Wiimote

Para cada botão são fornecidos os métodos:

isButton?JustPressed()

isButton?JustReleased()

isButton?Held()

(103)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

103

Linguagem Java - Eventos

package wiimoteapp.eventos; // imports

public class WMSample implements WiimoteListener {

public void onButtonsEvent(WiimoteButtonsEvent b) { if (b.isButtonAJustReleased()) {

System.out.println("A"); }

if (b.isButtonBJustPressed()) { System.out.println("B");

}

if (b.isButtonDownHeld()) {

System.out.println("Down"); }

if (b.isButtonUpPressed()) { System.out.println("Up"); }

}

(104)

Linguagem Java - Eventos

// ...

public static void main(String[] args) {

Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(1, true); Wiimote wiimote = wiimotes[0];

wiimote.activateIRTRacking(); wiimote.activateMotionSensing();

wiimote.addWiiMoteEventListeners(new WMSample()); }

(105)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

105

Implementação - Nossa aplicação

Versão simplificada do

(106)

Implementação - Nossa aplicação

0 1 2 3

4 5 6 7

8 9 10 11

(107)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

107

Implementação - Nossa aplicação

Botao

Classes Botao e Jogo

Botao

(108)

Implementação - Nossa aplicação

package wiimoteapp.jogomemoria;

import javax.swing.Icon;

import javax.swing.ImageIcon; import javax.swing.JButton;

public class Botao extends JButton {

private Icon _figura; private Icon _carta;

(109)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

109

Implementação - Nossa aplicação

//...

public Botao(Icon figura) { _figura = figura;

String caminho = "/imagens/jogo/standard.gif";

_carta = new ImageIcon(getClass().getResource(caminho)); }

public void setFigura() { setIcon(_figura);

}

public void setCarta() { setIcon(_carta);

}

public Icon getFigura(){ return _figura;

}

// ...

(110)

Implementação - Nossa aplicação

package wiimoteapp.jogomemoria;

// imports …

public class Jogo extends JFrame

implements ActionListener, WiimoteListener {

(111)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

111

Implementação - Nossa aplicação

// ...

public static final int QUADRO = 4; private GridLayout grid;

private JPanel painelImagens;

private Object botaoClicado1 = new Object(); private Object botaoClicado2 = new Object(); private Icon imagens[];

private Icon imagens8[]; private Botao botao1; private Botao botao2;

private Botao posicoesFiguras[]; private int posicao;

private boolean primeiroClique = true; private boolean acertou = true; // ...

(112)

Implementação - Nossa aplicação

public Jogo() {

super("Jogo da Memória");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); grid = new GridLayout(QUADRO, QUADRO, 5, 5); setLocation(200, 10);

conectaWiimote(); embaralha();

painelImagens = new JPanel(); painelImagens.setLayout(grid);

posicoesFiguras = new Botao[(QUADRO * QUADRO)]; posicao = 1;

insere();

(113)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

113

Implementação - Nossa aplicação

private void conectaWiimote() { try {

Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(1, true); Wiimote wiimote = wiimotes[0];

wiimote.addWiiMoteEventListeners(this); } catch (Exception e) {

System.out.println("Nenhum Wiimote foi encontrado"); }

}

(114)

Implementação - Nossa aplicação

private void embaralha() { int posicaoNoArray, x, y;

imagens8 = new Icon[(QUADRO * QUADRO)/2]; for ( x = 0; x < ((QUADRO*QUADRO)/2); x++ ){

imagens8[x] = carregaIcone(x); }

imagens = new Icon[(QUADRO*QUADRO)]; for (x = 0; x < 2; x++){

for (y = 0; y < ((QUADRO*QUADRO)/2); y++){ do {

posicaoNoArray = aleatorio(); } while(imagens[posicaoNoArray] != null); imagens[posicaoNoArray] = imagens8[y]; }

(115)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

115

Implementação - Nossa aplicação

private Icon carregaIcone(int x) {

String caminho = "/imagens/duke/" + ( x + 1 ) + ".jpg"; return new ImageIcon(getClass().getResource(caminho)); }

private int aleatorio() {

return (int) (Math.random() * (QUADRO*QUADRO)); }

(116)

Implementação - Nossa aplicação

private void insere() {

for (int cont = 0; cont < (QUADRO * QUADRO); cont++){ Botao bt = new Botao(imagens[cont]);

bt.setBackground(Color.gray); bt.setCarta();

bt.setActionCommand("" + cont + ""); bt.addActionListener(this);

posicoesFiguras[cont] = bt;

painelImagens.add(posicoesFiguras[cont]); }

(117)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

117

Implementação - Nossa aplicação

private void primeiraJogada(int posicao) {

// Verifica se o jogador errou na jogada anterior if (!acertou){

botao1 = (Botao) botaoClicado1; botao2 = (Botao) botaoClicado2; // "Vira a carta"

botao1.setCarta(); botao2.setCarta(); }

// Modifica botao clicado

botaoClicado1 = posicoesFiguras[posicao]; botao1 = (Botao) botaoClicado1; botao1.setFigura();

// Indica que foi o primeiro clique primeiroClique = !primeiroClique; }

(118)

Implementação - Nossa aplicação

private void segundaJogada(int posicao) {

botaoClicado2 = posicoesFiguras[posicao];

botao2 = (Botao) botaoClicado2; // Verifica se o jogador clicou no mesmo botão

if (botaoClicado2 == botaoClicado1){ acertou = false;

} else { // "Vira a carta" botao2.setFigura();

// Compara com o primeiro botão clicado

if (botao1.getFigura().equals(botao2.getFigura())){ // Acertou, então desabilita os botões

acertou = true;

botao1.setEnabled(false);

botao2.setEnabled(false); } else{

// Não acertou, as figuras são diferentes acertou = false;

}

(119)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

119

Implementação - Nossa aplicação

public void actionPerformed(ActionEvent event) {

String num = ((JButton)event.getSource()).getActionCommand(); posicao = Integer.parseInt(num);

if(primeiroClique) {

primeiraJogada(posicao);

System.out.println(posicao); } else {

segundaJogada(posicao); }

atualizaBotao(); }

(120)

Implementação - Nossa aplicação

public void onButtonsEvent(WiimoteButtonsEvent b) {

if (b.isButtonAJustReleased()) {

if(primeiroClique) {

primeiraJogada(posicao);

} else {

segundaJogada(posicao);

}

}

(121)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

121

Implementação - Nossa aplicação

if (b.isButtonUpJustReleased() || b.isButtonDownJustReleased()

|| b.isButtonLeftJustReleased() || b.isButtonRightJustReleased()) { if (b.isButtonUpJustReleased()) {

posicao -= 4;

if (posicao == -4) { posicao = 12;

} else if (posicao == -3) { posicao = 13;

} else if (posicao == -2) { posicao = 14;

} else if (posicao == -1) { posicao = 15;

} }

// ...

(122)

Implementação - Nossa aplicação

// ...

if (b.isButtonDownJustReleased()) {

posicao += 4;

if (posicao == 16) {

posicao = 0;

} else if (posicao == 17) {

posicao = 1;

} else if (posicao == 18) {

posicao = 2;

} else if (posicao == 19) {

posicao = 3;

}

}

(123)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

123

Implementação - Nossa aplicação

// ...

if (b.isButtonLeftJustReleased()) {

posicao -= 1;

if (posicao == -1) {

posicao = 15;

}

}

if (b.isButtonRightJustReleased()) {

posicao += 1;

if (posicao == 16) {

posicao = 0;

}

}

AtualizaBotao();

}

}

(124)

Implementação - Nossa aplicação

private void atualizaBotao() {

for (int i = 0; i < (QUADRO*QUADRO); i++) {

if ( i == posicao ) {

posicoesFiguras[posicao].setBackground(Color.GREEN);

} else {

posicoesFiguras[i].setBackground(Color.gray);

}

(125)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

125

Implementação - Nossa aplicação

public static void main( String args[] ){

Jogo app = new Jogo();

}

// Métodos dos eventos do Wiimote que não utilizados

//...

}

(126)
(127)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

127

(128)

Inspire-se...

2º Congresso Acadêmico do CESMAC

Palestra: Yes Wii Can

Descrição de como alguns projetos usando Wiimote

(129)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

129

Inspire-se...

(130)
(131)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

131

Inspire-se...

(132)

Inspire-se...

Vários outros projetos podem ser encontrados na

Web

Veja alguns vídeos em:

Wiimote Hack

(Referências)

Projetos para substituir o mouse em:

HOWTO: Use the

(133)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

133

Inspire-se...

4º Congresso Acadêmico do CESMAC

a) Mini Guitar Hero com Wiimote

b)Sanfona Hero com Wiimote

c) Tiro ao alvo com Wiimote

d)Arco e flecha com Wiimote

e) n. d. a.

Todos os projetos usam:

(134)

Referências

Heloísa Vieira da Rocha & Maria Cecília Calani

Baranauskas,

Design e Avaliação de Interfaces

,

(135)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

135

Referências

Oracle

How to Write a Mouse Listener

Disponível em:

http://download.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

Guilhem Duche

Wiiusej - Java API for Wiimotes

(136)

Referências

Luiz Gustavo

Jogo da Memória em Java

(137)

3º Congresso Acadêmico do CESMAC

Implementando uma aplicação interativa com o Wiimote

137

Referências

Johnny Chung Lee

Wii Projects

Disponível em: johnnylee.net/projects/wii/

Artur Miglio

Wiimote Hack

Disponível em: blog.seteoitavos.com/2008_01_01_archive.html

LiquidIce

HOWTO: Use the Wii-Mote In Windows as your Mouse

(138)

Agradecimentos

Prof. Alexandre Paes (CESMAC)

Prof. Emerson Lima (IFAL)

(139)

Obrigado pela atenção!

CONTATO

[email protected]

Referências

Documentos relacionados

Resultados: Os parâmetros LMS permitiram que se fizesse uma análise bastante detalhada a respeito da distribuição da gordura subcutânea e permitiu a construção de

O TBC surge como uma das muitas alternativas pensadas para as populações locais, se constituindo como uma atividade econômica solidária que concatena a comunidade com os

No primeiro, destacam-se as percepções que as cuidadoras possuem sobre o hospital psiquiátrico e os cuidados com seus familiares durante o internamento; no segundo, evidencia-se

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Do projeto pedagógico foram extraídas treze competências, tomando como base, o método de Rogério Leme em sua obra: APLICAÇÃO PRÁTICA DE GESTÃO DE PESSOAS POR

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

6- Após o encerramento de todas as urnas, a Mesa da Assembleia de Voto, na presença dos Delegados das Listas, procederá à contagem dos votos entrados e elaborará a ata, dando

I interpret the difference in the estimates obtained when using ordinary least squares (in column (i)) and instrumental variables (in column (ii)) as indicative