Gosu - Thư viện game 2D cho Ruby - Cùng bắt đầu với game đơn giản - Phần 1
Bài đăng này đã không được cập nhật trong 7 năm
Trong loạt bài 4 phần Gosu - Thư viện game 2D cho Ruby trước mình đã giới thiệu qua những khái niệm cơ bản nhất về thư viện Gosu game 2D của Ruby, và tiếp theo, các bạn cùng mình làm thử 1 game đơn giản nhé. Nội dung: Điều khiển phi thuyền ăn sao trong không gian. Những ngôi sao sẽ có animation xoay xoay, màu và vị trí xuất hiện của những ngôi sao đó là random.
Đầu tiên mình sẽ tạo file gosu0.rb. file này sẽ khởi tạo cửa sổ game 640 x 480 và 1 background không gian space.png
require 'gosu'
class GameWindow < Gosu::Window
def initialize
super 640, 480, false
self.caption = "Tutorial Game"
@background_image = Gosu::Image.new("media/space.png", :tileable => true)
end
def update
end
def draw
@background_image.draw(0, 0, 0)
end
end
GameWindow.new.show
Tiếp theo mình sẽ tạo 1 class Player ra 1 file player.rb Player là chiếc phi thuyềnspaceship nhé.
class Player
def initialize
@image = Gosu::Image.new("media/starfighter.bmp")
@x = @y = @vel_x = @vel_y = @angle = 0.0
@score = 0
end
def warp(x, y)
@x, @y = x, y #Vị trí phi thuyền xuất hiện ở cửa sổ GameWindow
end
def turn_left
@angle -= 4.5
end
def turn_right
@angle += 4.5
end
def accelerate
@vel_x += Gosu::offset_x(@angle, 0.5) #Phi thuyền sẽ tiến về hướng x với số pixel = 0.5 * cos(@angle)
@vel_y += Gosu::offset_y(@angle, 0.5) #Phi thuyền sẽ tiến về hướng y với số pixel = 0.5 * cos(@angle)
end
def move
@x += @vel_x
@y += @vel_y
@x %= 640
@y %= 480
@vel_x *= 0.95
@vel_y *= 0.95
end
def draw
@image.draw_rot(@x, @y, 1, @angle)
end
end
Tạo object player mới từ class Player trong gosu0.rb
require 'gosu'
require './player'
class GameWindow < Gosu::Window
def initialize
super 640,480,false
self.caption = "Spaceship"
@background_image = Gosu::Image.new("media/space.png")
@player = Player.new
@player.warp(320, 240)
end
def update
if Gosu::button_down? Gosu::KbLeft or Gosu::button_down? Gosu::GpLeft then @player.turn_left end
if Gosu::button_down? Gosu::KbRight or Gosu::button_down? Gosu::GpRight then @player.turn_right end
if Gosu::button_down? Gosu::KbUp or Gosu::button_down? Gosu::GpButton0 then @player.accelerate end
@player.move
end
def draw
@player.draw
@background_image.draw(0,0,0)
end
def button_down(id)
close if id == Gosu::KbEscape
end
end
window = GameWindow.new
window.show
Và các bạn sẽ có kết quả như hình bên dưới.
Và ở phần tiếp theo mình sẽ thực hiện tạo những ngôi sao trong không gian và để phi thuyền ghi điểm khi chạm vào chúng.
Cảm ơn các bạn đã theo dõi Nguồn: http://memorandums.hatenablog.com/entry/2016/04/21/174834
All rights reserved