play_hangman 0.0.2

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 (4) hide show
  1. checksums.yaml +15 -0
  2. data/bin/play_hangman +3 -0
  3. data/lib/play_hangman.rb +112 -0
  4. metadata +80 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjQ5NTg2YWQxYTJhZTlhZGMwODRlMDdkZDA0YjRlY2Y5ODQ1MTlhNQ==
5
+ data.tar.gz: !binary |-
6
+ NWNmODdkNjA5ZmEzZmJhMGM4MTcyODhlNTY0NGM0NzM3ZDA4OGU3Zg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NTJkN2ZjMmRiMDUyNjlkZDJkNDBkZTM0NDYzY2U4NDljNjhhOTkwYTMzZmQ5
10
+ MmM5MzUyNmMwOWVmMjc2NmJjYmU2MGJjNzJhM2Y3YTVkYTIzZDVmOTZlMGZj
11
+ YTdkMjEyZTgxZmQ4NWYwZjY0YzA1NDVlMGFmMDYwZjUyZjAzMDE=
12
+ data.tar.gz: !binary |-
13
+ NWRjZWQzNmQ0MzY4ZWUyZjQzYTc3M2M2ODcxNjlmZWUyYjU5MjljYWJhOTk2
14
+ NGU5Nzc2N2M5NWVhZTZjNTE4ZmRjZjRmMzYwM2FmZTIzZDJhNmY4M2E3MDIz
15
+ YjAwMjZjZTUyYTg0MTM5NmJjYjNjNWU4NjVjZGM2NmQwYmI5ZmU=
data/bin/play_hangman ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "play_hangman"
@@ -0,0 +1,112 @@
1
+ # Encoding: utf-8
2
+ # ----------------------------- PLAY HANGMAN -------------------------------
3
+ #
4
+ # Ready to play console version of HANGMAN built using 'hangman_engine' gem
5
+ #
6
+ # --------------------------------------------------------------------------
7
+ require 'rbconfig'
8
+ require 'win32console' if (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
9
+ require 'hangman_engine'
10
+ require 'console_view_helper'
11
+ include ConsoleViewHelper
12
+
13
+ # --- Helper Methods
14
+ def display_notice(notice)
15
+ putsi(colorize(notice[:msg], notice[:status]) + nl(2)) if notice[:msg]
16
+ end
17
+
18
+ def display_game_banner(base_width, base_idt)
19
+ puts nl(2) + banner('HANGMAN GAME', subtitle: 'by Alfonso Mancilla', width: base_width, indent: base_idt) + nl(2)
20
+ end
21
+
22
+ def display_game_board(hangman_game, base_width, base_idt, notice = {})
23
+ cls
24
+ display_game_banner(base_width, base_idt)
25
+ display_notice(notice)
26
+ putsi "Clue: '#{hangman_game.clue}'" + nl(3) if hangman_game.clue.length > 0
27
+ putsi "Remaining attemps: #{hangman_game.remaining_attempts}" + nl(3)
28
+ puts HangmanEngine::Drawer.draw_puppet(hangman_game).split("\n").map { |part| align(part, base_width + 15, :center) }.join("\n") + nl(3)
29
+ game_board = HangmanEngine::Drawer.draw_board(hangman_game)
30
+ putsi align(game_board, base_width, :center) + nl(3)
31
+ end
32
+
33
+ def display_won(base_width)
34
+ putsi align('* * * * * * * *', base_width, :center)
35
+ putsi align('* * * * * * *', base_width, :center)
36
+ putsi align('* ** * * * * * *', base_width, :center)
37
+ putsi align(' * * * * * * * * *' , base_width, :center)
38
+ putsi align(' ** ** * * * * * **', base_width, :center)
39
+ end
40
+
41
+ def display_lost(base_width)
42
+ putsi align('* * * * * * * * * * * * * *', base_width, :center)
43
+ putsi align('* * * * * * * * ', base_width, :center)
44
+ putsi align('* * * * * * * * * * * * * * * ', base_width, :center)
45
+ putsi align('* * * * * * * * ', base_width, :center)
46
+ putsi align('* * * * * * * * * * * *', base_width, :center)
47
+ puts nl
48
+ putsi align('* * * * * * * * * * * * * *' , base_width, :center)
49
+ putsi align('* * * * * * *' , base_width, :center)
50
+ putsi align('* * * * * * * * * * *' , base_width, :center)
51
+ putsi align('* * * * * * * ' , base_width, :center)
52
+ putsi align('* * * * ** * * * * * *', base_width, :center)
53
+ end
54
+
55
+ # --- Main
56
+ base_idt, base_width, keep_playing = 1, 50, 'y'
57
+
58
+ while keep_playing == 'y'
59
+ notice = {}
60
+ begin
61
+ # Read data
62
+ data_error = false
63
+ begin
64
+ cls
65
+ display_game_banner(base_width, base_idt)
66
+ display_notice(notice)
67
+ word = hidden_input('Word to guess (will be hidden):', base_idt)
68
+ puts nl(2)
69
+ allowed_attempts = input("Allowed attempts (>= #{word.length}):", base_idt)
70
+ puts nl
71
+ clue = input("Clue:", base_idt)
72
+ hangman_game = HangmanEngine::Game.new(word, allowed_attempts, clue)
73
+ rescue HangmanEngine::GameError => e
74
+ notice = { msg: e.message, status: :error }
75
+ data_error = true
76
+ end
77
+ end while data_error
78
+
79
+ # Gameplay
80
+ notice = {}
81
+ until hangman_game.finished?
82
+ begin
83
+ display_game_board(hangman_game, base_width, base_idt, notice)
84
+ ltr = input('Your guess:', 1)
85
+ raise HangmanEngine::GameError, "Type a letter!" unless ltr.length > 0
86
+ hangman_game.guess(ltr.length > 1 ? ltr[0] : ltr)
87
+ notice = if hangman_game.guessed?(ltr)
88
+ { msg: "'#{ltr}' guessed!", status: :success }
89
+ else
90
+ { msg: "Ouuuch! burned :/", status: :error }
91
+ end
92
+ rescue HangmanEngine::GameError => e
93
+ notice = { msg: e.message, status: :error }
94
+ end
95
+ end
96
+
97
+ # Result
98
+ display_game_board(hangman_game, base_width, base_idt)
99
+ putsi underscore * base_width + nl(3)
100
+ if hangman_game.solved?
101
+ display_won(base_width)
102
+ puts nl
103
+ else
104
+ display_lost(base_width)
105
+ puts nl(3)
106
+ putsi align("Sol.: #{hangman_game.word}", base_width, :center) + nl(2)
107
+ end
108
+ putsi underscore * base_width + nl(3)
109
+
110
+ # Play again?
111
+ keep_playing = input('New game? (y/n):', 1)[0].downcase
112
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: play_hangman
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Alfonso Mancilla
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: console_view_helper
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: hangman_engine
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.1
41
+ description: ! 'Play HANGMAN on your console! Install, run the command ''play_hangman''
42
+ and enjoy.
43
+
44
+ This game was built using the ''hangman_engine'' gem. Check it out to build your
45
+ own HANGMAN version.'
46
+ email:
47
+ - almancill@gmail.com
48
+ executables:
49
+ - play_hangman
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - bin/play_hangman
54
+ - lib/play_hangman.rb
55
+ homepage: https://github.com/ammancilla/play_hangman
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.4.5
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Play HANGMAN on your console! Install, run the command 'play_hangman' and
79
+ enjoy.
80
+ test_files: []