module Rubytris

Constants

VERSION

Public Instance Methods

display_clear() click to toggle source
# File lib/rubytris.rb, line 8
def display_clear()
      print "\x1b[2J\x1b[0;0H"
end
fall_to_block(current, field) click to toggle source
# File lib/rubytris.rb, line 12
def fall_to_block(current, field)
      result = current
      loop do
            next_pos = result.fall.move_position
            if field.are_block?(next_pos)
                  return result
            else
                  result = result.fall
            end
      end
end
tetris() click to toggle source
# File lib/rubytris.rb, line 24
def tetris()
      display_clear()

      field = Field.new()
      field.write()

      current = Current.new(5, 0)

      cmd = 'n'
      thread = Thread::start do
            while (cmd = STDIN.getch)
                  if cmd ==  "\C-c"
                        break
                  end
            end
      end
      loop do
            sleep(0.2)
            self.display_clear()
            puts "left: f, right: j, fall: b, rotate: space, q: exit \e[25D"
            puts "\e[25D#{field.point}\e[25D"
            case cmd
            when 'q' then
                  exit()
            when 'f' then
                  tmp = current.left
            when 'j' then
                  tmp = current.right
            when 'b' then
                  tmp = self.fall_to_block(current, field)
            when ' ' then
                  tmp = current.rotation
            else
                  tmp = current.fall
            end
            next_pos = tmp.move_position

            if !field.are_block?(next_pos)
                  field.pre_fix(next_pos)
                  current = tmp
            elsif cmd != 'n'
                  current = current
            else
                  field.fix(current.move_position)
                  current = Current.new(5, 0)
                  next_pos = current.move_position
                  if field.are_block?(next_pos)
                        puts "game over"
                        break
                  end
            end
            field.write
            field.clear
            field.line_clear
            cmd = 'n'
            if field.game_finish?()
                  puts "success!!!!!!"
                  break
            end
      end
      Thread.kill(thread)
end