Arquivo por categoria jogos

Outlaw Solitaire

Este é um joguinho de cartas para aqueles que possuem um gosto pelo pôquer. O objetivo é formar jogos de pôquer na horizontal e na vertical com as cartas tiradas do baralho.

Ele está no repositório extras.

fonte: Nokia N900 Applications

Cúpula de paz

Este vídeo não tem muito a ver com o N900, mas é muito bom, e relativo a um jogo que existe para ele! Então acho que vale a pena compartilhar!

fonte: Gizmodo

Tags:

Rodando jogos do WebOS no N900

O WebOS é o sistema operacional que roda em alguns Palm, como o Pre. Justamente esse aparelho possui um hardware semelhante ao do N900 na parte gráfica. E o WebOS também é um sistema baseado em Linux. E o processador do aparelho também é um ARM.

Tudo isso não faria os jogos rodarem no N900….mas um detalhe faz: a biblioteca gráfica utilizada nos jogos também existe para o aparelho da Nokia! E obviamente um usuário do T.M.O., em algumas horas de testes, conseguiu fazer pelo menos 2 jogos rodarem no N900, nativamente, sem necessidade de emulador nem nada disso.

Este é o vídeo mostrando o feito:

Eu fiz um teste com o Need For Speed Undercover e o jogo roda perfeitamente, com gráficos excepcionais, som, e tudo o mais.

A única coisa que pode complicar o uso dos jogos é que o Palm Pre possui uma tela multitoque, e os jogos podem fazer uso disso. O Need For Speed por exemplo usa o toque de dois dedos para dar uma pausa no jogo….o The Sims 3 (outro que aparece no vídeo) usa dois dedos para mudar o ângulo de visão. Portanto se o jogo exige mais de um dedo pode não ser possível jogá-lo.
Leia mais $raquo;

Blockout: quando pensa que está quase acabando…

Ok…eu sei que não estava quase acabando! Não o jogo inteiro, mas pelo menos toda a infra-estrutura necessária. Eis mais algumas imagens dele:

Acho que houve um significativo progresso entre a primeira versão e esta! E talvez até entre a anterior e esta.

Mas como nem tudo são flores, ontem finalmente fui testar o jogo efetivamente no N900. Pois é….até agora os meus testes eram todos no emulador. Somente algumas poucas coisas eu coloca no aparelho para testar. E claro que surgiram vários problemas!

Dois deles darão um pouco de trabalho. O primeiro é com o menu. Na imagem acima já dá pra vê-lo, mas na prática ele deveria ficar deste jeito:

Não sei porque o N900 não está desenhando a transparência corretamente. Na verdade, ele não está desenhando nada transparente no menu!

E o outro problema é na movimentação dos blocos. Existe um temporizador interno que faz com que as peças “caiam” automaticamente. Mas quando isso ocorre junto a um movimento do jogador (movendo a peça para os lados, por exemplo), o desenho na tela fica bagunçado.

O motivo disso acontecer eu sei: para evitar que o jogo consuma muita energia desnecessária, e às vezes até fique lento, eu não redesenho a tela inteira a todo instante, mas apenas o pedaço que sofreu uma alteração. Acontece que com dois movimentos acontecendo ao mesmo tempo, na hora de redesenhar um deles irá sobrepor o outro, deixando “sujeira” na tela.

A solução eu também sei qual adotar, mas pode não ser tão simples: precisa ser um sistema de “pilha”, onde os movimentos são colocados numa fila, e sempre tratados 1 a 1, nunca simultaneamente. Em algumas linguagens isso seria facilmente resolvido com métodos sincronizados (o método não pode ser executado mais de uma vez simultaneamente, sendo que o segundo que o chamou espera até que o primeiro tenha terminado). Mas o Python não possui isso.

Fora tudo isso também notei que o sistema para fazer a peça ser fixada no tabuleiro também não está muito bom. Às vezes o pressionamento mais longo do botão não é reconhecido.

Ainda falta um bocado pro jogo poder ir pros repositórios, mas resolver esses problemas já permitirá pelos menos que ele possa entrar em alpha (mais gente jogue, além de mim).

Embelezando o Blockout

Eu não sou nenhum especialista em desenho, e muito menos em fazer telas! Mas estou tentando deixar o jogo mais agradável visualmente. A primeira “vítima” dessa minha ideia é o tabuleiro.

Não é tão simples quanto parece. Como eu tenho por premissa para o jogo ele ser totalmente configurável, não dá para ter uma imagem fixa. Afinal de contas tanto a quantidade de linhas e colunas quanto a profundidade podem ser definidas pelo jogador, o que interfere diretamente na imagem.

Originalmente apenas desenhava as linhas, seguindo a sequência mostrada nestas imagens.


(clica que cresce)

Primeiro o fundo, depois as “camadas”, e por último as linhas diagonais, que juntando tudo resulta na última imagem.

Mas como colocar os blocos com uma textura e ainda manter a aparência de profundidade? Criei uma imagem, que na prática é um triângulo (na verdade um quadrado com “metade” desenhado e a outra metade transparente). Coloco essa imagem na tela, fazendo com que ele preencha metade do tabuleiro. Para a outra metade, rotaciono a imagem e aplico um filtro para deixá-la mais clara.

Para o fundo do tabuleiro tenho uma outra imagem, que simplesmente aumento seu tamanho para que preencha todo o fundo. Mas deixando apenas assim não temos a noção de profundidade tão boa, como dá pra ver nesta imagem.

A solução é desenhar linhas junto às linhas separadoras dos blocos, algumas mais claras, outras mais escuras. Assim temos um efeito melhor de 3D. Ainda não está 100%, mas pelo menos não é mais tão feio quanto antes!

Este é o resultado atual.

O próximo passo é conseguir fazer as peças que estão já fixas no fundo também ganharem uma textura, para não ficarem com a cor tão uniforme.

Uma atualização no Blockout

No primeiro texto sobre o jogo eu falei que um bom projeto sempre começa com a documentação. O motivo disso é simples: é através da documentação que você percebe diversos detalhes e, muitas vezes, evita armadilhas.

A armadilha do momento é: como fixar as peças no tabuleiro? Pode parecer simples, mas há duas situações. A primeira é quando a peça está acima de qualquer outra. Aí é fácil, pois basta ela ir “descendo” até que não possa mais. Isso estava funcionando perfeitamente.

Até o momento em que tentei fazer uma coisa: ir descendo com uma peça até ser possível encaixá-la no vão deixado entre outras duas. Isso não funciona! Pelo menos não com a lógica que estava usando. E para descobrir a lógica correta? Algumas horas quebrando a cabeça….

Como se pode ver nas figuras acima a interface progrediu um pouco. E comparando com uma imagem anterior dá pra ver que um dos controles sumiu!!

Pois é…..caiu a ficha de que não são necessários dois controles! Apenas um já resolve meu problema. Pressionando qualquer uma das setas a peça se move no sentido dela (cima, baixo, direita, esquerda). Pressionando o círculo no centro a peça “desce” um nível ou, se pressionando por um tempo mais prolongado, ela é fixada.

Para rodar a peça no sentido horário ou anti-horário basta pressionar uma das setas e mover o dedo em direção a outra! Por exemplo, para rodar uma peça no sentido horário, basta pressionar a seta para cima e deslizar o dedo para a seta para a direita. Para o sentido anti-horário, basta ir no sentido oposto: da seta pra cima para a seta para a esquerda.

E para rotacionar a peça no próprio eixo (ou girá-la), basta fazer o mesmo processo, porém usando as setas opostas. Se eu quero girar uma peça “para cima”, basta pressionar a seta para baixo e deslizar o dedo até a seta para cima.

Um controle simples, e funcional. E ainda permite que tanto destros quanto canhotos joguem sem problemas, já que basta apenas mudar o lado dele.

Já há também o placar, e mais dois botões ali embaixo: um para o som (que por enquanto está desativado pois, claro, não há som), e outro para pausar o jogo. Tocar o “tabuleiro” também o pausa.

A tela como um todo ainda está bem pobre. Mas a minha prioridade é deixar o jogo jogável, e sem bugs. Só depois melhorar a aparência.

Progredindo no Blockout

Como comentei aqui, estou fazendo um joguinho pro N900.

Fiz uma melhoria no desenho do tabuleiro para aumentar a sensação de profundidade. Antes cada camada tinha um tamanho fixo, mas agora elas ficam maiores conforme vão ficando mais próximas do jogador. A princípio isso pode parecer algo fácil de fazer, mas não é tão simples pois essa perspectiva também afeta o desenho dos blocos.

No texto anterior tinha comentado que achava que seria complicado fazer as peças se encaixarem no fundo, como devem, obedecendo a perspectiva e também o formato dos blocos. Isso já está feito. E no meio do processo também me lembrei de um detalhe que tinha passado em branco: ao mover a peça (direita/esquerda/cima/baixo) é necessário verificar se, na nova posição, ela não colide com algum bloco já fixo, assim como ao rotacioná-la ela também caberá.

O controle que move os blocos (o da direita na imagem acima) acredito que tenha ficado bom e funcional. Talvez um pouco pequeno….

Já o controle para rotacionar os blocos está um pouco distante do que imaginei! A minha intenção era fazer um controle que se comportasse da seguinte forma:
- ao deslizar o dedo, em linha reta, a peça seria rotacionada nesse sentido
- deslizar o dedo num movimento circular faria a peça rodar num ângulo de 90 graus no sentido horário ou anti-horário (dependendo da direção na qual o dedo se moveu)

No emulador a coisa funcionou direitinho, mas no aparelho……aí também notei que não é necessário fazer o movimento, mas apenas pressionar o controle no local correto. Só que isso traz outro problema: num jogo em que as peças já estejam caindo muito rápido, um toque no local errado provocará a perda do jogo, pois pode não haver tempo de corrigir o movimento. Talvez se conseguir identificar a pressão com a qual a tela foi tocada…..

Além, claro, da própria imagem que está terrível! :)

O desenho dos blocos ainda não está perfeito, principalmente os blocos já fixos ainda estão com problemas.

Mas pelo menos a coisa toda está andando!

Fazendo um jogo

Claro que existem diversas formas de se fazer um programa, e dependendo do objetivo escolhe-se um jeito ou outro. O mais correto é fazer toda a documentação primeiro, para depois colocar a mão na massa.

Mas isso deixa de ser verdadeiro quando:
1- não há um prazo, portanto não há pressa
2- não se conhece muito bem o projeto como um todo
3- é diversão!

Eu sempre gostei de um jogo, variante do Tetris, chamado Blockout. Ele usa um tabuleiro tridimensional, e peças que podem ser rodadas também nas 3 dimensões. O meu primeiro contato com esse jogo foi num 386….acho que muita gente nem sabe o quão antigo isso é!

Hoje em dia existe uma versão livre, gratuita, código-fonte aberto, do jogo. Porém, ele é escrito em C, e essa linguagem pra mim é um incógnita. Tentei achar algo em Python para poder adaptar ao N900 e poder voltar a jogar. Mas não encontrei.

Resultado? Lá fui eu tentar fazer o jogo!! O primeiro problema: aprender a usar a biblioteca gráfica do Python para jogos, a PyGame.

Depois de apanhar por algumas horas com os conceitos, eu consegui fazer o desenho do tabuleiro (já com tamanho variável), desenhar as peças e, quem diria, rotacioná-las em todas direções!

Claro que, como dá pra ver nas imagens, a tela ainda está bem crua. A minha intenção é que os controles sejam feitos na própria tela, óbvio. Teria um controle à direita para mover as peças (direita, esquerda, pra cima e pra baixo), e um outro controle à esquerda, para rotacioná-las. Pelo menos os dois botões do topo, apesar de terem a mesma imagem, funcionam bem: o da esquerda abre o gerenciador de tarefas e o da direita fecha o programa.

O jogo ainda não é “jogável”. Neste momento estou no ponto de tentar fazer as peças “grudarem” no fundo, e de forma a que fiquem ocupando a camada correta. Quem sabe até o final da semana eu não tenha algo mais interessante?

Conforme o desenvolvimento do jogo for progredindo, colocarei novas telas.

A parte mais complicada até agora foi fazer justamente a rotação das peças. O formato da peça é guardado num vetor tridimensional, pois preciso da informação de quantas colunas, quantas linhas, e quantas camadas a peça possui! A camada é justamente o que dá o efeito tridimensional. Eu não poderia fazer algo fixo, pois tenho também a intenção de fazer peças mais elaboradas no futuro (inclusive aleatórias). Então eu não tenho como saber o formato previamente. Precisava tratar com conceitos, como para rotacionar uma peça para a direita eu precisava “transformar” todas as colunas em camadas, e vice-versa.

Mas eu tenho certeza que será tão complicado ou até mais fazer as peças se encaixarem no fundo, da forma como devem!

Brain Party, para as horas de ócio

Este é um joguinho com conceito interessante. A ideia dele é exercitar o seu cérebro, ou ver o quanto ele está bom (ou não). É um jogo originalmente feito para iPhone/iPod, mas recentemente lançado para outras plataformas, e no caso do GNU/Linux, de forma livre (na iStore ele é vendido a U$0.99).

Parece inclusive que há uma versão para o Xbox 360.

No caso do N900, ele está no repositório extras-testing, por enquanto. Mas é provável que logo volte ao extras-devel, pois parece haver alguns problemas com ele (super-aquecimento do aparelho por utilização excessiva da CPU, por exemplo, o que também causa descarregamento prematuro da bateria).

Como dá para ver pelas imagens, ele é jogado com o aparelho no modo retrato. E a última imagem saiu com as bolas distorcidas porque elas estão em movimento pela tela, e obviamente a sua animação não vai parar para que uma imagem seja tirada…

I Have No Tomatoes

Mais um joguinho, com nome estranho (repositórios extras-devel). Na prática ele é um clone do Pacman.


Infelizmente os controles acabam ficando um pouco confusos pela visão da tela ser em perspectiva. E tem que usar o teclado físico (os controles são configuráveis). Nem no menu dá pra usar apenas a tela…

Acredito que ele ficaria mais interessante se os controles fossem na própria tela, já que há espaço suficiente para isso nos cantos. O que também deixaria a coisa melhor, deixando os controles na mesma perspectiva.