rubtris 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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