need_for_type 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 639aa5cc56ee82cb00ffec60701a77825a32e443
4
- data.tar.gz: 80df9d75de5fd5dfe59fcb45b4b8d540cc916142
3
+ metadata.gz: 3e9ac057bc5ffec238c4c19a18199453c10ee97e
4
+ data.tar.gz: 57f4b54ab2ac962fab3d459adbf23166a10db4d0
5
5
  SHA512:
6
- metadata.gz: 8096e4b4bd1da4e34b5115f7516d886a807ec9a568035bdf9fcdc27334cc2e3d8372803d03211ddc22dfcc4524924247e3178e1058e986c8acd62746b5f6934c
7
- data.tar.gz: b05f61d604f63a7bb15954c483203126d0e72aa9a521d13f777a9438f103928d96c26ad0a5a0c34faf13b21c544e7f58ccd51437d4d692e876a768a56549b896
6
+ metadata.gz: 400d012e3c798d9900471714fe1bd861994b96b25c1cbeb637ec2a1f66fe6713390dc6149de063d74811c59c4fa7261c97aa8d9579badba56cf199783d4c9537
7
+ data.tar.gz: e3b390ee4248032e478a91f00513fbd0fbb6d21c48ce20e129eb1b2d8577efa0305113dc1caac2e00055ef6d0ddabfe3ee342465c056d09fb309abb604e4b0bf
data/README.md CHANGED
@@ -28,7 +28,7 @@ You can run `./bin/console` for an interactive prompt that will allow you to exp
28
28
 
29
29
  To install the development version of the gem onto your local machine, run `bundle exec rake install`.
30
30
 
31
- To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
31
+ To release a new version, update the version number in `version.rb` and update the `CHANGELOG.md` accordingly, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
32
 
33
33
 
34
34
  ## Contributing
@@ -0,0 +1,23 @@
1
+ require 'json'
2
+ require 'httparty'
3
+
4
+ module NeedForType::API
5
+ @@api_url = 'need-for-type.herokuapp.com'
6
+
7
+ def get_scores(text_id)
8
+ url = "https://#{@@api_url}/v1/scores?text_id=#{text_id}"
9
+ response = HTTParty.get(url)
10
+ JSON.parse(response.body)
11
+ end
12
+
13
+ def post_score(username, text_id, stats)
14
+ url = "https://#{@@api_url}/v1/scores"
15
+ headers = { 'Content-Type' => 'application/json' }
16
+ body = { score: { username: username,
17
+ text_id: text_id,
18
+ wpm: stats[:wpm],
19
+ time: stats[:total_time],
20
+ accuracy: stats[:accuracy] } }
21
+ HTTParty.post(url, headers: headers, body: body.to_json)
22
+ end
23
+ end
@@ -51,26 +51,52 @@ module NeedForType
51
51
  end
52
52
  end
53
53
 
54
- def render_end(stats, selected_option)
54
+ def render_end(stats, scores, selected_option)
55
55
  self.render_box do
56
56
  self.render_with_color(GREEN) do
57
57
  self.set_render_pos(3, 4)
58
58
  self.addstr("Congratulations you crossed the finish line!")
59
59
 
60
- render_stats(stats, 5, 4, :vertical)
60
+ self.set_render_pos(5, 4)
61
+ self.addstr("Your score:")
61
62
  end
63
+ render_stats(stats, 6, 4, :vertical)
62
64
 
63
- self.set_render_pos(9, 4)
65
+ self.set_render_pos(10, 4)
66
+ self.render_text("Top scores:", GREEN, NORMAL)
67
+ render_scores(scores, 11, 4)
68
+
69
+ self.set_render_pos(17, 4)
64
70
  mode = standout_mode(0, selected_option)
65
- self.render_text("1. Restart", WHITE, mode)
71
+ self.render_text("1. Submit Score", WHITE, mode)
66
72
 
67
- self.set_render_pos(10, 4)
73
+ self.set_render_pos(18, 4)
68
74
  mode = standout_mode(1, selected_option)
69
- self.render_text("2. Main Menu", WHITE, mode)
75
+ self.render_text("2. Restart", WHITE, mode)
70
76
 
71
- self.set_render_pos(11, 4)
77
+ self.set_render_pos(19, 4)
72
78
  mode = standout_mode(2, selected_option)
73
- self.render_text("3. Exit", WHITE, mode)
79
+ self.render_text("3. Main Menu", WHITE, mode)
80
+
81
+ self.set_render_pos(20, 4)
82
+ mode = standout_mode(3, selected_option)
83
+ self.render_text("4. Exit", WHITE, mode)
84
+ end
85
+ end
86
+
87
+ def render_submit_score(username)
88
+ self.render_box do
89
+ self.set_render_pos(3, 4)
90
+ self.render_text("Submit your score !", GREEN, NORMAL)
91
+
92
+ self.set_render_pos(5, 4)
93
+ self.addstr("Type your username...")
94
+
95
+ self.set_render_pos(6, 4)
96
+ self.addstr(username)
97
+
98
+ self.set_render_pos(8, 4)
99
+ self.addstr("Click ENTER to submit")
74
100
  end
75
101
  end
76
102
 
@@ -87,8 +113,8 @@ module NeedForType
87
113
 
88
114
  def render_stats(stats, y, x, mode)
89
115
  stats_text = [
90
- "Time: #{stats[:total_time].round(2)} sec",
91
116
  "WPM: #{stats[:wpm].round}",
117
+ "Time: #{stats[:total_time].round(2)} sec",
92
118
  "Accuracy: #{stats[:accuracy].round(2)} %"
93
119
  ]
94
120
 
@@ -104,5 +130,18 @@ module NeedForType
104
130
  end
105
131
  end
106
132
  end
133
+
134
+ def render_scores(scores, y, x)
135
+ if scores.empty?
136
+ self.set_render_pos(y + 1, x)
137
+ self.addstr("There are no score yet for this text.")
138
+ else
139
+ scores.each do |s|
140
+ self.set_render_pos(y, x)
141
+ self.addstr("#{s['wpm']} wpm #{s['username']}")
142
+ y += 1
143
+ end
144
+ end
145
+ end
107
146
  end
108
147
  end
@@ -1,17 +1,15 @@
1
1
  module NeedForType
2
2
  class FileManager
3
- attr_accessor :content
3
+ attr_accessor :text, :text_id
4
4
 
5
5
  def initialize()
6
6
  @path = "#{NeedForType::GEM_ROOT}/assets/texts/"
7
7
  end
8
8
 
9
- # Reads random file from difficulty folder
10
- def get_random_text
9
+ def read_random_text
11
10
  directory_count = Dir[File.join(@path, '**', '*')].count
12
- random_file = rand(1..directory_count)
13
-
14
- @content = File.read("#{@path}/text-#{random_file}.txt").strip
11
+ @text_id = rand(1..directory_count)
12
+ @text = File.read("#{@path}/text-#{@text_id}.txt").strip
15
13
  end
16
14
  end
17
15
  end
@@ -1,25 +1,30 @@
1
- require 'curses'
2
-
3
1
  require 'need_for_type/states'
2
+ require 'need_for_type/api'
4
3
 
5
4
  module NeedForType::States
6
5
  class End < Menu
6
+ include NeedForType::API
7
7
 
8
- def initialize(display_window, stats, difficulty)
8
+ def initialize(display_window, stats, difficulty, text_id)
9
9
  super(display_window)
10
- @difficulty = difficulty
11
10
  @stats = stats
11
+ @difficulty = difficulty
12
+ @text_id = text_id
13
+
12
14
  @option = 0
15
+ @scores = get_scores(@text_id)
13
16
  end
14
17
 
15
18
  def update
16
- @display_window.render_end(@stats, @option)
19
+ @display_window.render_end(@stats, @scores, @option)
17
20
 
18
- input_worker(3) do
21
+ input_worker(4) do
19
22
  case @option
20
23
  when 0
21
- return NeedForType::States::Game.new(@display_window, @difficulty)
24
+ return NeedForType::States::SubmitScore.new(@display_window, self, @text_id, @stats)
22
25
  when 1
26
+ return NeedForType::States::Game.new(@display_window, @difficulty)
27
+ when 2
23
28
  return NeedForType::States::Start.new(@display_window)
24
29
  end
25
30
  end
@@ -44,7 +44,10 @@ module NeedForType::States
44
44
 
45
45
  def handle_start_game
46
46
  file_manager = NeedForType::FileManager.new
47
- @text = file_manager.get_random_text
47
+ file_manager.read_random_text
48
+ @text = file_manager.text
49
+ @text_id = file_manager.text_id
50
+
48
51
  @display_window.render_game_text(@text, @chars_completed, @stats)
49
52
  @start_time = Time.now
50
53
 
@@ -106,7 +109,7 @@ module NeedForType::States
106
109
  def handle_end_game
107
110
  calculate_stats
108
111
 
109
- return NeedForType::States::End.new(@display_window, @stats, @difficulty)
112
+ return NeedForType::States::End.new(@display_window, @stats, @difficulty, @text_id)
110
113
  end
111
114
 
112
115
  def calculate_stats
@@ -0,0 +1,36 @@
1
+ require 'curses'
2
+
3
+ require 'need_for_type/states'
4
+ require 'need_for_type/api'
5
+
6
+ module NeedForType::States
7
+ class SubmitScore < State
8
+ include NeedForType::API
9
+
10
+ def initialize(display_window, end_state, text_id, stats)
11
+ super(display_window)
12
+ @end_state = end_state
13
+ @text_id = text_id
14
+ @stats = stats
15
+
16
+ @username = ''
17
+ end
18
+
19
+ def update
20
+ @display_window.render_submit_score(@username)
21
+
22
+ input = @display_window.get_input
23
+
24
+ if input == Curses::Key::ENTER || input == 10
25
+ post_score(@username, @text_id, @stats)
26
+ return @end_state
27
+ elsif input == Curses::Key::BACKSPACE || input == 127
28
+ @username = @username.chop
29
+ elsif input.is_a? String
30
+ @username += input
31
+ end
32
+
33
+ return self
34
+ end
35
+ end
36
+ end
@@ -3,6 +3,7 @@ require 'need_for_type/states/menu'
3
3
  require 'need_for_type/states/game'
4
4
  require 'need_for_type/states/start'
5
5
  require 'need_for_type/states/end'
6
+ require 'need_for_type/states/submit_score'
6
7
 
7
8
  module NeedForType
8
9
  module States
@@ -1,3 +1,3 @@
1
1
  module NeedForType
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: need_for_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tiagonbotelho
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-09-29 00:00:00.000000000 Z
12
+ date: 2016-10-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -53,6 +53,34 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: json
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: httparty
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
56
84
  description: need-for-type is a terminal type racer inpired by Nitro Type
57
85
  email:
58
86
  - tiagonbotelho@gmail.com
@@ -773,6 +801,7 @@ files:
773
801
  - assets/texts/text-99.txt
774
802
  - bin/need_for_type
775
803
  - lib/need_for_type.rb
804
+ - lib/need_for_type/api.rb
776
805
  - lib/need_for_type/display_window.rb
777
806
  - lib/need_for_type/file_manager.rb
778
807
  - lib/need_for_type/states.rb
@@ -781,6 +810,7 @@ files:
781
810
  - lib/need_for_type/states/menu.rb
782
811
  - lib/need_for_type/states/start.rb
783
812
  - lib/need_for_type/states/state.rb
813
+ - lib/need_for_type/states/submit_score.rb
784
814
  - lib/need_for_type/typer.rb
785
815
  - lib/need_for_type/version.rb
786
816
  - lib/need_for_type/window.rb