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,...
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