From 89b5bf4cc80b64275d31cc944ecb7c9e9fc2a00b Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 8 Oct 2024 19:41:09 -0500 Subject: [PATCH 01/39] Initial commit --- lib/card.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/card.rb diff --git a/lib/card.rb b/lib/card.rb new file mode 100644 index 000000000..6c4e27f59 --- /dev/null +++ b/lib/card.rb @@ -0,0 +1,7 @@ +class Card + attr_reader :suit, :value, :rank + def initialize(card) + @card = card + + end +end \ No newline at end of file From 487cf573d9a081aaacf3f94a86a095bad9beb2f3 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 8 Oct 2024 19:41:24 -0500 Subject: [PATCH 02/39] Initial commit --- spec/card_spec.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index 85079129e..daf7a4e36 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -2,17 +2,19 @@ require './lib/card' RSpec.describe Card do - it "exists" do - card = Card.new(:diamond, 'Queen', 12) + describe '#initialize' do + it "exists" do + card = Card.new(:diamond, 'Queen', 12) - expect(card).to be_an_instance_of(Card) - end + expect(card).to be_an_instance_of(Card) + end - it "has readable attributes" do - card = Card.new(:diamond, 'Queen', 12) + it "has readable attributes" do + card = Card.new(:diamond, 'Queen', 12) - expect(card.suit).to eq(:diamond) - expect(card.value).to eq('Queen') - expect(card.rank).to eq(12) + expect(card.suit).to eq(:diamond) + expect(card.value).to eq('Queen') + expect(card.rank).to eq(12) + end end end From e495068649147bec2c15c68928532c7a09c04650 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 14:06:29 -0500 Subject: [PATCH 03/39] adding attr_reader --- lib/card.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/card.rb b/lib/card.rb index 6c4e27f59..9f661f60c 100644 --- a/lib/card.rb +++ b/lib/card.rb @@ -1,7 +1,11 @@ class Card - attr_reader :suit, :value, :rank - def initialize(card) - @card = card - + attr_reader :suit, + :value, + :rank + + def initialize(suit, value, rank) + @suit = suit + @value = value + @rank = rank end -end \ No newline at end of file +end From 126d014537f6af59220cb5111fe9906ff39703d5 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 14:06:47 -0500 Subject: [PATCH 04/39] adding pry --- spec/card_spec.rb | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index daf7a4e36..f9a015a7e 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -1,20 +1,20 @@ require 'rspec' require './lib/card' +require 'pry' RSpec.describe Card do - describe '#initialize' do - it "exists" do - card = Card.new(:diamond, 'Queen', 12) - - expect(card).to be_an_instance_of(Card) - end - - it "has readable attributes" do - card = Card.new(:diamond, 'Queen', 12) + it "exists" do + card = Card.new(:diamond, 'Queen', 12) + + expect(card).to be_an_instance_of(Card) + end + + it "has readable attributes" do + card = Card.new(:diamond, 'Queen', 12) - expect(card.suit).to eq(:diamond) - expect(card.value).to eq('Queen') - expect(card.rank).to eq(12) - end + expect(card.suit).to eq(:diamond) + expect(card.value).to eq('Queen') + expect(card.rank).to eq(12) + binding.pry end end From 8b27ddf8cc4c23d52c44bca60d8f4898e53a1f09 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 16:10:42 -0500 Subject: [PATCH 05/39] added comment for future reference --- spec/card_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index f9a015a7e..d00ebeadf 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -1,7 +1,7 @@ require 'rspec' require './lib/card' -require 'pry' - +require 'pry' +# was missing (require 'pry';binding.pry) RSpec.describe Card do it "exists" do card = Card.new(:diamond, 'Queen', 12) From ffcb881d6f96eb48af7006945b870b0103a2287c Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 16:59:33 -0500 Subject: [PATCH 06/39] create and initialize deck class --- lib/deck.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lib/deck.rb diff --git a/lib/deck.rb b/lib/deck.rb new file mode 100644 index 000000000..2b4d2d8f5 --- /dev/null +++ b/lib/deck.rb @@ -0,0 +1,8 @@ +class Deck + attr_reader :cards + + def initialize(cards) + @cards = [card1, card2, card3] + + end +end \ No newline at end of file From 1d5de3d4ba026b9b4a2e2dd320e7daf243c1b76d Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 17:00:20 -0500 Subject: [PATCH 07/39] created and initialized deck_spec.rb --- spec/deck_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/deck_spec.rb diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb new file mode 100644 index 000000000..46fd06016 --- /dev/null +++ b/spec/deck_spec.rb @@ -0,0 +1,13 @@ +require 'rspec' +require './lib/card' +require './lib/deck' +require 'pry' + +RSpec.describe Deck do + it "exists" do + deck = Deck.new(cards) + + expect(deck).to be_an_instance_of(Deck) + binding.pry + end +end \ No newline at end of file From e2a4f57601bc0569db44c292b14709069e9ff42d Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 21:09:10 -0500 Subject: [PATCH 08/39] added rank of card method --- lib/deck.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index 2b4d2d8f5..08f468f56 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,8 +1,13 @@ class Deck - attr_reader :cards + attr_accessor :cards + :index def initialize(cards) - @cards = [card1, card2, card3] - + @cards = cards + + end + + def rank_of_card_at(cards) + @cards = index.rank end end \ No newline at end of file From dc8a58ab86e29450b0c1226db867236c709e7ee7 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Wed, 9 Oct 2024 21:09:45 -0500 Subject: [PATCH 09/39] added can find rank --- spec/deck_spec.rb | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 46fd06016..7eded12c5 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -4,10 +4,28 @@ require 'pry' RSpec.describe Deck do - it "exists" do - deck = Deck.new(cards) + #describe "#initialize" do + it "exists" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] - expect(deck).to be_an_instance_of(Deck) - binding.pry - end + deck = Deck.new(cards) + + expect(deck.cards).to eq([card1, card2, card3]) + end + + it "can find rank" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + + expect(deck.rank_of_card_at(0)).to eq(12) + expect(deck.rank_of_card_at(2)).to eq(14) + end + #end end \ No newline at end of file From ec17b1dd8e54f96b155c0dd9343a9a016d324bbb Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Thu, 10 Oct 2024 13:01:28 -0500 Subject: [PATCH 10/39] created structure to file --- lib/deck.rb | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index 08f468f56..b7ac64ec1 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,13 +1,29 @@ class Deck attr_accessor :cards - :index + :rank def initialize(cards) @cards = cards end - def rank_of_card_at(cards) - @cards = index.rank + def rank_of_card_at(index) + @cards[index].rank end + + def high_ranking_cards + @cards >= 11 + end + + def percent_high_ranking + + end + + def remove_card + + end + + def add_card + + end end \ No newline at end of file From e541a2e19f2e1e7ab381f6cd28b7bafabe319eab Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Thu, 10 Oct 2024 13:01:44 -0500 Subject: [PATCH 11/39] created structure to spec file --- spec/deck_spec.rb | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 7eded12c5..ae474a47a 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -16,7 +16,7 @@ expect(deck.cards).to eq([card1, card2, card3]) end - it "can find rank" do + it "can find rank at a index" do card1 = Card.new(:diamond, 'Queen', 12) card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) @@ -27,5 +27,44 @@ expect(deck.rank_of_card_at(0)).to eq(12) expect(deck.rank_of_card_at(2)).to eq(14) end + + it "high ranking cards" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + + + end + + it "percentage high ranking" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + end + + it "removes card" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + end + + it "adds card" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + end + #end end \ No newline at end of file From 55166668d83cad1ef3c26f328b28b128b541e0d4 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 08:39:00 -0500 Subject: [PATCH 12/39] finished iteration 1 --- lib/deck.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index b7ac64ec1..e09484ce7 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,10 +1,10 @@ class Deck attr_accessor :cards :rank + :value def initialize(cards) @cards = cards - end def rank_of_card_at(index) @@ -12,18 +12,20 @@ def rank_of_card_at(index) end def high_ranking_cards - @cards >= 11 + @cards.select { |card| card.rank >= 11} #change? check docs end def percent_high_ranking - + high_ranking_cards = @cards.select { |card| card.rank >= 11} + expected_percentage = (high_ranking_cards.count.to_f/ @cards.count.to_f) * 100 + expected_percentage.round(2) end - +#equation? def remove_card - + @cards.shift end - def add_card - + def add_card(card) + @cards << card end end \ No newline at end of file From 51d99d4d0984890020123ecfdcbce368d759e058 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 08:39:06 -0500 Subject: [PATCH 13/39] finished iteration 1 --- spec/deck_spec.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index ae474a47a..fc0a43e67 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -36,7 +36,7 @@ deck = Deck.new(cards) - + expect(deck.high_ranking_cards).to eq([card1, card3]) end it "percentage high ranking" do @@ -44,8 +44,9 @@ card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] - + expected_percentage = (2.to_f / 3.to_f * 100).round(2) deck = Deck.new(cards) + expect(deck.percent_high_ranking).to eq(expected_percentage) end it "removes card" do @@ -55,6 +56,8 @@ cards = [card1, card2, card3] deck = Deck.new(cards) + expect(deck.remove_card).to eq(card1) + expect(deck.cards).to eq([card2, card3]) end it "adds card" do @@ -62,8 +65,13 @@ card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] + card4 = Card.new(:club, '5', 5) deck = Deck.new(cards) + + deck.add_card(card4) + expect(deck.cards).to eq([card1, card2, card3, card4]) + binding.pry end #end From f23566ee9ff098c8be692482b1b4edc819b07b88 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 21:01:48 -0500 Subject: [PATCH 14/39] finsihed and comments wrote --- lib/deck.rb | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index e09484ce7..326f83396 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,28 +1,29 @@ class Deck - attr_accessor :cards - :rank - :value + attr_accessor :cards # allows both reading and modifying to be done to the array of cards from outside the class + :rank #attribute + :value #attribute - def initialize(cards) - @cards = cards + def initialize(cards) # takes an array of cards in the form of an argumantand assigns it to the @cards instance variable + @cards = cards end - def rank_of_card_at(index) - @cards[index].rank + def rank_of_card_at(index)# accesses the card at the given index in @cards and returns the rank of that card + @cards[index].rank #accessing a array of cards and retrieving the rank by using a index end - def high_ranking_cards - @cards.select { |card| card.rank >= 11} #change? check docs - end + def high_ranking_cards #returns an array with only high ranking cards + @cards.select { |card| card.rank >= 11} #filters through @cards array returnig a new array containing only cards whos rank is 11 or greater + end + + def percent_high_ranking #this method calculates and returns the percentage of high-ranking cards in the deck, rounded to two decimal places. - def percent_high_ranking high_ranking_cards = @cards.select { |card| card.rank >= 11} - expected_percentage = (high_ranking_cards.count.to_f/ @cards.count.to_f) * 100 + expected_percentage = (high_ranking_cards.count.to_f/ @cards.count.to_f) * 100 # calculates expected_percentage.round(2) end -#equation? + def remove_card - @cards.shift + @cards.shift #.shift takes the first element out of the array and returns it end def add_card(card) From d678130d657b44c132543608afc0ea97b7d065f7 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 21:02:11 -0500 Subject: [PATCH 15/39] finished and comments wrote --- spec/deck_spec.rb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index fc0a43e67..611e27833 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -4,16 +4,16 @@ require 'pry' RSpec.describe Deck do - #describe "#initialize" do + #describe "#initialize" do it "exists" do - card1 = Card.new(:diamond, 'Queen', 12) - card2 = Card.new(:spade, '3', 3) - card3 = Card.new(:heart, 'Ace', 14) - cards = [card1, card2, card3] + card1 = Card.new(:diamond, 'Queen', 12)# setup creates an instance of the Card + card2 = Card.new(:spade, '3', 3)#setup creates an instance of the Card + card3 = Card.new(:heart, 'Ace', 14)#setup creates an instance of the Card + cards = [card1, card2, card3] #setup creates an instance of the array - deck = Deck.new(cards) + deck = Deck.new(cards) # execution this creates a new instance of the Deck class, initializing it with the array of cards cards. - expect(deck.cards).to eq([card1, card2, card3]) + expect(deck.cards).to eq([card1, card2, card3]) #assertion: checking that the decks cards match the expected cards end it "can find rank at a index" do @@ -24,8 +24,8 @@ deck = Deck.new(cards) - expect(deck.rank_of_card_at(0)).to eq(12) - expect(deck.rank_of_card_at(2)).to eq(14) + expect(deck.rank_of_card_at(0)).to eq(12)#assertion: checking if card at index 0 has a rank of 12 + expect(deck.rank_of_card_at(2)).to eq(14)#assertion: checking if card at index 2 has a rank of 14 end it "high ranking cards" do @@ -36,7 +36,7 @@ deck = Deck.new(cards) - expect(deck.high_ranking_cards).to eq([card1, card3]) + expect(deck.high_ranking_cards).to eq([card1, card3])# assertion: checking if deck.high_ranking_cards returns only the high-ranking cards [card1, card3]. end it "percentage high ranking" do @@ -44,9 +44,9 @@ card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] - expected_percentage = (2.to_f / 3.to_f * 100).round(2) + expected_percentage = (2.to_f / 3.to_f * 100).round(2) #calculating the expected percentage and rounding it to two decimals places. (to_f: changes it to a float) deck = Deck.new(cards) - expect(deck.percent_high_ranking).to eq(expected_percentage) + expect(deck.percent_high_ranking).to eq(expected_percentage)#assertion checking that deck.percent_high_ranking matches the expected percentage end it "removes card" do @@ -56,8 +56,8 @@ cards = [card1, card2, card3] deck = Deck.new(cards) - expect(deck.remove_card).to eq(card1) - expect(deck.cards).to eq([card2, card3]) + expect(deck.remove_card).to eq(card1)#execute and asserts that the card removed is card1 + expect(deck.cards).to eq([card2, card3])#asserts that the cards left are card2 and card3 end it "adds card" do @@ -65,12 +65,12 @@ card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] - card4 = Card.new(:club, '5', 5) + card4 = Card.new(:club, '5', 5)#the card that is added deck = Deck.new(cards) - deck.add_card(card4) - expect(deck.cards).to eq([card1, card2, card3, card4]) + deck.add_card(card4)#execution adds card4 to the deck + expect(deck.cards).to eq([card1, card2, card3, card4])#assertion checks to see if the card was added binding.pry end From 29df0b152af863bdbd6271c0607221fb3eac9984 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 21:02:58 -0500 Subject: [PATCH 16/39] initialized player class --- lib/player.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 lib/player.rb diff --git a/lib/player.rb b/lib/player.rb new file mode 100644 index 000000000..b6021e62a --- /dev/null +++ b/lib/player.rb @@ -0,0 +1,6 @@ +class Player + + def initialize + + end +end \ No newline at end of file From ef71270689139104baf1e0d70b07ff596e9623f5 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Fri, 11 Oct 2024 21:03:44 -0500 Subject: [PATCH 17/39] initial commit --- spec/player_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/player_spec.rb diff --git a/spec/player_spec.rb b/spec/player_spec.rb new file mode 100644 index 000000000..38e5231cc --- /dev/null +++ b/spec/player_spec.rb @@ -0,0 +1,13 @@ +require './lib/card' +require './lib/deck' +require './lib/player' +require 'rspec' + +RSpec.describe Player do + it "exists" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + + end +end \ No newline at end of file From d6890007e7aeb2dc10ed116e3ff7b895040892f6 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 12:26:09 -0500 Subject: [PATCH 18/39] note added for add card method --- lib/deck.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/deck.rb b/lib/deck.rb index 326f83396..3f353aa7c 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -27,6 +27,6 @@ def remove_card end def add_card(card) - @cards << card + @cards << card #adds card to array of cards end end \ No newline at end of file From 6004e7849f75a67335ce1a57997dedbb19e86cc2 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 12:26:36 -0500 Subject: [PATCH 19/39] player class finished --- lib/player.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/player.rb b/lib/player.rb index b6021e62a..4493638b4 100644 --- a/lib/player.rb +++ b/lib/player.rb @@ -1,6 +1,14 @@ class Player + attr_accessor :name, + :deck + + + def initialize(name, deck) + @name = name + @deck = deck + end - def initialize - + def has_lost?# ? means boolean + @deck.cards.empty? end end \ No newline at end of file From 13fab405897b0893ab2399b12851e3dcfe850758 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 12:27:05 -0500 Subject: [PATCH 20/39] player test file finished and passed iteration test --- spec/player_spec.rb | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/spec/player_spec.rb b/spec/player_spec.rb index 38e5231cc..5f6f53b11 100644 --- a/spec/player_spec.rb +++ b/spec/player_spec.rb @@ -2,12 +2,34 @@ require './lib/deck' require './lib/player' require 'rspec' - +require 'pry' +# player is initialized witha deck, and can determine if they have lost a game. RSpec.describe Player do it "exists" do card1 = Card.new(:diamond, 'Queen', 12) card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) - + deck = Deck.new([card1, card2, card3]) + + player = Player.new('Clarisa', deck) + + + expect(player.name).to eq('Clarisa') + expect(player.deck).to eq(deck) end + + it "can determine if they have lost" do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + deck = Deck.new([card1, card2, card3]) + + player = Player.new('Clarisa', deck) + player.deck.remove_card + player.deck.remove_card + player.deck.remove_card + expect(player.deck.cards).to eq([]) + expect(player.has_lost?).to eq(true) + end + #binding.pry end \ No newline at end of file From 2a03086e751824aa5ff9e84ce91d1fd665c3386e Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 13:32:07 -0500 Subject: [PATCH 21/39] comments added --- lib/player.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/player.rb b/lib/player.rb index 4493638b4..d8b85a298 100644 --- a/lib/player.rb +++ b/lib/player.rb @@ -1,14 +1,14 @@ class Player - attr_accessor :name, + attr_accessor :name, #allows reading and modifying to be available to the attributes listed :deck - def initialize(name, deck) + def initialize(name, deck)# takes the name of the player and the players deck in form of arguments @name = name @deck = deck end - def has_lost?# ? means boolean - @deck.cards.empty? + def has_lost? # ? means boolean + @deck.cards.empty? # checks to see if the cards in the deck are empty(returns true if empty, false if not) end end \ No newline at end of file From e2864c2801b077bd2db2c306f1f04eb9a4f562f6 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 13:32:20 -0500 Subject: [PATCH 22/39] comments added --- spec/player_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/player_spec.rb b/spec/player_spec.rb index 5f6f53b11..ea541eeb7 100644 --- a/spec/player_spec.rb +++ b/spec/player_spec.rb @@ -11,11 +11,11 @@ card3 = Card.new(:heart, 'Ace', 14) deck = Deck.new([card1, card2, card3]) - player = Player.new('Clarisa', deck) + player = Player.new('Clarisa', deck)#Execution creates player OBJECT with name and deck(reminder that deck was already created) - expect(player.name).to eq('Clarisa') - expect(player.deck).to eq(deck) + expect(player.name).to eq('Clarisa')#assertion checks to see if the players name is equal to 'clarisa' + expect(player.deck).to eq(deck)#assertion checks to see if the players deck is equal to the deck that was given to the player upon creation end it "can determine if they have lost" do @@ -25,11 +25,11 @@ deck = Deck.new([card1, card2, card3]) player = Player.new('Clarisa', deck) + player.deck.remove_card#execution removes card from the deck player.deck.remove_card player.deck.remove_card - player.deck.remove_card - expect(player.deck.cards).to eq([]) - expect(player.has_lost?).to eq(true) + expect(player.deck.cards).to eq([])#assertion checks to see if all the cards in the deck have been removed + expect(player.has_lost?).to eq(true)# assertion checks to see if the player has lost end #binding.pry end \ No newline at end of file From dba587980498fa18a4fd2257f6bc50339d69fce8 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 14:09:10 -0500 Subject: [PATCH 23/39] initialized --- lib/turn.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lib/turn.rb diff --git a/lib/turn.rb b/lib/turn.rb new file mode 100644 index 000000000..224e91f1b --- /dev/null +++ b/lib/turn.rb @@ -0,0 +1,8 @@ +class Turn + attr_accessor :name, :deck + + def initialize(name, deck) + @name = name + @deck = deck + end +end \ No newline at end of file From 8c10f2e68e215d983beb72bd04b7479cdee0336b Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 14:09:33 -0500 Subject: [PATCH 24/39] initialized --- spec/turn_spec.rb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 spec/turn_spec.rb diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb new file mode 100644 index 000000000..5347e1552 --- /dev/null +++ b/spec/turn_spec.rb @@ -0,0 +1,31 @@ +require './lib/card' +require './lib/deck' +require './lib/player' +require './lib/turn' +require 'rspec' +require 'pry' + +RSpec.describe Turn do + it "exists" do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + expect(player1.name).to eq("Megan") + expect(player2.name).to eq("Aurora") + expect(player1.deck).to eq(deck1) + expect(player2.deck).to eq(deck2) + end + #binding.pry +end \ No newline at end of file From 62be74dde8c67928f4e8084eac529f5bc4f4417a Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 18:24:42 -0500 Subject: [PATCH 25/39] def type created --- lib/turn.rb | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index 224e91f1b..d4ba218b0 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -1,8 +1,34 @@ class Turn - attr_accessor :name, :deck - - def initialize(name, deck) - @name = name - @deck = deck + attr_reader :player1, :player2, :spoils_of_war + + attr_accessor :name, :deck1, :deck2 + + def initialize(player1, player2) + @player1 = player1 + @player2 = player2 + @spoils_of_war = [] + end + + def type + if @player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0) + :basic + elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && + @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) + :mutually_assured_destruction + else + :war + end end + + # def winner + + # end + + # def pile_cards + + # end + + # def award_spoils + + # end end \ No newline at end of file From f7ad5ad05be7abe41c7e5bb445ff943b3081afce Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sat, 12 Oct 2024 18:25:07 -0500 Subject: [PATCH 26/39] test has type created --- spec/turn_spec.rb | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 5347e1552..98686337b 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -21,11 +21,35 @@ player1 = Player.new("Megan", deck1) player2 = Player.new("Aurora", deck2) - + + expect(player1.name).to eq("Megan") expect(player2.name).to eq("Aurora") expect(player1.deck).to eq(deck1) expect(player2.deck).to eq(deck2) end - #binding.pry + + it "has type" do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + expect(turn.type).to eq(:basic) + expect(turn.type).to eq(:mutually_assured_destruction) + expect(turn.type).to eq(:war) + end + # binding.pry end \ No newline at end of file From 45bd9583eab3763a46e53ab584f601c345bf672f Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sun, 13 Oct 2024 21:39:23 -0500 Subject: [PATCH 27/39] added commas to deck.rb --- lib/deck.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index 3f353aa7c..bee0730a7 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,7 +1,7 @@ class Deck - attr_accessor :cards # allows both reading and modifying to be done to the array of cards from outside the class - :rank #attribute - :value #attribute + attr_reader :cards, # allows both reading and modifying to be done to the array of cards from outside the class + :rank, #attribute + :value #attribute def initialize(cards) # takes an array of cards in the form of an argumantand assigns it to the @cards instance variable @cards = cards From d507c907b11ce727e9824eb3b01cd28170a4cb04 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sun, 13 Oct 2024 21:40:20 -0500 Subject: [PATCH 28/39] changes to turn.rb --- lib/turn.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index d4ba218b0..5b841d1b0 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -1,22 +1,20 @@ class Turn attr_reader :player1, :player2, :spoils_of_war - attr_accessor :name, :deck1, :deck2 - def initialize(player1, player2) @player1 = player1 @player2 = player2 @spoils_of_war = [] end - def type - if @player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0) - :basic - elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && - @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) + def type + if @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && + @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) :mutually_assured_destruction - else + elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) :war + else + :basic end end From af5586b88f8d4ccaf2844f3502499268511a105b Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Sun, 13 Oct 2024 21:40:50 -0500 Subject: [PATCH 29/39] specfile completed --- spec/turn_spec.rb | 228 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 190 insertions(+), 38 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 98686337b..d5b3890d3 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -6,50 +6,202 @@ require 'pry' RSpec.describe Turn do - it "exists" do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) - - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) - - - expect(player1.name).to eq("Megan") - expect(player2.name).to eq("Aurora") - expect(player1.deck).to eq(deck1) - expect(player2.deck).to eq(deck2) + describe '#initialize' do + it "is a instance of Turn" do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + exepct(turn).to eq(Turn) + end end - it "has type" do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) + describe "Turn type basic" + before(:each) do #before(:each) runs before every test (each it block), so each test gets a fresh setup. + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, card6, card7]) + @turn = Turn.new(player1, player2) + end - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) + describe '#type basic' do + it 'is basic when the ranks of the first cards are not the same' do + expect(@player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0)).to be true + expect(@turn).to eq(:basic) + end + end - turn = Turn.new(player1, player2) + describe '#winner' do + it 'will return whichever players first card is a higher rank' do + winner = @turn.winner - expect(turn.type).to eq(:basic) - expect(turn.type).to eq(:mutually_assured_destruction) - expect(turn.type).to eq(:war) + expect(@player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(2)) + expect(winner).to eq(@player1) + end + end + + describe '#pile_cards' do + it 'each player will send one card (the top card) to the spoils pile' do + @turn.pile_cards + + expect(@turn.spoils_of_war).to eq([@card1, @card3]) + expect(@player1.deck).to eq([@card2, @card5, @card8]) + expect(@player2.deck).to eq(@card4, @card6, @card7) + end + end end + + describe 'Turn type war' do + before(:each) do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + @turn = Turn.new(player1, player2) + end + + describe '#type war' do + it 'occurs when both players first cards are equal' do + expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0)).to be true + expect(@turn).to eq(:war) + end + end + + describe '#winner' do + it 'it will return whichever players third card is higher in rank' do + winner = @turn.winner + + expect(@player1.deck.rank_of_card_at(2) < @player2.deck.rank_of_card_at(2)) + expect(winner).to eq(@player2) + end + end + + describe '#pile_cards' do + it 'each player will send three cards (the top three cards) to the spoils pile' do + @turn.pile_cards + + expect(@turn.spoils_of_war).to eq([@card1, @card2, @card5, @card4, @card3, @card6]) + expect(@player1.deck).to eq([@card8]) + expect(@player2.deck).to eq([@card7]) + end + end + end + + describe 'Turn type mutually_assured_destruction' do + before(:each) do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, '8', 8) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + @turn = Turn.new(player1, player2) + end + + describe '#type mutually_assured_destruction' do + it "occurs when both players first and third card are equal" do + expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && + @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2)).to be true + + expect(@turn).to eq(:mutually_assured_destruction) + end + end + + describe '#winner' do + it 'the method will return No Winner' do + winner = turn.winner + + expect(@deck1.cards).to eq(@deck2.cards) + expect(winner).to be("No Winner") + end + end + + describe '#pile_cards' do + it 'each player removes three cards and does not add them to spoils' do + @turn.pile_cards + + expect(@turn.spoils_of_war).to eq([]) + expect(@player1.deck).to eq([]) + expect(@player2.deck).to eq([]) + end + end + end + describe '#award_spoils' do + it 'add each of the cards in the @spoils_of_war array to the winner of the turn.' do + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + winner = turn.winner + expect(winner).to eq(@player1) + + turn.pile_cards + expect(@turn.spoils_of_war).to eq([@card1, @card3]) + expect(@player1.deck).to eq([@card2, @card5, @card8]) + expect(@player2.deck).to eq(@card4, @card6, @card7) + + turn.award_spoils(winner) + expect(@turn.spoils_of_war).to eq([]) + expect(@player1.deck).to eq([@card2, @card5, @card8, @card1, @card3]) + expect(@player2.deck).to eq(@card4, @card6, @card7) + end + end # binding.pry end \ No newline at end of file From 752f23d70416b58df40ef216e112232bd5275fd4 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Mon, 14 Oct 2024 22:24:33 -0500 Subject: [PATCH 30/39] all tests pass except award spoils --- spec/turn_spec.rb | 217 ++++++++++++++++++++++++---------------------- 1 file changed, 114 insertions(+), 103 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index d5b3890d3..7e2b6aeed 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -4,54 +4,67 @@ require './lib/turn' require 'rspec' require 'pry' - +#@ symbol is used to denote instance variables. Instance variables are variables that belong to a particular object (or instance) of a class, and they can be used to store values that are available across different methods of the object. RSpec.describe Turn do describe '#initialize' do - it "is a instance of Turn" do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) - - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) + before(:each) do + @card1 = Card.new(:heart, 'Jack', 11) + @card2 = Card.new(:heart, '10', 10) + @card3 = Card.new(:heart, '9', 9) + @card4 = Card.new(:diamond, 'Jack', 11) + @card5 = Card.new(:heart, '8', 8) + @card6 = Card.new(:diamond, 'Queen', 12) + @card7 = Card.new(:heart, '3', 3) + @card8 = Card.new(:diamond, '2', 2) + + @deck1 = Deck.new([@card1, @card2, @card5, @card8]) + @deck2 = Deck.new([@card3, @card4, @card6, @card7]) + + @player1 = Player.new("Megan", @deck1) + @player2 = Player.new("Aurora", @deck2) + + @turn = Turn.new(@player1, @player2) - turn = Turn.new(player1, player2) - exepct(turn).to eq(Turn) + end + + it 'has turn' do#needed its own test block + expect(@turn).to be_a(Turn) + end + + it 'is created with 2 players' do#needed its own test block + expect(@turn.player1).to eq(@player1) + expect(@turn.player2).to eq(@player2) + end + + it 'has spoils of war starts empty' do#needed its own test block + expect(@turn.spoils_of_war).to eq([]) end end - describe "Turn type basic" + describe "Turn type basic" do before(:each) do #before(:each) runs before every test (each it block), so each test gets a fresh setup. - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) - - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) - - @turn = Turn.new(player1, player2) + @card1 = Card.new(:heart, 'Jack', 11) + @card2 = Card.new(:heart, '10', 10) + @card3 = Card.new(:heart, '9', 9) + @card4 = Card.new(:diamond, 'Jack', 11) + @card5 = Card.new(:heart, '8', 8) + @card6 = Card.new(:diamond, 'Queen', 12) + @card7 = Card.new(:heart, '3', 3) + @card8 = Card.new(:diamond, '2', 2) + + @deck1 = Deck.new([@card1, @card2, @card5, @card8]) + @deck2 = Deck.new([@card3, @card4, @card6, @card7]) + + @player1 = Player.new("Megan", @deck1) + @player2 = Player.new("Aurora", @deck2) + + @turn = Turn.new(@player1, @player2) end describe '#type basic' do it 'is basic when the ranks of the first cards are not the same' do expect(@player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0)).to be true - expect(@turn).to eq(:basic) + expect(@turn.type).to eq(:basic)#needed .type end end @@ -59,7 +72,7 @@ it 'will return whichever players first card is a higher rank' do winner = @turn.winner - expect(@player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(2)) + expect(@player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0)) expect(winner).to eq(@player1) end end @@ -69,36 +82,36 @@ @turn.pile_cards expect(@turn.spoils_of_war).to eq([@card1, @card3]) - expect(@player1.deck).to eq([@card2, @card5, @card8]) - expect(@player2.deck).to eq(@card4, @card6, @card7) + expect(@player1.deck.cards).to eq([@card2, @card5, @card8])#was missing .cards getter method(needs this to access the cards in the deck) + expect(@player2.deck.cards).to eq([@card4, @card6, @card7]) end end end describe 'Turn type war' do before(:each) do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) + @card1 = Card.new(:heart, 'Jack', 11) + @card2 = Card.new(:heart, '10', 10) + @card3 = Card.new(:heart, '9', 9) + @card4 = Card.new(:diamond, 'Jack', 11) + @card5 = Card.new(:heart, '8', 8) + @card6 = Card.new(:diamond, 'Queen', 12) + @card7 = Card.new(:heart, '3', 3) + @card8 = Card.new(:diamond, '2', 2) - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card4, card3, card6, card7]) + @deck1 = Deck.new([@card1, @card2, @card5, @card8]) + @deck2 = Deck.new([@card4, @card3, @card6, @card7]) - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) + @player1 = Player.new("Megan", @deck1) + @player2 = Player.new("Aurora", @deck2) - @turn = Turn.new(player1, player2) + @turn = Turn.new(@player1, @player2) end describe '#type war' do it 'occurs when both players first cards are equal' do expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0)).to be true - expect(@turn).to eq(:war) + expect(@turn.type).to eq(:war)#needed .type end end @@ -116,91 +129,89 @@ @turn.pile_cards expect(@turn.spoils_of_war).to eq([@card1, @card2, @card5, @card4, @card3, @card6]) - expect(@player1.deck).to eq([@card8]) - expect(@player2.deck).to eq([@card7]) + expect(@player1.deck.cards).to eq([@card8]) + expect(@player2.deck.cards).to eq([@card7]) end end end describe 'Turn type mutually_assured_destruction' do before(:each) do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, '8', 8) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) - - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card4, card3, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) - - @turn = Turn.new(player1, player2) + @card1 = Card.new(:heart, 'Jack', 11) + @card2 = Card.new(:heart, '10', 10) + @card3 = Card.new(:heart, '9', 9) + @card4 = Card.new(:diamond, 'Jack', 11) + @card5 = Card.new(:heart, '8', 8) + @card6 = Card.new(:diamond, '8', 8) + @card7 = Card.new(:heart, '3', 3) + @card8 = Card.new(:diamond, '2', 2) + + @deck1 = Deck.new([@card1, @card2, @card5, @card8]) + @deck2 = Deck.new([@card4, @card3, @card6, @card7]) + + @player1 = Player.new("Megan", @deck1) + @player2 = Player.new("Aurora", @deck2) + + @turn = Turn.new(@player1, @player2) end describe '#type mutually_assured_destruction' do it "occurs when both players first and third card are equal" do - expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && - @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2)).to be true + expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2)).to be true - expect(@turn).to eq(:mutually_assured_destruction) + expect(@turn.type).to eq(:mutually_assured_destruction)#needed .type end end describe '#winner' do it 'the method will return No Winner' do - winner = turn.winner + winner = @turn.winner - expect(@deck1.cards).to eq(@deck2.cards) - expect(winner).to be("No Winner") + expect(@player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2)).to be true + expect(winner).to eq("No Winner") end end describe '#pile_cards' do it 'each player removes three cards and does not add them to spoils' do @turn.pile_cards - + expect(@turn.spoils_of_war).to eq([]) - expect(@player1.deck).to eq([]) - expect(@player2.deck).to eq([]) + expect(@player1.deck.cards).to eq([@card8]) + expect(@player2.deck.cards).to eq([@card7]) end end end describe '#award_spoils' do it 'add each of the cards in the @spoils_of_war array to the winner of the turn.' do - card1 = Card.new(:heart, 'Jack', 11) - card2 = Card.new(:heart, '10', 10) - card3 = Card.new(:heart, '9', 9) - card4 = Card.new(:diamond, 'Jack', 11) - card5 = Card.new(:heart, '8', 8) - card6 = Card.new(:diamond, 'Queen', 12) - card7 = Card.new(:heart, '3', 3) - card8 = Card.new(:diamond, '2', 2) - - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) + @card1 = Card.new(:heart, 'Jack', 11) + @card2 = Card.new(:heart, '10', 10) + @card3 = Card.new(:heart, '9', 9) + @card4 = Card.new(:diamond, 'Jack', 11) + @card5 = Card.new(:heart, '8', 8) + @card6 = Card.new(:diamond, 'Queen', 12) + @card7 = Card.new(:heart, '3', 3) + @card8 = Card.new(:diamond, '2', 2) + + @deck1 = Deck.new([@card1, @card2, @card5, @card8]) + @deck2 = Deck.new([@card3, @card4, @card6, @card7]) + + @player1 = Player.new("Megan", @deck1) + @player2 = Player.new("Aurora", @deck2) - turn = Turn.new(player1, player2) + @turn = Turn.new(@player1, @player2) - winner = turn.winner + winner = @turn.winner expect(winner).to eq(@player1) - turn.pile_cards + @turn.pile_cards expect(@turn.spoils_of_war).to eq([@card1, @card3]) - expect(@player1.deck).to eq([@card2, @card5, @card8]) - expect(@player2.deck).to eq(@card4, @card6, @card7) + expect(@player1.deck.cards).to eq([@card2, @card5, @card8]) + expect(@player2.deck.cards).to eq([@card4, @card6, @card7]) - turn.award_spoils(winner) - expect(@turn.spoils_of_war).to eq([]) - expect(@player1.deck).to eq([@card2, @card5, @card8, @card1, @card3]) - expect(@player2.deck).to eq(@card4, @card6, @card7) + @turn.award_spoils(winner) + expect(@player1.deck.cards).to eq([@card2, @card5, @card8, @card1, @card3]) + expect(@player2.deck.cards).to eq([@card4, @card6, @card7]) end end # binding.pry From 5d1d0afe0463ef2d1345e319e7c19248e5144569 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Mon, 14 Oct 2024 22:25:29 -0500 Subject: [PATCH 31/39] changes and notes to class file --- lib/turn.rb | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index 5b841d1b0..ed8561af9 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -8,25 +8,44 @@ def initialize(player1, player2) end def type - if @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && - @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) - :mutually_assured_destruction - elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) + if @player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0) + :basic + elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) + :mutually_assured_destruction + else :war - else - :basic end end - # def winner - - # end + def winner # not sure if this is right + if type == :basic + @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) + @player1 + elsif type == :war + @player1.deck.rank_of_card_at(2) < @player2.deck.rank_of_card_at(2) + @player2 + elsif type == :mutually_assured_destruction + @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) + "No Winner" + end + end - # def pile_cards - - # end + def pile_cards#can use if, elsif, elsif do not need to end with else + if type == :basic + @spoils_of_war << @player1.deck.cards.shift + @spoils_of_war << @player2.deck.cards.shift + elsif type == :war #each player will send three cards (the top three cards) to the spoils pile + @spoils_of_war << @player1.deck.cards.shift(3) + @spoils_of_war << @player2.deck.cards.shift(3) + @spoils_of_war.flatten! #needed to flatten array, was getting a array inside of array + elsif type == :mutually_assured_destruction + @player1.deck.cards.shift(3) # shift(n) → new_array Removes and returns leading elements. in this case we need to remove the first 3 + @player2.deck.cards.shift(3) + end + end - # def award_spoils - - # end + def award_spoils(winner) + @spoils_of_war.shuffle!#needed to prevent predictability to the game by shuffling the cards before awwarding them to the winner + winner.deck.cards.concat(@spoils_of_war)# concat: Adds to array all elements from each Array + end end \ No newline at end of file From 93e2137a3a0fab7e1ef41b6e73c70e824d7a01d1 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 16:49:25 -0500 Subject: [PATCH 32/39] War_of_peace_rinner created --- war_or_peace_runner.rb | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 war_or_peace_runner.rb diff --git a/war_or_peace_runner.rb b/war_or_peace_runner.rb new file mode 100644 index 000000000..9952b35fc --- /dev/null +++ b/war_or_peace_runner.rb @@ -0,0 +1,33 @@ +require './lib/card' +require './lib/deck' +require './lib/player' +# require './lib/turn' + +suits = [:heart, :diamond, :spade, :club] + +all_cards = [] + +suits.each do |suit| + all_cards << Card.new(:suit, "2", 2) + all_cards << Card.new(:suit, "3", 3) + all_cards << Card.new(:suit, "4", 4) + all_cards << Card.new(:suit, "5", 5) + all_cards << Card.new(:suit, "6", 6) + all_cards << Card.new(:suit, "7", 7) + all_cards << Card.new(:suit, "8", 8) + all_cards << Card.new(:suit, "9", 9) + all_cards << Card.new(:suit, "10", 10) + all_cards << Card.new(:suit, "Jack", 11) + all_cards << Card.new(:suit, "Queen", 12) + all_cards << Card.new(:suit, "King", 13) + all_cards << Card.new(:suit, "Ace", 14) +end + + +# deck1 = Deck.new([]) +# deck2 = Deck.new([]) + + + + + From 01852ecdb3b987111ebc53df30ab2fe55a4fc5d0 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 16:50:56 -0500 Subject: [PATCH 33/39] changes to winner method to account for all possibilities --- lib/turn.rb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index ed8561af9..2aca7d2f4 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -17,16 +17,19 @@ def type end end - def winner # not sure if this is right - if type == :basic - @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) + def winner #changed to account for all possibilities + if @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) @player1 - elsif type == :war - @player1.deck.rank_of_card_at(2) < @player2.deck.rank_of_card_at(2) + elsif @player1.deck.rank_of_card_at(0) < @player2.deck.rank_of_card_at(0) @player2 - elsif type == :mutually_assured_destruction - @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.rank_of_card_at(2) == @player2.deck.rank_of_card_at(2) - "No Winner" + elsif @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) + if @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) + @player1 + elsif @player1.deck.rank_of_card_at(2) < @player2.deck.rank_of_card_at(2) + @player2 + else + "No Winner" + end end end @@ -45,7 +48,8 @@ def pile_cards#can use if, elsif, elsif do not need to end with else end def award_spoils(winner) - @spoils_of_war.shuffle!#needed to prevent predictability to the game by shuffling the cards before awwarding them to the winner + @spoils_of_war.shuffle! #wont pass with this although I think its #needed to prevent predictability to the game by shuffling the cards before awwarding them to the winner winner.deck.cards.concat(@spoils_of_war)# concat: Adds to array all elements from each Array + @spoils_of_war.clear end end \ No newline at end of file From 9b39fa620f57ba20b320a6efccf15be3b333b834 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 16:53:51 -0500 Subject: [PATCH 34/39] add changes made to award poils test --- spec/turn_spec.rb | 59 ++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 7e2b6aeed..fb745a0d2 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -136,7 +136,7 @@ end describe 'Turn type mutually_assured_destruction' do - before(:each) do + before(:each) do @card1 = Card.new(:heart, 'Jack', 11) @card2 = Card.new(:heart, '10', 10) @card3 = Card.new(:heart, '9', 9) @@ -184,35 +184,36 @@ end describe '#award_spoils' do it 'add each of the cards in the @spoils_of_war array to the winner of the turn.' do - @card1 = Card.new(:heart, 'Jack', 11) - @card2 = Card.new(:heart, '10', 10) - @card3 = Card.new(:heart, '9', 9) - @card4 = Card.new(:diamond, 'Jack', 11) - @card5 = Card.new(:heart, '8', 8) - @card6 = Card.new(:diamond, 'Queen', 12) - @card7 = Card.new(:heart, '3', 3) - @card8 = Card.new(:diamond, '2', 2) - - @deck1 = Deck.new([@card1, @card2, @card5, @card8]) - @deck2 = Deck.new([@card3, @card4, @card6, @card7]) - - @player1 = Player.new("Megan", @deck1) - @player2 = Player.new("Aurora", @deck2) + card1 = Card.new(:heart, 'Jack', 11) + card2 = Card.new(:heart, '10', 10) + card3 = Card.new(:heart, '9', 9) + card4 = Card.new(:diamond, 'Jack', 11) + card5 = Card.new(:heart, '8', 8) + card6 = Card.new(:diamond, 'Queen', 12) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) + + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) - @turn = Turn.new(@player1, @player2) - - winner = @turn.winner - expect(winner).to eq(@player1) - - @turn.pile_cards - expect(@turn.spoils_of_war).to eq([@card1, @card3]) - expect(@player1.deck.cards).to eq([@card2, @card5, @card8]) - expect(@player2.deck.cards).to eq([@card4, @card6, @card7]) - - @turn.award_spoils(winner) - expect(@player1.deck.cards).to eq([@card2, @card5, @card8, @card1, @card3]) - expect(@player2.deck.cards).to eq([@card4, @card6, @card7]) + turn = Turn.new(player1, player2) + + winner = turn.winner + expect(winner).to eq(player1) + + turn.pile_cards + expect(turn.spoils_of_war).to eq([card1, card3]) + expect(player1.deck.cards).to eq([card2, card5, card8]) + expect(player2.deck.cards).to eq([card4, card6, card7]) + + turn.award_spoils(winner) + expect(player1.deck.cards).to eq([card2, card5, card8, card1, card3]) + expect(player2.deck.cards).to eq([card4, card6, card7]) + # binding.pry end end - # binding.pry + end \ No newline at end of file From 3a9abd6288438a6d4801bb13fba15510482fc59b Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 17:55:52 -0500 Subject: [PATCH 35/39] changes to war_or_peace_runner.rb --- war_or_peace_runner.rb | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/war_or_peace_runner.rb b/war_or_peace_runner.rb index 9952b35fc..4fe338c6f 100644 --- a/war_or_peace_runner.rb +++ b/war_or_peace_runner.rb @@ -1,7 +1,7 @@ require './lib/card' require './lib/deck' require './lib/player' -# require './lib/turn' +require './lib/turn' suits = [:heart, :diamond, :spade, :club] @@ -23,11 +23,17 @@ all_cards << Card.new(:suit, "Ace", 14) end - -# deck1 = Deck.new([]) -# deck2 = Deck.new([]) - +all_cards.shuffle! +#... means up to and including , .. means not including #look up more on ranges +deck1 = Deck.new(all_cards[0...26]) +deck2 = Deck.new(all_cards[26..51]) +player1 = Player.new("Megan", deck1) +player2 = Player.new("Aurora", deck2) +puts "Welcome to War! (or Peace) This game will be played with 52 cards. +The players today are Megan and Aurora. +Type 'GO' to start the game! +------------------------------------------------------------------""" \ No newline at end of file From d922d8a71185a800298c13206259693190ad0096 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 17:56:09 -0500 Subject: [PATCH 36/39] adds game class --- lib/game.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lib/game.rb diff --git a/lib/game.rb b/lib/game.rb new file mode 100644 index 000000000..3749dba73 --- /dev/null +++ b/lib/game.rb @@ -0,0 +1,8 @@ +class Game + attr_reader :player1, :player2 + + def initialize(player1, player2) + @player1 = player1 + @player2 = player2 + end +end \ No newline at end of file From b5e0040727754085916ea1e88da177db1be92fb6 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 17:56:21 -0500 Subject: [PATCH 37/39] take out pry --- spec/card_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index d00ebeadf..62f1e78d8 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -15,6 +15,6 @@ expect(card.suit).to eq(:diamond) expect(card.value).to eq('Queen') expect(card.rank).to eq(12) - binding.pry + end end From 7867869dc2f464a1c5f5e1788a3f0e91b7cd2b47 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 17:56:33 -0500 Subject: [PATCH 38/39] take out pry --- spec/deck_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 611e27833..94e9f7ea1 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -71,7 +71,7 @@ deck.add_card(card4)#execution adds card4 to the deck expect(deck.cards).to eq([card1, card2, card3, card4])#assertion checks to see if the card was added - binding.pry + end #end From 694746199c3a3dc733a3f5f9fd77309068770968 Mon Sep 17 00:00:00 2001 From: Kevin Newland Date: Tue, 15 Oct 2024 17:57:17 -0500 Subject: [PATCH 39/39] adds game_spec_file --- spec/game_spec.rb | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 spec/game_spec.rb diff --git a/spec/game_spec.rb b/spec/game_spec.rb new file mode 100644 index 000000000..ee3fb0eaa --- /dev/null +++ b/spec/game_spec.rb @@ -0,0 +1,47 @@ +require './lib/card' +require './lib/deck' +require './lib/player' +require './lib/turn' +require './lib/game' + +RSpec.describe Game do + describe'#initialize' do + it 'is instance of game' do + suits = [:heart, :diamond, :spade, :club] + + all_cards = [] + + suits.each do |suit| + all_cards << Card.new(:suit, "2", 2) + all_cards << Card.new(:suit, "3", 3) + all_cards << Card.new(:suit, "4", 4) + all_cards << Card.new(:suit, "5", 5) + all_cards << Card.new(:suit, "6", 6) + all_cards << Card.new(:suit, "7", 7) + all_cards << Card.new(:suit, "8", 8) + all_cards << Card.new(:suit, "9", 9) + all_cards << Card.new(:suit, "10", 10) + all_cards << Card.new(:suit, "Jack", 11) + all_cards << Card.new(:suit, "Queen", 12) + all_cards << Card.new(:suit, "King", 13) + all_cards << Card.new(:suit, "Ace", 14) + end + + all_cards.shuffle! + + deck1 = Deck.new(all_cards[0...26]) + deck2 = Deck.new(all_cards[26..51]) + + + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + game = Game.new(player1, player2) + + expect(game).to be_instance_of(Game) + expect(game.player1).to eq(player1) + expect(game.player2).to eq(player2) + end + end +end \ No newline at end of file