Pular para o conteúdo principal
Fazendo um jogo: Terceiro dia.
Já faz três dias que estou na viciante tarefa de desenvolver um joguinho. Escolhi utilizar a linguagem Java, já que tenho aprendido e gostado muito de trabalhar com esta. O joguinho é uma espécie de campo minado modo texto. “Basicamente mostro o mapa ou campo, como queira, todos marcados pelo caractere”?”“, em seguida pergunto a coordenada que desejamos explorar, em linha e coluna. O jogo verifica se é uma bomba, se sim fim de jogo, senão, verifica se há alguma bomba ( ou mina, como queira, heheh...) ao seu redor, soma as quantidade e coloca na posição o resultado.

Primeiro implementei uma classe, responsável pelas operações e depois criei uma classe que herda desta, para que eu pudesse testar todo funcionamento.

Fui implementando métodos conforme as idéias iam brotando e pode crer, não param de aparecer. Na verdade já estou achando que a classe MinesField poderia estar melhor implementada, mas devo fazer isso somente mais adiante.

Confesso que apesar de estar um pouco confuso, estou muito contente por que em um dia apenas consegui com que funcionasse e desde então estou trabalhando na melhor implementação de métodos que possam deixar o joguinho mais divertido e dinâmico. E não só estou feliz por isso, mas também por que é a primeira vez que desenvolvo um joguinho totalmente sozinho, com minhas próprias idéias (Ok, o conceito de campo minado não é meu, mas o desenvolvimento em Java sim...). Minha classe MinesField contém o seguinte:

getLevel(): nos retorna o atual nível ( fase ).

setLevel(): determina o nível ( fase ).

setField( int level ): determina o array que terá as bombas, de forma a colocar bombas de acordo com o nível, em posições aleatórias do array. Desta forma o jogo fica interessante e vai ficando mais difícil gradualmente.

setField(): determina o array que terá as bombas, porém, este preenche todas as posições de forma aleatória, o que não nos dá um controle sobre a quantidade de bombas possíveis neste array. Antes de implementar deste modo, o array com as bombas era fixo, pré-estabelecido, o que tornou o jogo enjoativo. Porém com este método de quantidade aleatória de bomba, ficou muito difícil vencer o jogo, que de certa forma, contribuía para tornar o jogo muito chato! A solução foi criar a sobrecarga de método acima, deixando o jogo méis interessante. Este método foi mantido ainda, por uma possível utilização como bônus ou modo difícil.

getField(): este método nos retorna o conteúdo do array que contém as bombas.

setBlankField(): este método determina que o array de manipulação tenha todos seus valores preenchidos com algum caractere (“?”, no nosso caso.)

setBlankField( int x, int y, String z ): esta sobrecarga serve apenas para atualizar os valores do array de manipulação.

getBlankField(): retorna o conteúdo do array de manipulação.

verificaMina( int x, int y ): boa parte da lógica do jogo: verificamos se o conteúdo da posição passada é uma bomba, se for, jogo acaba, senão, verifica todas as posições ao lado, se houver bomba(s) em algum dos vizinhos, escreve o resultado o conteúdo da posição que foi passada no parâmetro.

verificaVitoria(): aqui vamos verificar se o jogo continua ou se acabou. Se houver posições não exploradas que possam ser campo livre, o jogo continua. O jogo é vencido quando todas as posições livres foram descobertas, restando apenas posições não exploradas que são as bombas.

drawField( String[][] nome field ): com este método, entro como parâmetro o nome do array que pretendo desenhar na tela e temos este campo “desenhado” na tela.

setGameOver(): mostra-nos uma mensagem de que o jogo acabou.

setVitoria(): mostra-nos a mensagem que o jogo foi vencido.

Ontem implementei o setField() aleatório e como minha beta-tester ( minha namorada ) e, posteriormente eu, não conseguíamos vencer ( era muito mais sorte do que estratégia para descobrir posições livres/posição das bombas...), devido à dificuldade, resolvi criar um método mais “justo” de criar as bombas no campo. Hoje implementei o setField( int level) baseado no nível, o que melhorou muito a diversão, que vai de muito fácil à bem difícil ao final.


ToDO:
exibir o mapa com as bombas ao perder o jogo;
novos níveis, reiniciar após vitória;
gerar pontuação
gerar graduação do soldado
melhorar a interface: limpar a tela,...

Comentários

Postagens mais visitadas deste blog

Gamasutra's Postmorten: RiverMan Media's MadStone

Aqui vão os meus comentários sobre este postmortem. O jogo em questão, MadStone, foi desenvolvido para a plataforma WiiWare, vindo de um antigo sonho de publicar um jogo para Nintendo (dos fundadores da RiverMan). MadStone é um puzzle 2d, onde as peças vão caindo (assim como tetris) e que custa U$8.00 no WiiWare. Antes de publicar um jogo para WiiWare, a desenvolvedora havia já desenvolvido outros dois jogos casuais para PC, Cash Cow e Primate Panic. Tela do jogo MadStone Bom, vamos às dicas deixadas pelos desenvolvedores: O que funcionou: 1. Correr atrás da Nintendo: Entre contatar a Nintendo e se tornar um desenvolvedor autorizado, os desenvolvedores tiveram que correr um pouco atrás. A primeira lição é justamente essa, não é fácil correr atrás e muitas vezes temos que sair de nossa zona de conforto para conseguir as coisas. 2. Plataforma 2D: A decisão de desenvolver um jogo 2D foi tomada por algumas facilidades como ferramentas de arte mais simples, como o photoshop; Pouco código

Converter campo text para varchar – SQL Server 2000

Outro dia, conversando com um analista de sistemas no trabalho, este me perguntou, qual era melhor, usar o tipo text ou varchar no campo. Bom, baseado em minhas experiências, respondi que prefiro trabalhar com varchar. Mas antes, uma breve pesquisa no google nos mostrou que: text     Variable-length data with a maximum length of 2^31 - 1 characters varchar Variable-length data with a maximum of 8,000 characters fonte: Database Journal Depois de analisarmos o propósito a que o campo serviria, decidimos por um campo varchar(500). Se você, assim como eu, tentou utilizar uma alter table, alter column, deve ter visto um aviso do SQL Server de que isto não é possível de se fazer. Mas e agora? É isso mesmo que pensamos: temos que criar o novo campo e popular com o que havia no antigo campo. Exemplo: EXEC sp_rename 'tab_inf_nota.mensagem', 'mensagem_old', 'COLUMN'

My fist job @ game industry!

Yes, yes and yes! I have no words to describe this! Awesome, hot, wild! So, what I did? Work as Game Tester for  @LowpolyStudios The game Blowing Pixels Planet Defender for #iPhone was sended to Apple Store review in August 17 and is expected to launch in August 29, so stay tunned! Blowing Pixels Planet Defender, or just BPPD, is a Defender kind game, so you have to break the enemies invasion. Actually, this game is so addictive, like play Tetris! Your brain will enjoy, hwar, hwar, hawr... You can see more details @ developer's web sites: http://www.lowpoly-studios.com/ http://www.facebook.com/LowpolyStudios http://twitter.com/#!/lowpolystudios http://www.blowing-pixels.com/planet_defender.php Oh! Yeah, the Credit Screen: I'm in Testers part: ALEX CANCADO. So, fuck'n YEAH! Next related post I will write about how I get in touch with developer and my contribution about the game.