Crie um jogo simples com Ruby!

Criado por Patrick Huesler, @phuesler & Floor Drees, @floordrees para o Rails Girls The Hague
Traduzido por Daniel Barreto, @danielfsbarreto

gosu é uma biblioteca de desenvolvimento de jogos 2D. Gosu provê interfaces amigáveis e fáceis de usar para jogos com gráficos 2D e texto (acelerado por hardware 3D), amostras de áudio e música, bem como suporte a entrada de comandos através de teclado, mouse e gamepad/joystick. Também inclui demos para integração com RMagick, Chipmunk e OpenGL.

Seus códigos-fonte, wiki, rastreadores de defeitos, etc. estão todos disponíveis no GitHub. O melhor ponto de entrada para a documentação do Gosu é a página principal da wiki. Instale:

gem install gosu

ou adicione gem "gosu", "~> 0.7.48" ao seu Gemfile e execute bundle. Brinque com os jogos de exemplo:

cd $GEM_HOME/gems/gosu-0.7.48/examples

e então: ruby CptnRuby.rb

ou: ruby RMagickIntegration.rb

ou: ruby Tutorial.rb

Já tive o suficiente desses exemplos!

Copie o repositório através de uma nova aba do seu terminal. Se você esteve trabalhando no aplicativo do Rails Girls nesse meio tempo, tenha certeza que você está no seu diretório home rodando cd.

Agora execute

git clone https://github.com/FloorD/gosu_tutorial_RG_TH.git

e vá para o diretório apropriado através do comando

cd gosu_tutorial_RG_TH/jumpingem

Rode!

Para jogar nosso joguinho, abra-o usando o terminal:

ruby game.rb

Então, como ele funciona?

Que tal inspecionarmos um pouco de código? Abra game.rb no seu editor de texto. Consegue ver o trecho

!/usr/bin/env ruby -w
require 'rubygems'
require 'gosu'
include Gosu

… logo no começo do arquivo? Aqui nós garantimos que ‘chamamos’ as gems necessárias, daí então podemos mover para nossa class (ou múltiplas classes). Mais adiante temos nossa

class Game < Window
end

… rolando. Os def’s que você vê dentro da classe Game são métodos. Neles nós definimos quais instruções o programa deve seguir. Apenas dê uma olhada no seguinte trecho de código:

def draw
draw_quad 0, 400, Color::WHITE, 640, 400, Color::WHITE, 640, 500, Color::WHITE, 0, 500, Color::WHITE
if @dir == :left then
offs_x = -25
factor = 1.0
else
offs_x = 25
factor = -1.0
end
@cur_image.draw(@x + offs_x, @y - 49, 0, factor, 1.0)
end

Quer brincar um pouco? Copie o conteúdo de game.rb em um novo arquivo .rb. Salve-o e nomeie-o como preferir. Agora tente mudar algumas coisas no jogo e rode-o no seu terminal para ver as mudanças na prática.

Acha que tem mais habilidades gráficas que Patrick (você provavelmente tem)? Então você pode tentar criar um novo sprites.png! Não esqueça de chamá-lo aqui:

def initialize
super(640, 480, false)
self.caption = "Jump 'n Run"
@standing, @walk1, @walk2, @jump = *Image.load_tiles(self, "sprites.png", 100, 160, false)
@x, @y = 400, 0
@vy = 0
@dir = :left
@cur_image = @standing
end

Está vendo o código Game.new.show? Ele cria uma nova instância do jogo. Ela não tem memória, então quando você ficar preso em um jogo, apenas comece um novo. Divirta-se!

Créditos

Os assets utilizados em vim adventures podem ser encontrados aqui

Os sons utilizados você vai encontrar em Matthew Klingensmith (www.matthewklingensmith.com)