Blog

Galaxy Wars

Galaxy Wars

Assista ao vídeo do Galaxy Wars, um game feito no ambiente colaborativo de criação de jogos:

http://www.youtube.com/watch?v=HbgGqhj2QhE

Com este game, vê-se que jogos interessantes já podem ser criados utilizando a ferramenta em nuvem desenvolvida neste trabalho de conclusão.

De modo geral, embora a plataforma de jogos ainda tenha amplo espaço para melhorias, considero o resultado atual bom o suficiente para o tcc. Os mecanismos de colaboração em tempo real, a linguagem de programação de fácil uso e os recursos específicos para o desenvolvimento dos games já estão todos funcionando. Em outras palavras: pode usar!


No site do projeto, você já pode jogar o Galaxy Wars. Também disponibilizei um jogo da velha com Inteligência Artificial. Por ora, um computador rápido é necessário. Isto será otimizado posteriormente.

Controles: Z - tiro; X - bomba; setas - movimentação

ATENÇÃO: por enquanto, recomendo fortemente o uso do navegador Chrome 14 ou superior.
  • Chrome 14: roda os jogos com boa velocidade. Áudio funcional;
  • Opera 11: o áudio funciona bem, porém a velocidade dos jogos é menor;
  • Firefox 6: áudio com problemas e velocidade ruim;
  • Internet Explorer 9: boa velocidade, porém sem áudio.

É possível melhorar significativamente a performance do sistema nos navegadores Opera e Firefox. Entretanto, tal otimização é bastante trabalhosa e, desta forma, prefiro deixá-la como trabalho futuro.

Se forem testar o Galaxy Wars, por favor, digam qual browser e versão usaram e qual a taxa média de fps que observaram.

Espero que gostem!


Pic1

Pic2

Pic3

Enviado em .

Funciona!!!

Funciona!!!

Versão funcional do ambiente colaborativo de criação de jogos:

http://gamewizard.cc/home

Isto é um ambiente de programação em nuvem. Espero que a interface esteja bem intuitiva.

Pessoas já podem começar a testar o sistema, embora ainda não possam usufruir de todos os recursos que serão oferecidos (logo poderão). Apesar de o trabalho ainda estar inacabado, todas as suas fundações já estão funcionando.

Para entrar no sistema, clique em "Sign in anonymously". Aparecerá uma lista de salas, sendo que cada uma corresponde a um jogo sendo feito por uma ou mais pessoas. As salas podem ter senha, caso o autor não queira que outros alterem o que está sendo produzido. Pode-se também optar por restringir que outros leiam o que está sendo criado.

Uma vez que você entre em (ou crie) uma sala, será mostrado um campo de código compartilhado e, ao lado, uma documentação rápida da plataforma: exemplos de uso, lista dos comandos, etc. Futuramente haverá mecanismos para se incluir imagens, músicas e bonequinhos animados no jogo (são os game assets), mas você já pode começar a criar uns programas mais simples hoje.

O bom disso tudo é que os novos programas de computador não estão mais vinculados a sistemas operacionais, ferramentas complicadas ou dependências malucas. Basta acessar um dispositivo com um navegador recente de Internet, e todos os seus programas estarão lá: atualizados e funcionando.

Interessou? mande um feedback.

sério, manda mesmo. Qualquer feedback é de grande ajuda. :-)

Um joguinho para você testar (é só copiar e colar):

' bolinha
gameMode

' inicializacoes
x = 320
y = 240
r = 20
vx = 10
vy = 10

' loop principal
do
   cls

   if x-r <= 0 then vx = abs(vx)
   if x+r >= screenWidth() then vx = -abs(vx)
   if y-r < 0 then vy = abs(vy)
   if y+r >= screenHeight() then vy = -abs(vy)

   x += vx
   y += vy

   textout 10, 10, 24, "Ball Movement"
   circlefill x, y, r

   flip
loop

Enviado em .

Demo #8

O ambiente de programação sendo criado neste trabalho não serve só para jogos. O link abaixo mostra uma animação de um algoritmo:

http://gamewizard.cc/demo/8

Trata-se de uma animação de um algoritmo simples para determinar, entre n pontos no plano, o par mais próximo.

Levei cerca de 5 minutos para escrever esse demo. Para se fazer uma animação similar em alguma ferramenta mais tradicional (como Java), talvez o usuário tivesse que usar uma fatia preciosa de seu tempo em burocracias: escrever um monte de código só para abrir uma janela, perder um dia inteiro só para pesquisar alguma biblioteca gráfica, quebrar a cabeça com dependências de bibliotecas... E para quê? Às vezes só queremos nosso problema pontual rapidamente!

É certo que uma tecnologia como Java é mais poderosa do que a desenvolvida aqui. Porém, para quem tem pouco tempo e precisa escrever uma animação simples ou um protótipo de jogo, o software aqui desenvolvido é uma alternativa. E nem é preciso instalar nada: o ambiente de programação está na Internet!

Falta ainda 1/3 do TCC. Colocarei agora uma faceta social nesse ambiente de programação.

Enviado em .

Demo #7

Agora o tcc já está tomando forma:

http://gamewizard.cc/demo/7

Trata-se de um joguinho feito em cerca de uma noite numa linguagem de programação com sintaxe inspirada no basic que inventei. Inspirei-me na linguagem basic pois, além de ser fácil aprendê-la, acredito que seja uma excelente escolha para a criação de protótipos rápidos de jogos.

Ainda faltam uns ajustes no compilador e na máquina virtual, mas, em linhas gerais, em questão de minutos já é possível montar um jogo nesse sistema. E é justamente esse tipo de game simples que idealizo para esta plataforma... Talvez com uma tela maior, com umas figuras mais bonitas e com uns sons bacanas. Porém, o conceito já está fixado.

Que tal testar um Hello World?

print "Olá!!!"
nome = input("Qual seu nome?")
print nome

Enviado em .

Demo #6

Meu compilador ainda é meio burro, mas já compila alguma coisinha :)

http://gamewizard.cc/demo/6

Meio burro porque o código assembly por ele gerado não tem qualquer otimização. Olhei uma bibliografia sobre compiladores e vi que otimização de código parece ser algo um pouquinho complexo. Talvez eu tenha que deixar isso para depois, pois levaria certo tempo até eu aprender (e implementar) a tal otimização... e o tempo até o fim do tcc é curto, sendo que ainda há muito por fazer.

Hoje o compilador só traduz algumas expressões simples envolvendo constantes e variáveis. Nos próximos dias, colocarei recursos como: If, While, funções, etc. Logo logo já será possível fazer uns jogos nessa linguagem.

Enviado em .

Monografia

Já passou da hora de começar a monografia... Boa oportunidade para finalmente aprender latex.

Enviado em .

Demo #5

Agora a VM já toca sons:

http://gamewizard.cc/demo/5

Funciona ok no Google Chrome 11 e no Firefox 4.0.1. No Internet Explorer 9 não há som porque ele suporta .mp3, mas não .ogg, formato que utilizei neste demo (mais sobre isso a seguir).

Para criar o subsistema de audio, usei o recurso <audio> do HTML5. Eu já desconfiava que criar tal subsistema seria um tanto problemático... Mas a verdade é que foi um pesadelo. Os seguintes artigos recentes descrevem tal situação (abrem em nova janela):

“Probably, Maybe, No”: The State of HTML5 Audio

Phobolabs: The State of HTML5 Audio

Ou seja, o objeto Audio ainda não é excelente, apresentando uma série de problemas. Para completar, veja o quadro de compatibilidade, datado de algum tempo, mas extremamente ilustrativo, retirado do site w3schools.com:

A situação está dessa forma por causa de, penso eu, motivos políticos. É o preço que se paga por utilizar uma tecnologia muito recente. Entretanto, tenho certeza que isso melhorará com o tempo, não sendo portanto um impedimento para o projeto.

Como alternativa ao HTML5 Audio, poderiam ter sido usadas tags mais antigas, tais como: <embed>, <object>, ou com algum outro hack muito complicado. No entanto, nenhuma dessas opções daria o nível de controle sobre os sons necessário para um sistema de criação de jogos.

Outra opção seria usar uma biblioteca de JavaScript chamada SoundManager 2. Ela usa um fallback em Flash para tocar mp3/mp4, ou, se disponível, um sistema beta que usa HTML5. Descobri isso pois estudei tal tecnologia e cheguei a usá-la no tcc, porém...

1. O sistema BETA do SoundManager2 que usa o HTML5 é mais bugado que a tag <audio> em si;

2. O fallback em Flash funciona bem, mas não suporta ogg/wav e apresenta um delay considerável entre o momento em que você dá o comando e a apresentação do som [edit: sem falar que idealmente seria legal não usar quaisquer plugins...];

3. Eu não sou advogado, e espero que a disciplina de Direito e Software, se for oferecida no próximo semestre, ajude nesta minha dúvida. Se você souber a resposta, por favor, mande um comentário! Apesar de a biblioteca ser distribuída sobre uma licença livre (BSD), como ela inclui um programa em flash que é capaz de tocar mp3, eu teria que pagar royalties ao detentor da patente? De acordo com a wikipedia,

"Para produzir, vender e/ou distribuir produtos que se utilizem do padrão MPEG-1/2 Audio Layer 3 e, portanto, de suas respectivas patentes, é necessário obter uma licença."

Minha pergunta ainda vai mais longe: de acordo com o quadro acima, o <audio> do IE9 só toca .mp3. Se eu criar um site que toca uma .mp3, tenho que pagar royalties?

Enfim, usei um tempão para fazer experimentos com essa biblioteca, mas devido aos motivos citados acima, simplesmente joguei todo o trabalho fora. No fim das contas tive que escrever minha própria lib responsável pelo gerenciamento de audio, usando diretamente o HTML5 Audio, o que foi bastante complicado. E eu nem falei da pré-carga dos arquivos de som: outra dor de cabeça.

Conclusão: esta tarefa levou muito mais tempo que o alocado, o que atrapalhou um pouco o cronograma deste semestre.

Enviado em .

Demo #4

Agora a VM já mostra imagens:

http://gamewizard.cc/demo/4

A próxima etapa será adicionar suporte a som. Com isso, a não ser por eventuais ajustes, toda a parte básica da máquina virtual (1/3 do TCC, tirando a monografia) fica pronta.

Foi divertido elaborar o sistema de pré-carga de mídia (a tela de carregamento). O carregamento dos arquivos, hospedados no servidor, é concluído pelo cliente de maneira assíncrona, o que é diferente da abordagem de programação que eu fazia em outros projetos meus. Ainda bem que cursei Programação Funcional. ;)

Ainda preciso escrever a proposta da monografia...

Enviado em .

Demo #3

Um joguinho (controle com o teclado):

http://gamewizard.cc/demo/3

Enviado em .

Demo #2

Segundo demo do tcc:

http://gamewizard.cc/demo/2 (abre em nova janela)

Já temos uma interface de vídeo. Por enquanto, é possível desenhar primitivas simples (retângulos, circulos e linhas) e escrever textos na tela. Neste demo a tela é pequena, mas o sistema final terá um canvas maior. O suporte a imagens virá mais tarde.

O demo consiste de duas bolinhas rebatendo pela tela. Fiquei bem animado pelo fato de o programa ter rodado com velocidade aceitável em navegadores modernos como: Chrome, FF4 e IE9. Se você fizer várias centenas ou milhares de chamadas ao sistema de vídeo num único laço do jogo, é esperado que a velocidade caia um pouco - afinal estamos falando de uma "máquina virtual" escrita em JavaScript. Mesmo assim, para o que este projeto se propõe - criação colaborativa, via web, de protótipos rápidos de games -, o desenvolvimento está indo numa direção satisfatória.

Para 27/04/2011, espero implementar, no mínimo:

  • Funções de relógio
  • Suporte a teclado

Além do programa da bolinha, você pode rodar um outro. O código a seguir desenha um gradiente interessante na tela. Basta excluir o código que está no site e copiar e colar o seguinte:

mov c, 0 ; counter
repeat:

; set color
mov a, c
div a, 20 ; a = c/20. Hence, 0.0 <= a < 0.5
push 0.5  ; blue
push 0.3  ; green
push a    ; red
push 10   ; set color
int 7     ; call video

; rectfill
mov b, c
mul b, 34 ; b = c * 34
push 34   ; height
push 520  ; width
push b    ; ypos
push 0    ; xpos
push 12   ; rectfill
int 7     ; call video

; do it again
add c, 1
fcmp c, 10
jl repeat

Obs: se você colar o fragmento acima entre as linhas "loop:" e "; carrega posicao da bolinha" no código que está no site, verá o game da bolinha com um fundo mais interessante.

Enviado em .

Demo #1

Aí está o primeiro demo do tcc:

http://gamewizard.cc/demo/1

Neste momento, o sistema já tem a capacidade de executar códigos em "assembly". Quando você clica em "Compilar", seu código é enviado para o servidor, que por sua vez executa um "assembler" para finalmente devolver um "binário" para o cliente. A engine de runtime, no cliente, recebe o programa compilado e executa o "código de máquina".

É claro que o usuário final do sistema não precisará programar nesse assembly. No entanto, é preciso começar o desenvolvimento do projeto por algum lugar! Nas próximas duas semanas implementarei, no mínimo, uma interface de vídeo que seja capaz de mostrar pelo menos algumas primitivas simples.

Coloquei como exemplo um algoritmo exponencial para calcular a sequência de Fibonacci. Isto é útil para testar a recursão e a performance da runtime engine. Você também pode colocar outros códigos. A seguir, um programa que conta até 10 (é só copiar e colar):

start:
    add a, 1 ; a e' um registrador
    call print_stuff
    fcmp a, 10
    jl start
    halt
	
print_stuff:
    push a ; valor a ser impresso
    push 0 ; instrucao 0 da impressora
    int 5  ; interrupcao 5 = chame a impressora
    ret

Enviado em .

Hospedagem

Essa tal 'plataforma web colaborativa para a criação de protótipos rápidos de games' já vem sendo idealizada desde o ano passado, 2010. A primeira linha de código do projeto foi escrita neste ano, mas apesar disso, não tenho como mostrar qualquer resultado sem antes publicar o que já tenho num servidor web.

As pessoas criarão seus jogos direto pelo navegador - e em grupo. Os games desenvolvidos também rodarão pelo navegador. O TCC é dividido em 3 frentes: interface web (dará vida ao sistema colaborativo), compilador (rodará no servidor) e runtime engine (HTML5; uma "máquina virtual" que efetivamente rodará, no cliente, os jogos).

Já encontrei uma hospedagem simples (que ao menos servirá de apoio enquanto desenvolvo o sistema) e agora estou correndo atrás do domínio.

Enviado em .

print "hello, world!"

Acredito nos protótipos como abordagem para atender o mercado de jogos casuais e independentes.

Este TCC, sob a orientação do Prof. Flávio Correa, será uma plataforma web colaborativa para a criação de protótipos rápidos de games.