Archive for category Java

[JAVA] Projeto Morg – Download

Está disponível a versão 0.6 para download do projeto Morg. O projeto foi retomado. Lembrando que é necessário fazer as configurações corretas no console do DOS para conseguir exibir sem quebra de caracteres.

Configuração do console:

Buffer:
Largura: 110
Altura: 400

Janela:
Largura: 110
Altura: 50

Fonte: Lucida Console

Ahh, claro… Tenham o Java! ;)

Para carregar o game, basta descompactar e executar o morg.bat.

Segue o link: http://code.google.com/p/morggame/

, , ,

Nenhum comentário.

[JAVA] Assert (teste unitário) – Você sabe o que é?

Não? Pois bem, aprendi sobre ele esses dias. Pesquisei pela internet para tentar entender sua a real utilização. Vi muita coisa em fóruns. Ah, antes deixe-me comentar uma coisa: valeu pela dica de um colega usuário (não me lembro em qual fórum) que ao ver meu checklist do Projeto Morg, me recomendou em acrescentar o estudo sobre teste unitário (Assert). Isso mesmo! Eu estou falando aqui dos Testes Unitários, que são utilizados somente em modo de desenvolvimento e nunca em fase de produção.

Leia o resto desse post »

, , , ,

2 Comentários

[JAVA] Projeto Morg 0.6

Deopis de um mês de estudo e desenvolvimento, mais outro mês parado por causa de tempo (padrão), estou postando a nova versão do Projeto Morg, agora na 0.6. Para quem ainda não sabe do que se trata, veja aqui a explicação inicial.

No post anterior aceitei a sugestão de Suissa, para exibir as mensagens do sistema logo abaixo do mapa. Valeu Suissa.

Leia o resto desse post »

, , , , , , , , , ,

7 Comentários

[JAVA] Desafio: percorra circularmente uma matriz

Vamos lá, isso aqui precisa um pouco mais de movimento. Um pequeno desafio aos leitores do blog. Estão vendo a imagem abaixo? Então, que tal fazer uma varredura na matriz seguindo a ordem da flecha? O matriz pode ser do tipo que quiser. O objetivo é apenas seguir a ordem. Deve-se imprimir no console a coordenada atual (x,y) e seu conteúdo.

Leia o resto desse post »

, , ,

Nenhum comentário.

[JAVA] Atualização SDK 6u13 com JavaFX 1.1


Saiu a atualização do Java SDK,  versão 6.0_13 com opção do JavaFX 1.1 integrado.

FAÇA DOWNLOAD

Conheca aqui o changelog da versão.



, , , ,

Nenhum comentário.

[JAVA] Projeto Morg 0.5

O Projeto Morg nasceu na necessidade do estudo da linguagem Java através dos conceitos de desenvolvimento de jogos voltados ao RPG. Foi escolhido o estilo RPG por necessitar de dezenas de classes para as definições gerais do game, como classes de personagens, itens, mundos, mapas, acessórios, inventórios etc. Como se não bastasse, tudo isso necessita de alguns conceitos em Java, como Packages, FSO, Herança, Thread entre outras. A diferença é que neste estilo de game, tudo isso é usado de forma consistente.

Eu poderia começar com um simples jogo de Memória ou Descubra o Número através de classes swing. Mas eu estaria saindo do foco, que é meu estudo em Java. Esse é o motivo principal por iniciar o Projeto Morg em um console DOS (no caso de Windows), onde o Mundo é renderizado em forma de caracteres.

Porque Console? Porque meu foco é estudar os conceitos básico em Java, ainda.

Por se tratar de Console, o projeto até que está avançado. Veja meu checklist:

checklist_morg

Veja que Swing está como foco em meu estudo, como consequência um ambiente mais amigável, e mais adiante, utilizaremos Java 2D. Lembrando que tudo isso tem como foco o estudo da linguagem. Futuramente estarei dando continuidade, transformando num projeto para distribuição.

Estou na versão 0.5. A versão 1.0 será um fato somente quando for implementado todos os itens em “Conceitos RPG“, conforme a lista acima. Tudo ainda em modo Console. Nesta etapa o objetivo não é a diversão.

O funcionamento é simples, mesmo tratando com todos os conceitos acima especificados. Ao iniciar, é instanciado um Mundo, instanciando um Mapa para este Mundo, instanciado os objetos do Mapa, como Arvores  e Gramas e por fim instanciado o Personagem principal, na qual temos o controle através das teclas WASD. A opção X sai do loop principal e encerra o game.

As instâncias das Árvores, da Grama e do Personagem são feitas através de um arquivo texto que é lido assim que o Mundo é criado. Cada linha contém um objeto a ser criado, incluindo o Personagem principal. Dentro de cada loop é redesenhado a tela com as posições dos objetos e a nova posição do Personagem quando solicitamos que este ande para um dos lados.

Sobre o arquivo texto, ele é gerado através de uma Thread que “grava o Mundo” com intervalos de 30 segundos independete da ação do jogador. Ao iniciar o game, antes do loop, inicio essa Thread para que o mundo nunca deixe de ser salvo, assim teremos a posição atualizada de todos os itens do mapa incluindo do Personagem principal.

Veja abaixo um exemplo de quando o game é iniciado (clique):

screenshot_morg

No Mapa gerado, o caractere “*” simboliza uma Árvore, em “~” simboliza a Grama e aquele caractere estranho no canto inferior esquerdo simboliza o Personagem principal, na qual  temos o controle.

Você pode ver no checklist o item “Reconhecimento de itens a sobrepor”. Isso significa que no mapa existem itens que posso passar por cima, como uma grama. Outros itens não posso passar por cima, como a Árvore. Isso é definido em regras de programação no método de movimentação do personagem. Se for um item de sobrepor, meu Personagem sobrepõe esse item (no caso a grama), e ao sair do local, a grama deve voltar em seu ponto de origem, dando a grotesca impressão de que passamos por cima. No caso de árvores, há uma verificação de colisão e o Personagem simplesmente não anda.

Veja abaixo um vídeo do funcionamento:

Importante comentar que todo o game está baseado em vetores, tanto para o Mundo, como para o Mapa. Todas os itens do Mapa estão dentro de um vetor e a varredura para remontar a tela é feita com base nessa mesmo vetor.

Há alguns itens a mais no projeto que não descrevi aqui, como uma breve definição de armadura (está na tela), utilização da classe do cores do Java, sistema bem simples de batalha (sim, já existe) e outras cositas a mais. Estarei evoluindo conforme o checklist e criando novos posts aqui no blog. Se eu lembrar de alguma coisa dessa versão que não comentei, faço um update aqui.

Opiniões são muito bem vindas, só comentar abaixo.


, , , , , , , , ,

7 Comentários

[JAVA] Conexão com Oracle

Abaixo um exemplo simples para conexão Oracle em JAVA utilizando a biblioteca ojdbc14.jar (abaixo para download)

A estrutura dos arquivos estão da seguinte forma:

|Principal.java
|Ora (dir)
|-ConnectionMaker.java
|-lib (dir)
|–ojdbc14.jar

Através da classe Principal abaixo, importamos a classe Connection da bibliteca Java para fazer a instanciação de um objeto Connection e dar início a conexão Oracle. Importamos também, na linha 2, a classe em si que garante a conexão com o banco.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.sql.Connection;
import ora.ConnectionMaker;
 
public class Principal{
 
	public static void main(String args[]){
		try {
			ConnectionMaker conn = new ConnectionMaker();
			Connection con1 = conn.getInstance("user", "password", "banco", "host");
			//String user, String password, String sid, String url
 
			System.out.println("Conectou!");
			con1.close();
			System.out.println("");
			System.out.println("Fechou conexão!");
		} catch(Exception ex) {
			ex.printStackTrace();
		}
 
	}
}

Confira abaixo como fica a classe ConnectionMaker para concretizar a conexão (atenção com a package, veja mais aqui). Veja a linha 5, aqui importamos a biblioteca ojdbc14.jar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package ora;
 
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.driver.OracleDriver;
 
public class ConnectionMaker
{
	public static Connection getInstance(String user, String password, String sid, String url) throws Exception
    {
        DriverManager.registerDriver(new OracleDriver());
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@" + url + ":1521:" + sid, user, password);
        conn.setAutoCommit(false);
 
        return conn;
    }
 
	public static Connection getInstance(String user, String password, String sid) throws Exception
	{
		return getInstance(user, password, sid, "localhost");
	}
}

Para que seu programa funciona com sucesso, defina a váriavel de ambiente CLASSPATH de nossa biblioteca ojdbc14.jar. Vai ficar mais ou menos assim, dependendo onde descompactou os arquivos:

set classpath=D:\caminho\subdir\subdir\subdir\ojdbc14.jar;

Cuidado para não substituir a CLASSPATH existente, insira o já existente na mesma linha separando por ponto e vírgua (;).

Faça download da biblioteca de conexão Oracle incluindo exemplos.

Participação de Luiz Claudio – Londrina/PR que me indicou a classe ConnectionMaker e a biblioteca ojdbc14.jar.


, , ,

3 Comentários

[JAVA] Trabalhando com Classes Abstratas

É muito simples trabalhar com clases abstratas. Uma classe abstrata nada mais é do que uma especificação conceitual para outras classes. O que isso que dizer? Que nunca iremos instanciá-la. Ela apenas fornece um modelo para geração de outras classes. Esta nunca está completa, ou seja, servirá apenas para criação de funcionalidades genéricas de casses filhas. Podemos também chamar as classes abstratas de super classe.

Sem complicações, o basico é isso! Disponibilizei no final do post um link para download das classes exemplificadas aqui.

Agora a parte prática. Todos os arquivos poderão ficar no mesmo nível de diretório.
A hierarquia das classes deste exemplo estão da seguite forma (somente estrutura, e não definição de atributos e métodos):

Java - Herança

Leia o resto desse post »

, , ,

7 Comentários

[JAVA] Definindo uma package

Se você ainda não sabe como trabalhar packages em Java, aqui demonstro um exemplo bem fácil em como fazer essa estrutura. Logo no final disponibilizo os fontes para download.

A estrutura dos arquivos demonstrados estão da seguinte forma:


|Pasta1
|-ClasseSub.java
|Principal.java

O que isso quer dizer? Que na pasta principal está o arquivo Principal.java e o diretório Pasta1 (que será nossa package). Dentro de Pasta1 contém a classe ClasseSub.java. Uma package não passa de uma pasta física em seu HD, vamos dizer assim.

Salvo o código abaixo como Principal.java dentro de uma pasta qualquer:

1
2
3
4
5
6
7
8
9
10
import Pasta1.*;
 
  public class Principal{
 
    public static void main(String args[]){
    ClasseSub char1 = new ClasseSub("Daniel");
    String resNome = char1.getNome();
    System.out.println ("Nome: " + resNome);
  }
}

O mais importante aqui é você reparar na linha 1, importamos todo o conteúdo (*) da package Pasta1 para nosso projeto. Agora podemos utilizar qualquer classe que esteja lá dentro.

Agora, o código da classe interna, ClasseSub.java, salve dentro da package Pasta1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Pasta1;
 
public class ClasseSub {
 
  private String charNome;
 
  // CONSTRUTORES		
  public ClasseSub(){
    charNome = "Sem Nome";
  }
 
  public ClasseSub(String nome){
    charNome = nome;
  }
  // FIM CONSTRUTORES		
 
  public String getNome(){
    return charNome;
  }
}

A única regra diferente de uma classe normal é a definição de package na linha 1. A classe ClasseSub precisa conhecer onde ela está localizada, por isso da definição. Compile tudo e arquivos .class serão gerados. Agora é só testar seu funcionamento. Simples e rápido, não?

Faça download dos arquivos fonte.

, , ,

1 Comentário