rubtris 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/game.rb +141 -0
  3. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1249241ab00bf1ec7d0a107b099df5363fc721d2
4
- data.tar.gz: ef04585863280c256655954a961719a24d395a12
3
+ metadata.gz: 885e292a13093f20c8349defe31d4954e7b32ae4
4
+ data.tar.gz: 7fe117d323a0b46827a13212ec8c9d2790e48063
5
5
  SHA512:
6
- metadata.gz: 15d5fd979d5665eaa68a538d922ddcfeb8c4395b79eec664ae37383504acbfddb06f9e7a2387eacb1a8ad2342826c6c362ebf406ba4c301cfb675c80f84a00e0
7
- data.tar.gz: e7fba568c8e2f21fe8dcb552c568b810e8f0dc41f5952073ce1d4d3c82480604200e192c49ac0b646ffb7e96a10341c7e7610efd33bfcf4336903955e3ab5cdc
6
+ metadata.gz: 83072d6ef5fd113ee6a6438416f68219de30468fc9d454cd1ed6124ee186a1ebea4378657e709ffd711ba10827026bac2c0bdeb40e81cbcf5389eafca1af8606
7
+ data.tar.gz: 0f24d991eb081a27b1a56c232c1adeb3ba35fd9e063ec30ba6a71cb6e325ab62ea5a14c6574a1fb8dae88efee66040796a49b53ae8c29a61b55d540420f307da
@@ -0,0 +1,141 @@
1
+ require_relative 'board'
2
+ require 'timeout'
3
+ require 'io/console'
4
+ require_relative 'menu'
5
+
6
+ class Game
7
+
8
+ REFRESH_RATE = 0.1
9
+ BEGINNING_ADVANCE_RATE = 0.3
10
+ MINIMUM_ADVANCE_RATE = 0.05
11
+ DIF_BTWN_LEVEL = 0.04
12
+
13
+
14
+ def run
15
+ set_up_game
16
+ until over?
17
+ do_turn
18
+ end
19
+ end_game
20
+ run if !force_quit? && play_again
21
+ end
22
+
23
+ def get_mode
24
+ options = [
25
+ {title: "Unlimited", type: :none, value: true},
26
+ {title: "Timed", type: :increment, value: 3, unit: 'min.'},
27
+ {title: "Lines", type: :increment, value: 40}
28
+ ]
29
+ prompt = "Welcome to Rubtris.\nSelect the mode you want to play!"
30
+ menu = Menu.new(options, prompt)
31
+ @game_mode = menu.open
32
+ end
33
+
34
+ def play_again
35
+ options = [
36
+ {title: "Yes", type: :none, value: true},
37
+ {title: "No", type: :none, value: false}
38
+ ]
39
+ prompt = "#{@board.summary_s}\nPlay again?"
40
+ menu = Menu.new(options, prompt)
41
+ menu.open[:value]
42
+ end
43
+
44
+ def set_up_game
45
+ @board = Board.new
46
+ STDIN.echo = false
47
+ @force_quit = false
48
+ @board.add_block
49
+ @board.render
50
+ @start_time, @last_advanced, @level = Time.now, Time.now, 0
51
+ @time_limit, @line_limit = nil, nil
52
+ config = get_mode
53
+ add_win_condition(config[:title], config[:value])
54
+ end
55
+
56
+ def do_turn
57
+ auto_advance if auto_advance_needed?
58
+ system "clear" or system "cls"
59
+ @board.render
60
+ action = get_input
61
+ take_action(action) if action
62
+ end
63
+
64
+ def end_game
65
+ STDIN.echo = true
66
+ end
67
+
68
+ def current_advance_rate
69
+ [BEGINNING_ADVANCE_RATE - (@level * DIF_BTWN_LEVEL), MINIMUM_ADVANCE_RATE].max
70
+ end
71
+
72
+ def auto_advance_needed?
73
+ Time.now - @last_advanced > current_advance_rate
74
+ end
75
+
76
+ def auto_advance
77
+ @last_advanced = Time.now
78
+ @board.move_selected_down
79
+ end
80
+
81
+ def get_input
82
+ action = nil
83
+ begin
84
+ action = Timeout::timeout(REFRESH_RATE) { STDIN.getch }
85
+ rescue
86
+ end
87
+ action
88
+ end
89
+
90
+ def force_quit?
91
+ @force_quit
92
+ end
93
+
94
+ def take_action(action)
95
+ case action.downcase
96
+ when "w"
97
+ @board.move_to_bottom
98
+ when "a"
99
+ @board.move_selected_left
100
+ when "s"
101
+ @board.move_selected_down
102
+ when "d"
103
+ @board.move_selected_right
104
+ when "\r"
105
+ @board.push_selected_down
106
+ when "e"
107
+ @board.rotate_selected_right
108
+ when "q"
109
+ @board.rotate_selected_left
110
+ when "["
111
+ @board.rotate_selected_left
112
+ when "]"
113
+ @board.rotate_selected_right
114
+ when "\e"
115
+ @force_quit = true
116
+ end
117
+ nil
118
+ end
119
+
120
+ def over?
121
+ force_quit? || @board.over? || over_time? || over_lines?
122
+ end
123
+
124
+ def over_time?
125
+ @time_limit && (@last_advanced - @start_time) >= @time_limit
126
+ end
127
+
128
+ def over_lines?
129
+ @line_limit && @board.completed_lines >= @line_limit
130
+ end
131
+
132
+ def add_win_condition(condition, value)
133
+ case condition
134
+ when "Timed"
135
+ @time_limit = value * 60
136
+ when "Lines"
137
+ @line_limit = value
138
+ end
139
+ end
140
+
141
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubtris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Henderson
@@ -36,6 +36,7 @@ files:
36
36
  - bin/rubtris
37
37
  - lib/block.rb
38
38
  - lib/board.rb
39
+ - lib/game.rb
39
40
  - lib/menu.rb
40
41
  - lib/pattern.rb
41
42
  - lib/rubtris.rb