Gosu - Thư viện game 2D cho Ruby - Cùng bắt đầu với game đơn giản - Phần 1
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 ...
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