99_game 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9c5d20b0cbe719d8cf5fd9cae95971c6dca3387e
4
+ data.tar.gz: 49e8a864cfdd018697f99c31088caff00c64428e
5
+ SHA512:
6
+ metadata.gz: 8cc6dc0ca981f7aca288293d6ede7ebe3b22ff6e3e504d579b8a248cff51e4c02bfce91b2c2afc27b2aaff9b05ab95ca363793ac67c67b7dda0fad9deb07f313
7
+ data.tar.gz: 0aa825f60a99830defe20fd030c2fc672287afb9381f5ee333091863cac7c9fcebde401bfa498a68ad32eb12f1611c9745df262442e959523a7172cbcd20da32
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
4
+ --format doc
data/bin/99_game ADDED
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env ruby
2
+ require '99'
3
+ BEGIN { # Rules of the game
4
+ puts "\n\t\t\t\tThe Game Of 99\n\t\t\t\t--------------\n\n"
5
+ sleep(1)
6
+ print "\tWould you like to see the rules? (y/n) => "
7
+ begin
8
+ if gets.chomp.include?("y")
9
+ puts
10
+ puts "\tGoal: Your goal is to get your opponent to bring the value over 99 by\nplaying 1 of your 3 cards."
11
+ sleep(3); puts
12
+ puts "\tCards: A card will usually increase the value by itself, but there are a few exceptions."
13
+ sleep(3); puts
14
+ puts "\t\tValues"
15
+ puts "\t\t------"
16
+ sleep(1)
17
+ puts "\n\t\u00B7 Aces are worth 1"
18
+ sleep(3)
19
+ puts "\t\u00B7 1 - 10 are worth themselves, with the exception of 4 and 9"
20
+ sleep(3)
21
+ puts "\t\u00B7 4, 9, and Jacks are worth 0"
22
+ sleep(3)
23
+ puts "\t\u00B7 Queens decrease the value by 10"
24
+ sleep(3)
25
+ puts "\t\u00B7 Kings set the value to 99"
26
+ sleep(3)
27
+ puts "\t\u00B7 Jokers set the value to 0"
28
+ sleep(3); puts
29
+ print "Press Enter to begin"; gets.chomp
30
+ else; sleep(2)
31
+ end
32
+ rescue Exception; puts "Continuing"
33
+ end
34
+ puts
35
+ puts
36
+ }
37
+ END { # Thanks for playing
38
+ sleep(2)
39
+ puts "\n\tThanks for playing 99!"
40
+ sleep(3)
41
+ }
42
+ def pause(p)
43
+ sleep(p)
44
+ puts
45
+ end
46
+ $value, value1, value2, value3, dealer, user = 0,0,0,0, Hand.new, Hand.new
47
+ loop do
48
+ $deck.shuffle!
49
+ puts
50
+ puts "\tIt is the dealer's turn!"
51
+ def test(card, value) # argument 'card' needs to be an instance of Card
52
+ if card.num == "King"; value = 99
53
+ elsif card.num == "Joker"; value = -1
54
+ else; value = $value + card.value
55
+ end
56
+ value = -100 if value > 99
57
+ end
58
+ i = 1
59
+ for card in dealer.hand
60
+ case i
61
+ when 1 then test(card, value1)
62
+ when 2 then test(card, value2)
63
+ when 3 then test(card, value3)
64
+ end
65
+ i += 1
66
+ end
67
+ if value1 >= value2 and value1 >= value3
68
+ $card = dealer.hand[0].num
69
+ dealer.play(dealer.hand[0])
70
+ elsif value2 >= value3
71
+ $card = dealer.hand[1].num
72
+ dealer.play(dealer.hand[1])
73
+ else
74
+ $card = dealer.hand[2].num
75
+ dealer.play(dealer.hand[2])
76
+ end
77
+ pause(2)
78
+ puts "\tThe dealer played a(n) #{$card}"
79
+ pause(0.5)
80
+ puts "\tThe value is now #{$value}"
81
+ puts
82
+ pause(2)
83
+ if $value > 99 # Runs when you win and exits loop
84
+ puts "\tYou win!"
85
+ break
86
+ end
87
+ puts "\tIt's your turn!"
88
+ pause(1.5)
89
+ user.view
90
+ pause(0.5)
91
+ print "\tPick a card to play by typing in the name of the card => "
92
+ user.play(UserCard.new(gets.chomp))
93
+ pause(1.5)
94
+ puts "\tYou drew a(n) #{user.hand[2].num}"
95
+ pause(0.5)
96
+ puts "\tThe value is now #{$value}"
97
+ pause(2)
98
+ if $value > 99 # Runs when dealer wins and exits loop
99
+ puts "\tYou lose"
100
+ break
101
+ end
102
+ end
103
+ __END__
104
+ Programmed by: Zachary Perlmutter
data/lib/99_game.rb ADDED
@@ -0,0 +1,82 @@
1
+ class CardError < Exception; end
2
+ class Card # Represents a card in the deck
3
+ attr_reader :num
4
+ @@value = {"Ace" => 1, 4 => 0, 9 => 0, "Jack" => 0, "Joker" => 0, "King" => 99, "Queen" => -10}
5
+ def value
6
+ @@value.default = @num.to_i
7
+ return @@value[@num]
8
+ end
9
+ def _value
10
+ return case @num
11
+ when "Ace" then 1
12
+ when 2..3 then @num
13
+ when 4 then 0
14
+ when 5..8 then @num
15
+ when 9 then 0
16
+ when 10 then 10
17
+ when "Jack" then 0
18
+ when "Queen" then -10
19
+ when "King" then 99
20
+ when "Joker" then 0
21
+ end
22
+ end
23
+ def initialize(card); @num = card; end
24
+ end
25
+ class UserCard < Card # This class converts user input into a Card-like object
26
+ attr_reader :num
27
+ @@num = {King: "King", K: "King", Ace: "Ace", A: "Ace", Queen: "Queen", Q: "Queen", Jack: "Jack", J: "Jack", Joker: "Joker", "$".to_sym => "Joker"}
28
+ def _num; @@num; end
29
+ def initialize(number=""); @@num.default, @num = number.to_i, @@num[number.capitalize.to_sym]; end
30
+ end
31
+ class Hand # Creates a object that holds and can play cards
32
+ attr_reader :hand
33
+ def initialize; @hand = [$deck.shift, $deck.shift, $deck.shift]; end
34
+ def play(card)
35
+ legal = false
36
+ for cards in @hand; legal = true if cards.num == card.num; end
37
+ raise CardError, "\aCard not allowed\a" unless legal
38
+ if card.num == "King"; $value = 99
39
+ elsif card.num == "Joker"; $value = 0
40
+ else; $value += card.value
41
+ end
42
+ i, done = 0, false
43
+ for index in @hand
44
+ if index.num == card.num and not done
45
+ discard = @hand[i]
46
+ @hand.delete_at(i)
47
+ draw = $deck.shift
48
+ @hand.push(draw)
49
+ $deck.push(discard)
50
+ done = true
51
+ end
52
+ i += 1
53
+ end
54
+ end
55
+ def view
56
+ print "\tThese are your cards: "
57
+ @hand.each {|card| print "\t#{card.num}"}
58
+ end
59
+ end
60
+ def pause(p)
61
+ sleep(p)
62
+ puts
63
+ end
64
+ $deck = Array.new
65
+ 4.times do # Add the cards to the deck
66
+ $deck.push(Card.new("Ace"))
67
+ $deck.push(Card.new("King"))
68
+ $deck.push(Card.new("Queen"))
69
+ $deck.push(Card.new("Jack"))
70
+ $deck.push(Card.new(10))
71
+ $deck.push(Card.new(9))
72
+ $deck.push(Card.new(8))
73
+ $deck.push(Card.new(7))
74
+ $deck.push(Card.new(6))
75
+ $deck.push(Card.new(5))
76
+ $deck.push(Card.new(4))
77
+ $deck.push(Card.new(3))
78
+ $deck.push(Card.new(2))
79
+ end
80
+ 2.times {$deck.push(Card.new("Joker"))}
81
+ $deck.shuffle!
82
+ __END__
data/spec/99spec.rb ADDED
@@ -0,0 +1,47 @@
1
+ require_relative "spec_helper"
2
+ require "99"
3
+ describe "$deck" do
4
+ describe "#length" do
5
+ it "should == 54" do; expect($deck.length + 6).to eq 54; end
6
+ end
7
+ end
8
+ describe "Card" do
9
+ cards = ["Ace", "King", "Queen", "Jack", "Joker"] + (2..10).to_a
10
+ describe "#value" do
11
+ for card in cards
12
+ describe "#{card}" do
13
+ it "should == #{Card.new(card)._value}" do;
14
+ expect(Card.new(card).value).to eq Card.new(card)._value
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ describe "UserCard" do
21
+ describe "#num" do
22
+ for key in UserCard.new._num.keys
23
+ describe "#{key}" do
24
+ it "should == #{UserCard.new._num[key]}" do;
25
+ expect(UserCard.new(key.to_s).num).to eq UserCard.new._num[key]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ describe "Hand" do
32
+ hand = Hand.new
33
+ describe "#hand" do
34
+ describe "#length" do
35
+ it "should == 3" do; expect(hand.hand.length).to eq 3; end
36
+ end
37
+ end
38
+ describe "#initialize" do
39
+ describe "$deck" do
40
+ it "should have three less cards after initialization" do
41
+ deck1, hand, deck2 = $deck.length, Hand.new, $deck.length
42
+ expect(deck1).to > deck2
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -0,0 +1,76 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
+ # file to always be loaded, without a need to explicitly require it in any files.
5
+ #
6
+ # Given that it is always loaded, you are encouraged to keep this file as
7
+ # light-weight as possible. Requiring heavyweight dependencies from this file
8
+ # will add to the boot time of your test suite on EVERY test run, even for an
9
+ # individual file that may not need all of that loaded. Instead, make a
10
+ # separate helper file that requires this one and then use it only in the specs
11
+ # that actually need it.
12
+ #
13
+ # The `.rspec` file also contains a few flags that are not defaults but that
14
+ # users commonly want.
15
+
16
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
+ RSpec.configure do |config|
18
+ # The settings below are suggested to provide a good initial experience
19
+ # with RSpec, but feel free to customize to your heart's content.
20
+ # These two settings work together to allow you to limit a spec run
21
+ # to individual examples or groups you care about by tagging them with
22
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
23
+ # get run.
24
+ config.filter_run :focus
25
+ config.run_all_when_everything_filtered = true
26
+
27
+ # Many RSpec users commonly either run the entire suite or an individual
28
+ # file, and it's useful to allow more verbose output when running an
29
+ # individual spec file.
30
+ if config.files_to_run.one?
31
+ # Use the documentation formatter for detailed output,
32
+ # unless a formatter has already been configured
33
+ # (e.g. via a command-line flag).
34
+ config.default_formatter = 'doc'
35
+ end
36
+
37
+ # Print the 10 slowest examples and example groups at the
38
+ # end of the spec run, to help surface which specs are running
39
+ # particularly slow.
40
+ config.profile_examples = 10
41
+
42
+ # Run specs in random order to surface order dependencies. If you find an
43
+ # order dependency and want to debug it, you can fix the order by providing
44
+ # the seed, which is printed after each run.
45
+ # --seed 1234
46
+ config.order = :random
47
+
48
+ # Seed global randomization in this process using the `--seed` CLI option.
49
+ # Setting this allows you to use `--seed` to deterministically reproduce
50
+ # test failures related to randomization by passing the same `--seed` value
51
+ # as the one that triggered the failure.
52
+ Kernel.srand config.seed
53
+
54
+ # rspec-expectations config goes here. You can use an alternate
55
+ # assertion/expectation library such as wrong or the stdlib/minitest
56
+ # assertions if you prefer.
57
+ config.expect_with :rspec do |expectations|
58
+ # Enable only the newer, non-monkey-patching expect syntax.
59
+ # For more details, see:
60
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
61
+ expectations.syntax = :expect
62
+ end
63
+
64
+ # rspec-mocks config goes here. You can use an alternate test double
65
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
66
+ config.mock_with :rspec do |mocks|
67
+ # Enable only the newer, non-monkey-patching expect syntax.
68
+ # For more details, see:
69
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
70
+ mocks.syntax = :expect
71
+
72
+ # Prevents you from mocking or stubbing a method that does not exist on
73
+ # a real object. This is generally recommended.
74
+ mocks.verify_partial_doubles = true
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: 99_game
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Zachary Perlmutter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ This is a text-based interpretation of the card game 99.
15
+ email: zrp200@gmail.com
16
+ executables:
17
+ - 99_game
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".rspec"
22
+ - bin/99_game
23
+ - lib/99_game.rb
24
+ - spec/99spec.rb
25
+ - spec/spec_helper.rb
26
+ homepage: https://rubygems.org/gems/99_game
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 2.0.0
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.3.0
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: The game of 99.
50
+ test_files:
51
+ - spec/99spec.rb
52
+ - ".rspec"
53
+ - spec/spec_helper.rb