Nesse tutorial iremos mostrar uma maneira de como construir um menu para os nossos games, além da classe Game.java que iremos criar no nosso pacote tutorial14 dentro do projeto JAVAGAMES2D iremos também criar um uma classe chamada Menu.java. então é o seguinte, na classe Menu.java, iremos definir como os nossos menus irá se comportar, e iramos criar um menu dentro Game.java.
No exemplo de hoje teremos três cenários, e um menu que nos levará para cada cenário(Jogar, Opções e Ajuda) e um item no menu para sair do game!
Observe com atenção a nossa classe Menu.java (Leia os comentários com atenção!)
1: import java.awt.Color;
2: import java.awt.Font;
3: import java.awt.Graphics;
4: import java.awt.event.KeyEvent;
5: import java.awt.image.BufferedImage;
6: public class Menu {
7: int cenario = -1; //ESSA VARIAVEL INDICA EM QUE CENÁRIO ESTAMOS, -1(NENHUM CENÁRIO) (0,1,2,3...N) OUTROS CENÁRIOS
8: int itemSelecionado = 0; //ESSA VARIAVEL SERVIRÁ PARA INDICAR QUAL ITEM QUE ESTÁ SELECIONADO (o atual é zero que é o primeiro item do menu)
9: String itens[]; //aqui vamos guardar os itens do nosso menu (jogar, opções, sair...etc)
10: Graphics bbg; //como nos outros métodos da classe game.java usamos essa varialvel para desenhar elementos na tela
11: boolean ativo; //indica se o menu está ativo ou não (ao inicar o jogo desativamos o menu, para o controlemos durante o jogo)
12: int x; //coordenada x do menu
13: int y; //coordenada y do menu
14: int tamanhoDaFonte = 20; //nem precisa explicar não é ?
15: int distanciaEntreItens = 15;//distância entre cada item do menu!
16: Font fonte = new Font("Arial", Font.BOLD, tamanhoDaFonte);//a fonte do nosso menu
17: Color corSelecionado = new Color(255, 0, 0); // COR VERMELHA para o item selecionado
18: Color corNaoSelecionado = new Color(0, 0, 0); // COR PRETA para o item que não está selecionado
19: //isso é o construtor ao criarmos o objeto do tipo Menu, teremos que informar o número de itens as coordenadas e se ele estará ativo ou não!
20: public Menu(int numeroDeItens, int x, int y, boolean ativo) {
21: itens = new String[numeroDeItens];
22: this.x = x;
23: this.y = y;
24: this.ativo = ativo;
25: }
26: //esse metodo só chamará o método controlaMenu se ele estiver ativo!
27: public void controlar(KeyEvent e) {
28: if (ativo) {
29: controlarMenu(e);
30: }
31: }
32: //esse método nos fará retornar ao menu ao pressinarmos "Esc"
33: public void voltarAoMenu(KeyEvent e){
34: //se tecla pressionada for igual a "Esc"
35: if(e.getKeyCode() == e.VK_ESCAPE){
36: cenario = -1; //com isso sai dos cenários em que estivermos...
37: ativo = true; //e reativa o menu para que o possamos controlar novamente...
38: }
39: }
40: //esse método controlará o nosso menu através do teclado
41: //ele é chamando dentro do método controla()
42: private void controlarMenu(KeyEvent e) {
43: //se pressionar a tecla "cima" diminui 1 em itemSelecionado
44: if (e.getKeyCode() == e.VK_UP) {
45: itemSelecionado -= 1;
46: }
47: //se pressionar a tecla "baixo" aumenta 1 em itemSelecionado
48: if (e.getKeyCode() == e.VK_DOWN) {
49: itemSelecionado += 1;
50: }
51: //isso aqui é para controlar os limites extrmos do menu
52: //caso eu esteja com 1º item selecionado e pressione para cima, ele vai para a ultima opção
53: //caso eu esteja com o ultimo item selecionado e pressione para baixo, ele vai para primeira opção
54: if (itemSelecionado >= itens.length) {
55: itemSelecionado = 0;
56: }
57: if (itemSelecionado < 0) {
58: itemSelecionado = itens.length - 1;
59: }
60: //se pressionar a tecla Enter ele muda o valor de cenario para o item que está selecionado
61: //isso fará mudar de cenário e desativará o menu para que ele não seja mais controlado!
62: if(e.getKeyCode() == e.VK_ENTER){
63: cenario = itemSelecionado;
64: ativo = false;
65: }
66: }
67: //esse método irá desenhar o nosso menu na tela!
68: //a um loop (for) que irá listar todos os itens que está guardado em itens[]
69: //um calculo é feito para a coordenada y de cada intem do nosso menu, para que eles fiquem
70: //um distante do outro, então caso y = 10, o item 0 será: 10+(0*(20+15)) = 10
71: //para o item 1 será: 10+(1*(20+15)) = 45
72: //para o item 2 será: 10+(2*(20+15)) = 80
73: //para o item 3 será: 10+(3*(20+15)) = 115, e assim por diante...
74: public void desenharMenu() {
75: bbg.setFont(fonte);//seta a fonte que definimos bem acima na declaração de variáveis
76: for (int i = 0; i < itens.length; i++) {// aqui é o inicio do nosso loop
77: if(itemSelecionado == i){//se ele estiver selecionado muda a cor para vermelho e desenha o item na tela
78: bbg.setColor(corSelecionado);
79: bbg.drawString(itens[i], x, y+(i*(tamanhoDaFonte+distanciaEntreItens)));
80: }else{//se não estiver selecionado muda a cor para preto e desenha o item na tela
81: bbg.setColor(corNaoSelecionado);
82: bbg.drawString(itens[i], x, y+(i*(tamanhoDaFonte+distanciaEntreItens)));
83: }
84: }
85: }
86: }
Agora veja como criaremos o nosso menu dentro de Game.java, (leita os comentários com atenção!)
1: import java.awt.*;
2: import java.awt.event.KeyEvent;
3: import java.awt.event.KeyListener;
4: import java.awt.image.BufferedImage;
5: import java.io.File;
6: import javax.swing.ImageIcon;
7: import javax.swing.JFrame;
8: public class Game extends JFrame implements KeyListener{
9: BufferedImage backBuffer;
10: int FPS = 30;
11: int janelaW = 500;
12: int janelaH = 500;
13: //AQUI DECLARAMOS O NOSSO MENU COM:
14: //4 itens, coordenadas x e y = 100, a ativo = true
15: //agora olhe esse método abaixo cenarios()
16: Menu menuPrincipal = new Menu(4, 100, 100, true);
17: //esse método vai desenhar na tela alguns possíveis cenários do nosso game
18: //lá em Menu.java cenario foi definido como -1
19: //se cenario == 0 muda a cor do fundo e mostra um texto
20: //se cenario == 1 muda a cor do fundo e mostra um texto
21: //se cenario == n muda a cor do fundo e mostra um texto...
22: //agora obser o nosso método desenharGraficos()
23: public void cenarios(){
24: Graphics bbg = backBuffer.getGraphics();
25: bbg.setFont(new Font("Arial",Font.BOLD,20));
26: if(menuPrincipal.cenario == 0){
27: bbg.setColor(new Color(255,100,100));
28: bbg.fillRect(0, 0, janelaW, janelaH);
29: bbg.setColor(Color.BLACK);
30: bbg.drawString("Você escolheu Jogar", 100, 200);
31: //aqui você pode escolher o que irá aparecer caso o usuario escolha essa item do menu!
32: }
33: if(menuPrincipal.cenario == 1){
34: bbg.setColor(new Color(100,255,100));
35: bbg.fillRect(0, 0, janelaW, janelaH);
36: bbg.setColor(Color.BLACK);
37: bbg.drawString("Você escolheu Opções", 100, 200);
38: }
39: if(menuPrincipal.cenario == 2){
40: bbg.setColor(new Color(100,100,255));
41: bbg.fillRect(0, 0, janelaW, janelaH);
42: bbg.setColor(Color.BLACK);
43: bbg.drawString("Você escolheu Ajuda", 100, 200);
44: }
45: if(menuPrincipal.cenario == 3){
46: System.exit(0);//esse comando fecha o nosso game!
47: }
48: }
49: public void atualizar() {
50: }
51: public void desenharGraficos() {
52: Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI
53: Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...
54: bbg.setColor(Color.WHITE);
55: bbg.fillRect(0, 0, janelaW, janelaH); //PINTA O FUNDO COM UM QUADRADO BRANCO
56: menuPrincipal.desenharMenu();//isso desenhará nosso menu
57: cenarios();//isso irá desenhar os cenários que escolhermos no menu
58: //agora observe o método inicializar()
59: //==================================================================================
60: g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!
61: }
62: public void inicializar() {
63: setTitle("Titulo do Jogo!");
64: setSize(janelaW, janelaH);
65: setResizable(false);
66: setDefaultCloseOperation(EXIT_ON_CLOSE);
67: setLayout(null);
68: setVisible(true);
69: backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
70: //AQUI ESTAMOS ADICIONANDO UM ESCUTADOR DE TECLAS
71: addKeyListener(this);
72: //aqui definimos o texto de cada item do nosso menu
73: menuPrincipal.itens[0] = "Jogar";
74: menuPrincipal.itens[1] = "Opções";
75: menuPrincipal.itens[2] = "Ajuda";
76: menuPrincipal.itens[3] = "Sair";
77: //aqui fazemos o método desenhaMenu() que fica lá em Menu.java
78: //desenhar no nosso buffer
79: //.. agora para finalizar observe o método de evento keyPressed() mais abaixo...
80: menuPrincipal.bbg = backBuffer.getGraphics();
81: }
82: public void run() {
83: inicializar();
84: while (true) {
85: atualizar();
86: desenharGraficos();
87: try {
88: Thread.sleep(1000/FPS);
89: } catch (Exception e) {
90: System.out.println("Thread interrompida!");
91: }
92: }
93: }
94: public static void main(String[] args) {
95: Game game = new Game();
96: game.run();
97: }
98: public void keyPressed(KeyEvent e) {
99: //aqui, chamamos os métodos que irá controlar o menu pelo teclado
100: menuPrincipal.controlar(e);//esse controla o menu
101: menuPrincipal.voltarAoMenu(e);//esse faz voltar para o menu quando pressionarmos "Esc"
102: }
103: public void keyReleased(KeyEvent e) {
104: }
105: public void keyTyped(KeyEvent e) {
106: }
107: }
Super simples! não é?
Observem como ficou o meu:
Até o nosso próximo tutorial!
Abraços e não deixem de comentar...
Nenhum comentário:
Postar um comentário