
Untitled
By: a guest on
Feb 23rd, 2012 | syntax:
Ruby | size: 2.13 KB | hits: 29 | expires: Never
require 'gosu'
class Map
def initialize(width, height)
@width = width
@height = height
@origin_x = width / 2
@origin_y = height / 2
end
def transform_x(x, y, z)
cart_x = (x - z) * Math.cos(0.46365)
cart_x + @origin_x
end
def transform_y(x, y, z)
cart_y = y + (x + z) * Math.sin(0.46365)
-cart_y + @origin_y
end
end
class GameWindow < Gosu::Window
def initialize
super(640, 480, false)
self.caption = "Iso"
@map = Map.new(640, 480)
end
def draw
draw_box(0, 0, 0, 100, 100, 100, Gosu::Color::BLUE)
draw_box(0, 0, 200, 40, 80, 40, Gosu::Color::RED)
draw_axes
end
def draw_axes
draw_line_to(0, 0, 0, 200, 0, 0, Gosu::Color::GREEN)
draw_line_to(0, 0, 0, 0, 200, 0, Gosu::Color::RED)
draw_line_to(0, 0, 0, 0, 0, 200, Gosu::Color::YELLOW)
end
def draw_line_to(x1, y1, z1, x2, y2, z2, color)
draw_line(@map.transform_x(x1, y1, z1),
@map.transform_y(x1, y1, z1),
color,
@map.transform_x(x2, y2, z2),
@map.transform_y(x2, y2, z2),
color)
end
def draw_box(x, y, z, width, height, depth, color)
draw_line_to(x, y, z, x+width, y, z, color)
draw_line_to(x, y, z, x, y+depth, z, color)
draw_line_to(x, y, z, x, y, z+height, color)
draw_line_to(x, y+depth, z, x+width, y+depth, z, color)
draw_line_to(x+width, y, z, x+width, y+depth, z, color)
draw_line_to(x, y+depth, z, x, y+depth, z+height, color)
draw_line_to(x, y, z+height, x, y+depth, z+height, color)
draw_line_to(x, y, z+height, x+width, y, z+height, color)
draw_line_to(x, y+depth, z+height, x+width, y+depth, z+height, color)
draw_line_to(x+width, y, z+height, x+width, y+depth, z+height, color)
draw_line_to(x+width, y+depth, z+height, x+width, y+depth, z, color)
draw_line_to(x+width, y, z+height, x+width, y, z, color)
end
end
window = GameWindow.new
window.show