Graphics2D

Você pode fazer uma classe de Tile mais reutilizável, passando para ela o link da imagem. Também dá uma olhada no padrão Flyweight, para evitar repetições desnecessárias e consumo excessivo de memória.

eu mudei isso:

public void draw(Graphics g, int lineI, int columnI, int lineF, int columnF){ for(int i = lineI; i <= lineF;i++){ for(int j = columnI; j <= columnF;j++){ for(int column = 0; column<12;column++){ for(int row = 0; row<8;row++){ ((Tile)this.get(i, j)).draw(g,column*25,row*25); } } } } } que alem de da errado realmente passava umas 1000 vezes na parte que desenha
por isso:

[code]
public void draw(Graphics g, int line, int column){
int row = 0;
int col = 0;
int y = line-6;
int x = column-8;

    	 while(row<12){
    		 while(col<16){
    			 	((Tile)this.get(y,x)).draw(g, col*25, row*25);
    			 col++;
    			 x++;
    		 }
    		 col=0;
    		 x = column-8;
    		 y++;
    		 row++;
    	 }
     }[/code]

que agora alem de não ter mais lentidão deixa mais bonito meu código e eu não preciso calcula aonde ta meu boneco só dow a cordenada do meio da tela e o método faz o resto

Cara não tem outra maneira de coloca os quadrados?? porque olha só minha classe que ta desenhando o mapa(só um quadrado de grama com agua em volta^^)

[code]
import java.awt.Graphics;

public class MyMap {
public Matrix myMap;
public void draw(Graphics g, int line, int column){
myMap.draw(g, line, column);
}
public MyMap(){
WalkableTile diagonal;
myMap = new Matrix(new WalkableTile(“sprites/grass.jpg”));
NoWalkableTile waterWall = new NoWalkableTile(“sprites/water.jpg”);
for(int i=0;i<16;i++){
myMap.put(0, i, waterWall);
myMap.put(11, i, waterWall);
}
for(int i=0;i<12;i++){
myMap.put(i, 0, waterWall);
myMap.put(i, 15, waterWall);
}
WalkableTile waterUpWall = new WalkableTile(“sprites/grasswithwaterup.jpg”);
WalkableTile waterDownWall = new WalkableTile(“sprites/grasswithwaterdown.jpg”);
for(int i=1;i<15;i++){
myMap.put(1, i, waterUpWall);
myMap.put(10, i, waterDownWall);
}
WalkableTile waterRightWall = new WalkableTile(“sprites/grasswithwaterright.jpg”);
WalkableTile waterLeftWall = new WalkableTile(“sprites/grasswithwaterleft.jpg”);
for(int i = 1;i<11;i++){
myMap.put(i, 1, waterLeftWall);
myMap.put(i, 14, waterRightWall);
}
diagonal = new WalkableTile(“sprites/grasswithwaterleftdown.jpg”);
myMap.put(10, 1, diagonal);
diagonal = new WalkableTile(“sprites/grasswithwaterleftup.jpg”);
myMap.put(1, 1, diagonal);
diagonal = new WalkableTile(“sprites/grasswithwaterrightdown.jpg”);
myMap.put(10, 14, diagonal);
diagonal = new WalkableTile(“sprites/grasswithwaterrightup.bmp”);
myMap.put(1, 14, diagonal);
}
}[/code]
e eu coloquei um código pra ve se eu posso anda ou não ve

public void tryWalkUp() { if(this.myMap.myMap.get(y-1, x) instanceof NoWalkableTile){ return; }else{--y; } } public void tryWalkDown() { if(this.myMap.myMap.get(y+1, x) instanceof NoWalkableTile){ return; }else{++y; } } public void tryWalkRight() { if(this.myMap.myMap.get(y, x+1) instanceof NoWalkableTile){ return; }else{++x; } } public void tryWalkLeft() { if(this.myMap.myMap.get(y, x-1) instanceof NoWalkableTile){ return; }else{--x; } }
agora só faltaeu aplica todos os conceitos no jogo depois^^ e desenha o mapa

Agora faça uma classe que leia o seu mapa de tiles de um arquivo.

E depois, faça um editorzinho para esse arquivo. Teu código vai ficar mais limpo e flexível.

Depois, pense um pouco melhor na sua classe de tile, pra evitar tanto InstanceOf. Talvez o WalkableTile ao invés de ser uma classe tivesse de ser um atributo.

Dá também uma refatorada nessas funções tryToWalk, criando uma tryToWalkTo passando x e y relativos, assim:

[code]private void tryToWalkTo(int relX, int relY) {
if (this.myMap.myMap.get(y + relY, x + relX) instanceof NoWalkableTile) {
return;
}
y += relY;
x += relX;
}

public void tryWalkUp() {
tryToWalkTo(0, -1);
}

public void tryWalkDown() {
tryToWalkTo(0, 1);
}

public void tryWalkRight() {
tryToWalkTo(1,0);
}

public void tryWalkLeft() {
tryToWalkTo(-1,0);
}
[/code]

[quote=ViniGodoy]Agora faça uma classe que leia o seu mapa de tiles de um arquivo.

E depois, faça um editorzinho para esse arquivo. Teu código vai ficar mais limpo e flexível.
[/quote]

Ler por exemplo de um xml??
dai como seria esse editor?

Exatamente. De um XML, ou de um arquivo de formato definido por você, tanto faz.

Basicamente, no editor você coloca um grid, uma barra de menu e coloca os tiles no local onde você clicar. É muito útil quando você quer fazer várias vazes, chega realmente a compensar o esforço.

Se seu jogo pode ter uma fase só, então simplesmente deixe o código macarrão por lá e ponha um comentário do tipo:
//Um editor deve ser feito para substituir a criação manual, como feita nessa classe.

Se for um trabalho de graduação, fazendo desse jeito nenhum professor poderá te criticar… Se te perguntarem o pq que vc não fez o editor, pode dizer que não era do escopo do trabalho. Aliás, o ideal é até colocar a construção do editor num capítulo final, chamado de “Sugestão de Melhorias”, “Modificações Futuras” ou qualquer coisa do gênero (fale com seu orientador para ver o nome que ele gosta).

Outras dicas:

  1. Atributos devem ser sempre private: Quando muito, protected. Deu para ver que o atributo MyMap da classe MyMap não está seguindo essa regra, porém, ela é muitíssimo importante.
  2. Independente de fazer ou não uma classe MapBuilder (que lê do arquivo), separe a construção do mapa numa classe separada. Assim, esse código macarrão fica encapsulado e fica fácil de substitui-lo por algo mais eficiente depois. É o uso do padrão AbstractFactory.
  3. Quando tiver alguma coisa rodando, zipa e manda para mim! Aí posso olhar com mais carinho o seu código e te dar dicas mais aprofundadas.

Tipo eu já separei o mapa do resto ele só constroi o mapa mas seria bem legal se vc me ajudasse no editor^^

Eu tenho só uma parte pronto com uma nave andando pelo macarrão^^, ta tudo na minha casa depois eu te mando pra você ve tudo bem?

e o acesso public é por não ser definitivo essa classe eu vou por depois e ageita as coisas.

sobre XML só vi o tutorial do GUJ e não entendi muito bem mas vou continuar aprendenso essa parte

Obs:Eu joguei o seu joguinho BatalhaEstelar e achei legal oque você fez e ia fica mais legal a nave laranja ter AI^^

Não precisa necessariamente ser XML. Se quiser só serializar os objetos, já deve servir.

Vou colocar AI na nave do computador, não só na laranja. Estou pensando numa versão single player do jogo, também com alguns parâmetros configuráveis por scripts LUA.

Você viu o e-mail que te passei no hotmail com a apostila de Game Design?

To Lendo a apostila agora

e mesmo com XML ou não preciso de ajuda com o editor, não tenho nen idéia de onde começar

ViniGodoy onde ta o arquivo do seu jogo? faz um upload denovo dele ai pra galera :wink:

Está aqui:
http://vinigodoy.wordpress.com/meus-jogos

Ei ViniGodoy por favor uma ideia pro editor^^
ah eu aprendi a mexe com XML com o xstream de acordo com o GUJ sera que é o suficiente?

alias eu sei pra que ser e como escreve XML só não sei lê nen grava com Java(sabia)

[quote=ViniGodoy]Está aqui:
http://rapidshare.com/files/30158512/BatalhaEstelar_v2.0.zip

As teclas são
Nave laranja:
A D W - Movimentação
N - Tiro
M - Poder especial: Invisibilidade

Setas - Movimentação da nave verde
Shift - Tiro (desligue as teclas de aderência do Windows antes de entrar no jogo)
Control - Poder especial: Recupera vida

Quem jogar, favor comentar em MP! :slight_smile:

[/quote]Em casa eu pego, aqui não tenho acesso ao rapidshare, ai dou uma jogada e lhe dou um feedback, mas já aviso que farei no mínimo o dobro de pontos que vc já fez… rsrs

Acho muito legal a parte de 3D, talvez um dia eu perca o medo e comece fazer alguma coisa com Java 3D.

[quote=Mark_Ameba]Ei ViniGodoy por favor uma ideia pro editor^^
ah eu aprendi a mexe com XML com o xstream de acordo com o GUJ sera que é o suficiente?

alias eu sei pra que ser e como escreve XML só não sei lê nen grava com Java(sabia)[/quote]

Você pode fazer algo similar a esse aqui (espero que o link ainda funcione):
http://www.guj.com.br/posts/list/15/53776.java#285675

[quote=Luiz Aguiar]Em casa eu pego, aqui não tenho acesso ao rapidshare, ai dou uma jogada e lhe dou um feedback, mas já aviso que farei no mínimo o dobro de pontos que vc já fez… rsrs

Acho muito legal a parte de 3D, talvez um dia eu perca o medo e comece fazer alguma coisa com Java 3D.[/quote]

Ufa! Ainda bem que meu jogo não se baseia em pontos. :slight_smile:

Primeiro vou ver a parte de IA (é a ordem da pós), depois entro em OpenGL e DirectX. Lá é tudo focado em C++, vemos java só para a parte de J2ME.

Não adianta, para jogos o C++ é muito bom, tem muitas APIs mega conceituadas e é a única linguagem suportada pelos consoles. Fora o fato dele ser mais otimizável do que o Java, seja em performance, uso de memória ou aproveitamento do hardware.

Mas para quem quer aprender Java 3D, o Killer Game Programming in Java já dá uma ótima introdução. E tem o tutorial do Asteroids, no Coke and Code também, que é muito bom e simples, pois apresenta um jogo 2D em tecnologia 3D.

[quote=ViniGodoy][quote=Mark_Ameba]Ei ViniGodoy por favor uma ideia pro editor^^
ah eu aprendi a mexe com XML com o xstream de acordo com o GUJ sera que é o suficiente?

alias eu sei pra que ser e como escreve XML só não sei lê nen grava com Java(sabia)[/quote]

Você pode fazer algo similar a esse aqui (espero que o link ainda funcione):
http://www.guj.com.br/posts/list/15/53776.java#285675[/quote]

O link funciona mas o Link nesse link não =/
manda pro megaupload e mostra que a pagina não pode ser exibida
nen no 4shared

Tenta entrar em contato com o dono do jogo. O seu editor será realmente muito parecido com o dele… e os fontes já podem te ajudar. Lembro-me que os dele estavam muito bem organizados.

Mais tarde eu vou te mandar o básico que eu fiz ok?

Ok, fico aguardando.

Recuperando post das antigas…

Gostaria de saber onde acho um livro, ou tutorial bom pra exibir meu mapa tiled.
Eu usei um programa para desenhar e exportei como XML, então já estou no passo pelo visto, só preciso entender como manipular esses arquivos XML e montar meu mapinha na tela.

Baixei deste site o programa que monta mapa