Skip to content

Instantly share code, notes, and snippets.

@epitron
Created April 28, 2011 03:12
Show Gist options
  • Save epitron/945729 to your computer and use it in GitHub Desktop.
Save epitron/945729 to your computer and use it in GitHub Desktop.
require 'curses'
def init_screen
Curses.noecho # do not show typed keys
Curses.init_screen
Curses.start_color
Curses.stdscr.keypad(true) # enable arrow keys
Curses.curs_set(0)
Curses.ESCDELAY = 0
$color = Curses.has_colors?
begin
yield
ensure
Curses.close_screen
end
end
def write(line, column, text)
Curses.setpos(line, column)
#Curses.attron(color) if $color
Curses.addstr(text);
#Curses.attroff(color) if $color
end
class Player < Struct.new(:x, :y, :icon)
def move(dx, dy)
erase
self.x = (self.x + dx) % Curses.cols
self.y = (self.y + dy) % Curses.lines
draw
end
def erase
write(y, x, " " * icon.size)
end
def draw
write(y, x, icon)
end
end
init_screen do
p = Player.new(10, 10, ":D")
p.draw
loop do
ch = Curses.getch
case ch
when Curses::Key::UP then p.move( 0, -1)
when Curses::Key::DOWN then p.move( 0, 1)
when Curses::Key::LEFT then p.move(-1, 0)
when Curses::Key::RIGHT then p.move( 1, 0)
when 410 then
write(0,0,"Resized to: #{Curses.cols}x#{Curses.lines}")
Curses.clrtoeol
when 27, ?q then break
else write(0,0,"Unknown char: #{ch}")
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment