Module: Rubytris

Extended by:
Rubytris
Included in:
Rubytris
Defined in:
lib/rubytris.rb,
lib/rubytris/field.rb,
lib/rubytris/current.rb,
lib/rubytris/version.rb

Defined Under Namespace

Modules: FieldStatus Classes: Current, Field

Constant Summary collapse

VERSION =
"1.0.2"

Instance Method Summary collapse

Instance Method Details

#display_clearObject



8
9
10
# File 'lib/rubytris.rb', line 8

def display_clear()
      print "\x1b[2J\x1b[0;0H"
end

#fall_to_block(current, field) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# 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

#tetrisObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 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