From 6f6900d1c418a6297d49ca43f8f5a1536db161e0 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 16:13:30 -0500 Subject: [PATCH 01/48] add class file --- lib/card.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/card.rb diff --git a/lib/card.rb b/lib/card.rb new file mode 100644 index 000000000..e69de29bb From 12abbe8e26f22011cddfe5991d7a651885441ddb Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 17:51:06 -0500 Subject: [PATCH 02/48] First card test passes --- lib/card.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/card.rb b/lib/card.rb index e69de29bb..0bbd171eb 100644 --- a/lib/card.rb +++ b/lib/card.rb @@ -0,0 +1,13 @@ +class Card + + attr_reader :rank, + :suit, + :value + + def initialize(suit, value, rank) + @suit = suit + @value = value + @rank = rank + end + +end From 43211256dad95bfa41776e65a6f7d67eb09109d4 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 17:55:07 -0500 Subject: [PATCH 03/48] Initial commit --- lib/deck.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/deck.rb diff --git a/lib/deck.rb b/lib/deck.rb new file mode 100644 index 000000000..e69de29bb From 9363c5e165754cb3392403b468d2da0a297a804b Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 17:55:16 -0500 Subject: [PATCH 04/48] Initial commit --- spec/deck_spec.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) 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..e69de29bb From fb2a65693407112bf7bc6ca3d1bd671beb253858 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 18:50:54 -0500 Subject: [PATCH 05/48] Test failing, add_cards method created --- lib/deck.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/deck.rb b/lib/deck.rb index e69de29bb..fd855e3de 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -0,0 +1,12 @@ +class Deck + + attr_reader :cards + + def initialize + @cards = [] + end + + def add_cards(card) + @cards << card + end +end From 92af98a49e4124084f4eb003f0bd5927afa7df77 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 8 Oct 2024 18:51:09 -0500 Subject: [PATCH 06/48] Test failing, add_cards method created --- spec/deck_spec.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index e69de29bb..50b8415ef 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -0,0 +1,25 @@ +require 'rspec' +require './lib/card' +require './lib/deck' + +describe Deck do + describe 'initialize' do + it 'should start as an empty array of cards' do + deck = Deck.new([]) + + expect(deck.cards).to eq([]) + end + end + + describe 'add_cards' do + it 'should be able to add cards to the cards array' do + deck = Deck.new([]) + + card1 = deck.add_card(:diamond, 'Queen', 12) + card2 = deck.add_card(:spade, '3', 3) + card3 = deck.add_card(:heart, 'Ace', 14) + + expect(deck.cards).to eq([card1, card2, card3]) + end + end +end From 8afb284af0a58ef7082c87688efb78ccec53115f Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Wed, 9 Oct 2024 09:55:47 -0500 Subject: [PATCH 07/48] Backtracking --- lib/deck.rb | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index fd855e3de..cacaf3d2e 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -5,8 +5,20 @@ class Deck def initialize @cards = [] end - - def add_cards(card) - @cards << card - end end + + + + + + + + + + + + + # def add_cards(card) +# @cards << card +# end +# end From ed3941ec4add81bc4e16519392fc80fffd01614f Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Wed, 9 Oct 2024 09:55:59 -0500 Subject: [PATCH 08/48] Backtracking --- spec/deck_spec.rb | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 50b8415ef..03e259fe3 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -10,16 +10,27 @@ expect(deck.cards).to eq([]) end end +end - describe 'add_cards' do - it 'should be able to add cards to the cards array' do - deck = Deck.new([]) - card1 = deck.add_card(:diamond, 'Queen', 12) - card2 = deck.add_card(:spade, '3', 3) - card3 = deck.add_card(:heart, 'Ace', 14) - expect(deck.cards).to eq([card1, card2, card3]) - end - end -end + + + + + + + + +# describe 'add_cards' do +# it 'should be able to add cards to the cards array' do +# deck = Deck.new([]) + +# card1 = deck.add_card(:diamond, 'Queen', 12) +# card2 = deck.add_card(:spade, '3', 3) +# card3 = deck.add_card(:heart, 'Ace', 14) + +# expect(deck.cards).to eq([card1, card2, card3]) +# end +# end +# end From 47f0e12d3b1f1ac0a6450e4f6ca7c40118232eb3 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Wed, 9 Oct 2024 20:30:02 -0500 Subject: [PATCH 09/48] First two tests pass --- lib/deck.rb | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index cacaf3d2e..8dd81cf4b 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,24 +1,11 @@ class Deck - attr_reader :cards - def initialize - @cards = [] + def initialize(cards) + @cards = cards end -end - - - - - - - - - - - - # def add_cards(card) -# @cards << card -# end -# end + def rank_of_card_at(index) + @cards[index].rank + end +end \ No newline at end of file From 207c905939600af73b1d4b6ab743b4e5e4603094 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Wed, 9 Oct 2024 20:30:19 -0500 Subject: [PATCH 10/48] First two tests pass --- spec/deck_spec.rb | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 03e259fe3..a8929ccc7 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -2,35 +2,29 @@ require './lib/card' require './lib/deck' -describe Deck do - describe 'initialize' do - it 'should start as an empty array of cards' do - deck = Deck.new([]) - - expect(deck.cards).to eq([]) - end +RSpec.describe Deck do + it 'exists' do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:diamond, 'Queen', 12) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + expect(deck.cards).to eq([card1, card2, card3]) end -end - - - - - - + it 'returns rank of card at specified index position' do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:diamond, 'Queen', 12) + card3 = Card.new(:heart, 'Ace', 14) + cards = [card1, card2, card3] + deck = Deck.new(cards) + expect(deck.rank_of_card_at(0)).to eq(12) + end +end -# describe 'add_cards' do -# it 'should be able to add cards to the cards array' do -# deck = Deck.new([]) -# card1 = deck.add_card(:diamond, 'Queen', 12) -# card2 = deck.add_card(:spade, '3', 3) -# card3 = deck.add_card(:heart, 'Ace', 14) -# expect(deck.cards).to eq([card1, card2, card3]) -# end -# end -# end From cf4424a34d5649e8e2b1e68d95bfd47f4344b3b8 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 13:08:09 -0500 Subject: [PATCH 11/48] Working on high_ranking_cards method --- lib/deck.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/deck.rb b/lib/deck.rb index 8dd81cf4b..90f34d81e 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -8,4 +8,8 @@ def initialize(cards) def rank_of_card_at(index) @cards[index].rank end + + def high_ranking_cards + cards.rank >= 11 + end end \ No newline at end of file From 1e0b27582d06e874d8e653c18614f5e8a1cad255 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 13:08:30 -0500 Subject: [PATCH 12/48] Working on high_ranking_cards test --- spec/deck_spec.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index a8929ccc7..d3a617097 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -1,11 +1,12 @@ require 'rspec' require './lib/card' require './lib/deck' +require 'pry' RSpec.describe Deck do it 'exists' do card1 = Card.new(:diamond, 'Queen', 12) - card2 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] @@ -15,13 +16,23 @@ it 'returns rank of card at specified index position' do card1 = Card.new(:diamond, 'Queen', 12) - card2 = 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) end + + it 'returns an array of cards with rankings >= 11' 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.high_ranking_cards).to eq([card1, card3]) + end end From 7b3f0ef772495f2a5088e5d8dc0f3900c7dd5a11 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 17:52:41 -0500 Subject: [PATCH 13/48] percent high ranking test passes --- lib/deck.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/deck.rb b/lib/deck.rb index 90f34d81e..5f1a420fa 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -3,6 +3,7 @@ class Deck def initialize(cards) @cards = cards + end def rank_of_card_at(index) @@ -10,6 +11,15 @@ def rank_of_card_at(index) end def high_ranking_cards - cards.rank >= 11 + @cards.find_all do |card| + card.rank >= 11 + end + end + + def percent_high_ranking + percent_high = @cards.count do |card| + card.rank >= 11 + end + (percent_high.to_f / @cards.size * 100).round(2) end end \ No newline at end of file From f53a88fcf19112f74264db6d278a1f2c96d695b9 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 17:53:13 -0500 Subject: [PATCH 14/48] updated with project info --- spec/card_spec.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index 85079129e..3272dfa56 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -15,4 +15,19 @@ expect(card.value).to eq('Queen') expect(card.rank).to eq(12) end + + it "exists" do + card = Card.new(:heart, 'Jack', 11) + + expect(card).to be_an_instance_of(Card) + end + + it "has readable attributes" do + card = Card.new(:heart, 'Jack', 11) + + expect(card.suit).to eq(:heart) + expect(card.value).to eq('Jack') + expect(card.rank).to eq(11) + end end + From cbeab09ad9b02739b03ebc78bbbec96912349b22 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 17:53:44 -0500 Subject: [PATCH 15/48] percent high ranking method works --- spec/deck_spec.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index d3a617097..de6050d2d 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -1,7 +1,6 @@ require 'rspec' require './lib/card' require './lib/deck' -require 'pry' RSpec.describe Deck do it 'exists' do @@ -24,6 +23,16 @@ expect(deck.rank_of_card_at(0)).to eq(12) end + it 'returns rank of card at specified index position' 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(2)).to eq(14) + end + it 'returns an array of cards with rankings >= 11' do card1 = Card.new(:diamond, 'Queen', 12) card2 = Card.new(:spade, '3', 3) @@ -33,6 +42,17 @@ deck = Deck.new(cards) expect(deck.high_ranking_cards).to eq([card1, card3]) end + + it 'returns a percentage of cards that are 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) + expect(deck.percent_high_ranking).to eq(66.67) + end + end From 91772bf7b18874a65968338c5515134bf4c5c11e Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 18:58:52 -0500 Subject: [PATCH 16/48] Finished iteration 1 --- lib/deck.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/deck.rb b/lib/deck.rb index 5f1a420fa..914ddf9fb 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -22,4 +22,12 @@ def percent_high_ranking end (percent_high.to_f / @cards.size * 100).round(2) end + + def remove_card + @cards.shift + end + + def add_card(card4) + @cards.append(card4) + end end \ No newline at end of file From 7edaf78c0715553a97a0726b33804c3f1dea208a Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 18:59:03 -0500 Subject: [PATCH 17/48] Finished iteration 1 --- spec/deck_spec.rb | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index de6050d2d..ee27316ee 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -13,7 +13,7 @@ expect(deck.cards).to eq([card1, card2, card3]) end - it 'returns rank of card at specified index position' do + it 'returns rank of card at the specified index position' do card1 = Card.new(:diamond, 'Queen', 12) card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) @@ -23,7 +23,7 @@ expect(deck.rank_of_card_at(0)).to eq(12) end - it 'returns rank of card at specified index position' do + it 'returns rank of card at the specified index position' do card1 = Card.new(:diamond, 'Queen', 12) card2 = Card.new(:spade, '3', 3) card3 = Card.new(:heart, 'Ace', 14) @@ -53,6 +53,28 @@ expect(deck.percent_high_ranking).to eq(66.67) end + it 'returns a card that is removed from the top of the deck' 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.remove_card).to eq(card1) + end + + it 'returns a card that is added to the bottom of the deck' do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + card4 = Card.new(:club, '5', 5) + cards = [card2, card3] + + deck = Deck.new(cards) + deck.add_card(card4) + expect(deck.cards).to eq([card2, card3, card4]) + end +require 'pry'; binding.pry end From 58b47d2c151ae078991e10996eba015716caacc4 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 18:59:48 -0500 Subject: [PATCH 18/48] Finished iteration one (removed pry from test) --- spec/deck_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index ee27316ee..2d9e28a43 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -74,7 +74,6 @@ deck.add_card(card4) expect(deck.cards).to eq([card2, card3, card4]) end -require 'pry'; binding.pry end From 01b513d5a8518202addd4ccb1f1a93e1f8adbe33 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 19:15:38 -0500 Subject: [PATCH 19/48] Finished iteration 1 --- lib/card.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/card.rb b/lib/card.rb index 0bbd171eb..eace70a19 100644 --- a/lib/card.rb +++ b/lib/card.rb @@ -1,5 +1,5 @@ class Card - + attr_reader :rank, :suit, :value From a6e8deb105fbdd9f11603a74bffd3fc863a69b8a Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 19:15:48 -0500 Subject: [PATCH 20/48] Finished iteration 1 --- lib/deck.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/deck.rb b/lib/deck.rb index 914ddf9fb..62ee82e65 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -1,4 +1,5 @@ class Deck + attr_reader :cards def initialize(cards) From 09fda54d38824ea3e83a2ff86571a5e6f1ca8d68 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 19:16:01 -0500 Subject: [PATCH 21/48] Initial commit --- lib/player.rb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 lib/player.rb diff --git a/lib/player.rb b/lib/player.rb new file mode 100644 index 000000000..4cded77fc --- /dev/null +++ b/lib/player.rb @@ -0,0 +1,9 @@ +class Player + + attr_reader :name + + def initialize(name) + @name = name + end + +end \ No newline at end of file From 12b8ef42e0f22947b8f735c52573e5114c199b23 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 19:16:09 -0500 Subject: [PATCH 22/48] Initial commit --- spec/player_spec.rb | 15 +++++++++++++++ 1 file changed, 15 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..bb0dde40f --- /dev/null +++ b/spec/player_spec.rb @@ -0,0 +1,15 @@ +require './lib/card' +require './lib/deck' +require './lib/player' + +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 be('Clarisa') + end +end \ No newline at end of file From 532802ca16531efa34bb289d72be849a9cace873 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 20:17:21 -0500 Subject: [PATCH 23/48] All tests passing in player class --- lib/player.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/player.rb b/lib/player.rb index 4cded77fc..9b30a2e4c 100644 --- a/lib/player.rb +++ b/lib/player.rb @@ -1,9 +1,14 @@ class Player - attr_reader :name + attr_reader :name, :deck - def initialize(name) + def initialize(name, deck) @name = name + @deck = deck + end + + def has_lost? + @deck.cards.empty? end end \ No newline at end of file From 42bfdbeec8ed667ab2802f19f3ec4b34a30ee805 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 20:17:39 -0500 Subject: [PATCH 24/48] All tests passing in player spec --- spec/player_spec.rb | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/spec/player_spec.rb b/spec/player_spec.rb index bb0dde40f..b1de95d5b 100644 --- a/spec/player_spec.rb +++ b/spec/player_spec.rb @@ -10,6 +10,18 @@ deck = Deck.new([card1, card2, card3]) player = Player.new('Clarisa', deck) - expect(player.name).to be('Clarisa') + expect(player.name).to eq('Clarisa') + expect(player.deck).to eq(deck) end -end \ No newline at end of file + + it 'determines if the player lost that roud' 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.has_lost?).to be(false) + end +end +require 'pry'; binding.pry \ No newline at end of file From b5f2bf3fcb3e04c7375ba1745409f6b1217134be Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 20:33:12 -0500 Subject: [PATCH 25/48] All tests passing (removed pry) --- spec/player_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/player_spec.rb b/spec/player_spec.rb index b1de95d5b..08b9f817f 100644 --- a/spec/player_spec.rb +++ b/spec/player_spec.rb @@ -1,3 +1,4 @@ +require 'rspec' require './lib/card' require './lib/deck' require './lib/player' @@ -23,5 +24,4 @@ player = Player.new('Clarisa', deck) expect(player.has_lost?).to be(false) end -end -require 'pry'; binding.pry \ No newline at end of file +end \ No newline at end of file From a3e0fb7c7d570cc0e7ccc4ad0554f8528e2f7a8f Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 20:33:29 -0500 Subject: [PATCH 26/48] Initial commit / test one passing --- lib/turn.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lib/turn.rb diff --git a/lib/turn.rb b/lib/turn.rb new file mode 100644 index 000000000..b770413ed --- /dev/null +++ b/lib/turn.rb @@ -0,0 +1,10 @@ +class Turn + + attr_reader :player1, :player2 + + def initialize(player1, player2) + @player1 = player1 + @player2 = player2 + end + +end \ No newline at end of file From 8009d98cb444c029220f794632e39b7880866aec Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 20:33:43 -0500 Subject: [PATCH 27/48] Initial commit / test one passing --- spec/turn_spec.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 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..85a2d1599 --- /dev/null +++ b/spec/turn_spec.rb @@ -0,0 +1,28 @@ +require 'rspec' +require './lib/card' +require './lib/deck' +require './lib/player' +require './lib/turn' + +RSpec.describe Turn do + it 'Creates a turn with player1 and player2' 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.player1).to eq(player1) + expect(turn.player2).to eq(player2) + end +end \ No newline at end of file From 7f7629e66762bef5fca0f6b3fb642e7b6f2aa44f Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 21:01:43 -0500 Subject: [PATCH 28/48] Type test passes --- lib/turn.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/turn.rb b/lib/turn.rb index b770413ed..75820fe45 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -1,10 +1,21 @@ class Turn - attr_reader :player1, :player2 + attr_reader :player1, :player2, :spoils_of_war def initialize(player1, player2) @player1 = player1 @player2 = player2 + @spoils_of_war = [] + end + + def type + if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + :basic + elsif @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + :basic + else + @spoils_of_war + end end end \ No newline at end of file From b28636bc11cdda49845e5682ad6b96770de25128 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Thu, 10 Oct 2024 21:02:00 -0500 Subject: [PATCH 29/48] Type test passes --- spec/turn_spec.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 85a2d1599..a4c6baaa9 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -25,4 +25,46 @@ expect(turn.player1).to eq(player1) expect(turn.player2).to eq(player2) end + + it 'Creates a turn with player1 and player2' 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.spoils_of_war).to eq([]) + end + + it 'Creates a turn with player1 and player2' 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) + end end \ No newline at end of file From ad01bc9d5519d9642f0e8ed97928ba4156386bf4 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Fri, 11 Oct 2024 18:56:45 -0500 Subject: [PATCH 30/48] Basic turn almost passing --- lib/turn.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/turn.rb b/lib/turn.rb index 75820fe45..d8a580066 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -18,4 +18,24 @@ def type end end -end \ No newline at end of file + def winner + if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + @player1 + else + @player2 + end + end + + def pile_of_cards + @spoils_of_war.push(@player1.deck.cards[0], @player2.deck.cards[0]) + @player1.deck.cards.shift + @player2.deck.cards.shift + end + + def award_spoils(winner) + winner.deck.cards.concat(@spoils_of_war) if winner + @spoils_of_war.clear + end + +end + From edad5f0c5798076229805b25f4974bc24a6a2680 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Fri, 11 Oct 2024 18:57:21 -0500 Subject: [PATCH 31/48] Took out an empty line --- spec/deck_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 2d9e28a43..dceafccdf 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -74,6 +74,8 @@ deck.add_card(card4) expect(deck.cards).to eq([card2, card3, card4]) end + + end From 5777c9f647406bc092518aa50a21c50e5a5d9460 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Fri, 11 Oct 2024 18:57:34 -0500 Subject: [PATCH 32/48] All tests passing but last one --- spec/turn_spec.rb | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index a4c6baaa9..177f681a7 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -22,6 +22,7 @@ player2 = Player.new("Aurora", deck2) turn = Turn.new(player1, player2) + expect(turn.player1).to eq(player1) expect(turn.player2).to eq(player2) end @@ -44,6 +45,7 @@ turn = Turn.new(player1, player2) + expect(turn.spoils_of_war).to eq([]) end @@ -65,6 +67,78 @@ turn = Turn.new(player1, player2) + expect(turn.type).to eq(:basic) end + + it 'determines 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) + + expect(turn.winner).to eq(player1) + end + + it 'will send cards from players decks to spoils_of_war' 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.pile_of_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]) + end + + + it 'will add the cards from the @spoils_of_war array to the winner of the turns deck' 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.pile_of_cards + winner = turn.winner + turn.award_spoils(winner) + + expect(player1.deck).to eq([card2, card5, card8, card1, card3]) + expect(player2.deck).to eq([card4, card6, card7]) + end end \ No newline at end of file From 56609af5b252911be193fd58e0fb997a8b6316b9 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Fri, 11 Oct 2024 18:57:54 -0500 Subject: [PATCH 33/48] Took awawy empty spaces --- spec/deck_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index dceafccdf..2d9e28a43 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -74,8 +74,6 @@ deck.add_card(card4) expect(deck.cards).to eq([card2, card3, card4]) end - - end From f41834eb6310781727ce68c2c136a891f49ec6dc Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Sat, 12 Oct 2024 13:45:22 -0500 Subject: [PATCH 34/48] All tests created --- lib/turn.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index d8a580066..2791b45c4 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -13,15 +13,17 @@ def type :basic elsif @player2.deck.cards[0].rank > @player1.deck.cards[0].rank :basic + elsif (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) + :mutually_assured_destruction else - @spoils_of_war + :war end end def winner if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank @player1 - else + elsif @player2 end end @@ -33,8 +35,10 @@ def pile_of_cards end def award_spoils(winner) - winner.deck.cards.concat(@spoils_of_war) if winner - @spoils_of_war.clear + if winner + winner.deck.cards.concat(@spoils_of_war) + @spoils_of_war.clear + end end end From ecfe950d0adcb50cf7d21316fffabcab79be8e24 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Sat, 12 Oct 2024 13:45:34 -0500 Subject: [PATCH 35/48] Need to write the rest of my code --- spec/turn_spec.rb | 162 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 177f681a7..d912ab60b 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -141,4 +141,166 @@ expect(player1.deck).to eq([card2, card5, card8, card1, card3]) expect(player2.deck).to eq([card4, card6, card7]) end + + it "creates a turn of war" 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) + + expect(turn.type).to be(:war) + end + + it "determines the winner of the war turn 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([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + winner = turn.winner + expect(winner).to be(player2) + end + + it 'will add the cards from the @spoils_of_war array to the winner of the turn type wars deck' 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.pile_of_cards + + expect(turn.spoils_of_war).to eq([card1, card2, card5, card4, card3, card6]) + end + + it "aremoves cardds cars to winners deck and ds from losers deck after turn type war" 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.pile_of_cards + winner = turn.winner + turn.award_spoils(winner) + + expect(player1.deck).to eq([card8]) + expect(player2.deck).to eq([card7, card1, card2, card5, card4, card3, card6]) + end + + it "creates a turn of mutually assured destruction" 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) + + expect(turn.type).to eq(:mutually_assured_destruction) + end + + it "determines that there was no winner of the war" 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) + + turn.pile_of_cards + + expect(turn.winner).to eq("No Winner") + end + + it "adds cards to the spoils_of_war array and removes cards from both players decks " 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) + + turn.pile_of_cards + turn.spoils_of_war + + expect(turn.spoils_of_war).to eq([card1, card4, card2, card3, card5, card6]) + expect(player1.deck).to eq([card8]) + expect(player2.deck).to eq([card7]) + end end \ No newline at end of file From dccc5ac1b6d248d3c50205111d25000bc04cd500 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:26:33 -0500 Subject: [PATCH 36/48] Updated and organized tests --- spec/card_spec.rb | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/spec/card_spec.rb b/spec/card_spec.rb index 3272dfa56..e793e1bc0 100644 --- a/spec/card_spec.rb +++ b/spec/card_spec.rb @@ -15,19 +15,4 @@ expect(card.value).to eq('Queen') expect(card.rank).to eq(12) end - - it "exists" do - card = Card.new(:heart, 'Jack', 11) - - expect(card).to be_an_instance_of(Card) - end - - it "has readable attributes" do - card = Card.new(:heart, 'Jack', 11) - - expect(card.suit).to eq(:heart) - expect(card.value).to eq('Jack') - expect(card.rank).to eq(11) - end -end - +end \ No newline at end of file From 5ead88fb4501ba24cde4b7587e753a6cb6b1c253 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:26:49 -0500 Subject: [PATCH 37/48] Updated and organized tests --- spec/deck_spec.rb | 164 +++++++++++++++++++++++++++++----------------- 1 file changed, 104 insertions(+), 60 deletions(-) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 2d9e28a43..d9da834d9 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -3,76 +3,120 @@ require './lib/deck' RSpec.describe Deck 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] - - deck = Deck.new(cards) - expect(deck.cards).to eq([card1, card2, card3]) + 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] + + deck = Deck.new(cards) + expect(deck).to be_a(Deck) + end + + it 'has attributes' 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.cards).to eq([card1, card2, card3]) + end end - it 'returns rank of card at the specified index position' 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) - end - - it 'returns rank of card at the specified index position' 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(2)).to eq(14) + describe '#rank_of_card_at' do + it 'returns rank of card at the specified index position' 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) + expect(deck.cards).to eq([card1, card2, card3]) + end end - it 'returns an array of cards with rankings >= 11' 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.high_ranking_cards).to eq([card1, card3]) + describe '#high_ranking_cards' do + it 'returns an array of cards with rankings >= 11' 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.high_ranking_cards).to eq([card1, card3]) + deck.remove_card + expect(deck.high_ranking_cards).to eq([card3]) + end end - it 'returns a percentage of cards that are 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) - expect(deck.percent_high_ranking).to eq(66.67) + describe '#percent_high_ranking' do + it 'returns a percentage of cards that are 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) + expect(deck.percent_high_ranking).to eq(66.67) + end + + it 'updates the percentage when a card is removed' 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.percent_high_ranking).to eq(66.67) + deck.remove_card + expect(deck.percent_high_ranking).to eq(50.0) + end + + it 'updates the percentage when a card is added' do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + card4 = Card.new(:club, '5', 5) + cards = [card1, card2, card3] + + deck = Deck.new(cards) + expect(deck.percent_high_ranking).to eq(66.67) + deck.remove_card + expect(deck.percent_high_ranking).to eq(50.0) + deck.add_card(card4) + expect(deck.percent_high_ranking).to eq(33.33) + end end - it 'returns a card that is removed from the top of the deck' 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.remove_card).to eq(card1) + describe '#remove_card' do + it 'returns a card that is removed from the top of the deck' 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.remove_card).to eq(card1) + expect(deck.cards).to eq([card2, card3]) + end end - it 'returns a card that is added to the bottom of the deck' do - card1 = Card.new(:diamond, 'Queen', 12) - card2 = Card.new(:spade, '3', 3) - card3 = Card.new(:heart, 'Ace', 14) - card4 = Card.new(:club, '5', 5) - cards = [card2, card3] - - deck = Deck.new(cards) - deck.add_card(card4) - expect(deck.cards).to eq([card2, card3, card4]) + describe '#add_card' do + it 'adds a card to the bottom of the deck' do + card1 = Card.new(:diamond, 'Queen', 12) + card2 = Card.new(:spade, '3', 3) + card3 = Card.new(:heart, 'Ace', 14) + card4 = Card.new(:club, '5', 5) + cards = [card2, card3] + + deck = Deck.new(cards) + deck.add_card(card4) + expect(deck.cards).to eq([card2, card3, card4]) + end end end From 42eba462f3eab5003fda2eb9972c69a391b8a419 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:27:12 -0500 Subject: [PATCH 38/48] Updated and organized tests --- spec/player_spec.rb | 51 ++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/spec/player_spec.rb b/spec/player_spec.rb index 08b9f817f..847e617d0 100644 --- a/spec/player_spec.rb +++ b/spec/player_spec.rb @@ -4,24 +4,45 @@ require './lib/player' 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]) + describe "#initialize" 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) + player = Player.new('Clarisa', deck) + expect(player).to be_a(Player) + end + + it 'has attributes' 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 be_a(Deck) + end end - it 'determines if the player lost that roud' 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]) + describe "#has_lost?" do + it 'determines if the player lost that round' 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.has_lost?).to be(false) + player = Player.new('Clarisa', deck) + expect(player.has_lost?).to be(false) + player.deck.remove_card + expect(player.has_lost?).to be(false) + player.deck.remove_card + expect(player.has_lost?).to be(false) + player.deck.remove_card + expect(player.has_lost?).to be(true) + expect(player.deck.cards).to eq([]) + end end end \ No newline at end of file From d8116cd77dee2d7e7c850d276789de73d99eb248 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:27:37 -0500 Subject: [PATCH 39/48] fixed award_spoils method --- lib/turn.rb | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index 2791b45c4..0f34cc8b0 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -13,10 +13,11 @@ def type :basic elsif @player2.deck.cards[0].rank > @player1.deck.cards[0].rank :basic - elsif (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) - :mutually_assured_destruction - else + elsif (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) :war + else + (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) + :mutually_assured_destruction end end @@ -24,22 +25,34 @@ def winner if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank @player1 elsif + @player2.deck.cards[0].rank > @player1.deck.cards[0].rank @player2 + elsif + (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) + @spoils_of_war.push(@player1.deck.cards[0, 1], @player2.deck.cards[0, 1]) + @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + @player1 + elsif + (@player2.deck.cards[0].rank == @player1.deck.cards[0].rank) && (@player2.deck.cards.count >= 3) && (@player1.deck.cards.count >= 3) + @spoils_of_war.push(@player2.deck.cards[0, 1], @player1.deck.cards[0, 1]) + @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + @player2 + elsif + (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && + (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) + puts "No Winner" end end - def pile_of_cards + def pile_cards @spoils_of_war.push(@player1.deck.cards[0], @player2.deck.cards[0]) @player1.deck.cards.shift @player2.deck.cards.shift end def award_spoils(winner) - if winner - winner.deck.cards.concat(@spoils_of_war) - @spoils_of_war.clear - end + winner.deck.cards.concat(@spoils_of_war) + @spoils_of_war.clear end - end From 88315239828df8f1dce8c07d2068ca883bf4d998 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:27:53 -0500 Subject: [PATCH 40/48] Rewriting and fixing tests --- spec/turn_spec.rb | 442 ++++++++++++++++------------------------------ 1 file changed, 157 insertions(+), 285 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index d912ab60b..87ffdb22e 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -5,302 +5,174 @@ require './lib/turn' RSpec.describe Turn do - it 'Creates a turn with player1 and player2' 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.player1).to eq(player1) - expect(turn.player2).to eq(player2) + describe "#Initialize" 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) + + turn = Turn.new(player1, player2) + + expect(turn).to be_a(Turn) + end + + it "Has attributes" 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.spoils_of_war).to eq([]) + expect(turn.player1).to eq(player1) + expect(turn.player2).to eq(player2) + end end - it 'Creates a turn with player1 and player2' 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 "Basic Turn" do + describe "#type" do + it "creates a basic turn 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 be(:basic) + end + end + + describe "#winner" do + it "determines 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) + + expect(turn.winner).to eq(player1) + end + end - 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.spoils_of_war).to eq([]) - end - - it 'Creates a turn with player1 and player2' 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) - end - - it 'determines 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) - - expect(turn.winner).to eq(player1) - end - - it 'will send cards from players decks to spoils_of_war' 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.pile_of_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]) - end - - - it 'will add the cards from the @spoils_of_war array to the winner of the turns deck' 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.pile_of_cards - winner = turn.winner - turn.award_spoils(winner) - - expect(player1.deck).to eq([card2, card5, card8, card1, card3]) - expect(player2.deck).to eq([card4, card6, card7]) - end - - it "creates a turn of war" 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) - - expect(turn.type).to be(:war) - end - - it "determines the winner of the war turn 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([card4, card3, card6, card7]) - - player1 = Player.new("Megan", deck1) - player2 = Player.new("Aurora", deck2) - - turn = Turn.new(player1, player2) - - winner = turn.winner - expect(winner).to be(player2) - end - - it 'will add the cards from the @spoils_of_war array to the winner of the turn type wars deck' 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.pile_of_cards - - expect(turn.spoils_of_war).to eq([card1, card2, card5, card4, card3, card6]) - end - - it "aremoves cardds cars to winners deck and ds from losers deck after turn type war" 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.pile_of_cards - winner = turn.winner - turn.award_spoils(winner) - - expect(player1.deck).to eq([card8]) - expect(player2.deck).to eq([card7, card1, card2, card5, card4, card3, card6]) - end - - it "creates a turn of mutually assured destruction" 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) - - expect(turn.type).to eq(:mutually_assured_destruction) + describe "#pile_cards" do + it "adds cards to the spoils_of_war array" 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.pile_cards + + expect(turn.spoils_of_war).to eq([card1, card3]) + end + end end - it "determines that there was no winner of the war" 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) - - turn.pile_of_cards - - expect(turn.winner).to eq("No Winner") + describe "War Turn" do + describe "#type" do + it "creates a war turn 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([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + expect(turn.type).to be(:war) + end + end end - it "adds cards to the spoils_of_war array and removes cards from both players decks " 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) + describe "#award_spoils" do + it "Adds cards from spoils_of_war array to the winner of the turns deck" 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]) + deck1 = Deck.new([card1, card2, card5, card8]) + deck2 = Deck.new([card3, card4, 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) - turn.pile_of_cards - turn.spoils_of_war + winner = turn.winner + turn.award_spoils(winner) - expect(turn.spoils_of_war).to eq([card1, card4, card2, card3, card5, card6]) - expect(player1.deck).to eq([card8]) - expect(player2.deck).to eq([card7]) + expect(player1.deck).to eq([card2, card5, card8, card1, card3]) + expect(player2.deck).to eq([card4, card6, card7]) + end end end \ No newline at end of file From bc7dc4e7183c2c1ab3bc64d51b6dfb1b06bf70a9 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 17:29:56 -0500 Subject: [PATCH 41/48] Added extra test to high_ranking_cards --- spec/deck_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index d9da834d9..c71b4b016 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -46,6 +46,16 @@ card3 = Card.new(:heart, 'Ace', 14) cards = [card1, card2, card3] + deck = Deck.new(cards) + expect(deck.high_ranking_cards).to eq([card1, card3]) + end + + it 'updates the array when a card is removed' 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.high_ranking_cards).to eq([card1, card3]) deck.remove_card From d5d0e1b949828da54dddec71c2f463438c2a81ca Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 19:12:37 -0500 Subject: [PATCH 42/48] All tests written --- lib/turn.rb | 2 +- spec/turn_spec.rb | 217 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 185 insertions(+), 34 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index 0f34cc8b0..b47ab0cbf 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -40,7 +40,7 @@ def winner elsif (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) - puts "No Winner" + "No Winner" end end diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 87ffdb22e..7fc2ead70 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -5,8 +5,8 @@ require './lib/turn' RSpec.describe Turn do - describe "#Initialize" do - it "exists" do + describe '#Initialize' do + it 'exists' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) card3 = Card.new(:heart, '9', 9) @@ -27,7 +27,7 @@ expect(turn).to be_a(Turn) end - it "Has attributes" do + it 'Has attributes' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) card3 = Card.new(:heart, '9', 9) @@ -50,9 +50,9 @@ expect(turn.player2).to eq(player2) end end - - describe "Basic Turn" do - describe "#type" do + ############################################################################################################## + describe 'Basic Turn' do + describe '#type' do it "creates a basic turn type" do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) @@ -75,8 +75,8 @@ end end - describe "#winner" do - it "determines the winner of the turn" do + describe '#winner' do + it 'determines the winner of the basic turn type' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) card3 = Card.new(:heart, '9', 9) @@ -98,8 +98,8 @@ end end - describe "#pile_cards" do - it "adds cards to the spoils_of_war array" do + describe '#pile_cards' do + it 'adds cards to the spoils_of_war array for the basic turn type' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) card3 = Card.new(:heart, '9', 9) @@ -122,10 +122,37 @@ expect(turn.spoils_of_war).to eq([card1, card3]) end end - end - describe "War Turn" do - describe "#type" do + describe '#award_spoils' do + it 'Adds cards from spoils_of_war array to the winner of the basic turn type deck' 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 + turn.award_spoils(winner) + + expect(player1.deck).to eq([card2, card5, card8, card1, card3]) + expect(player2.deck).to eq([card4, card6, card7]) + end + end + end + ############################################################################################################## + describe 'War Turn' do + describe '#type' do it "creates a war turn type" do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) @@ -147,32 +174,156 @@ expect(turn.type).to be(:war) end end + + describe '#winner' do + it 'determines the winner of the war turn 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([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + expect(turn.winner).to eq(player2) + end + end + + describe '#pile_cards'do + it 'adds cards to the spoils_of_war array for the war turn 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([card4, card3, card6, card7]) + + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) + + turn = Turn.new(player1, player2) + + turn.pile_cards + + expect(turn.spoils_of_war).to eq([card1, card2, card5, card4, card3, card6]) + end + end + + describe '#award_spoils' do + it 'Adds cards from spoils_of_war array to the winner of the war turn type deck' 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) + + winner = turn.winner + turn.award_spoils(winner) + + expect(player1.deck).to eq([card8]) + expect(player2.deck).to eq([card7, card1, card2, card5, card4, card3, card6]) + end + end end + ############################################################################################################## + describe 'Mutually_Assured_Destruction Turn' do + describe '#type' do + it 'creates a mutually_assured_destruction turn 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, '8', 8) + card7 = Card.new(:heart, '3', 3) + card8 = Card.new(:diamond, '2', 2) - describe "#award_spoils" do - it "Adds cards from spoils_of_war array to the winner of the turns deck" 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]) - deck1 = Deck.new([card1, card2, card5, card8]) - deck2 = Deck.new([card3, card4, 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) + expect(turn.type).to be(:mutually_assured_destruction) + end + end + + describe '#winner' do + it 'determines the winner of the mutually_assured_destruction turn 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, '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]) - winner = turn.winner - turn.award_spoils(winner) + player1 = Player.new("Megan", deck1) + player2 = Player.new("Aurora", deck2) - expect(player1.deck).to eq([card2, card5, card8, card1, card3]) - expect(player2.deck).to eq([card4, card6, card7]) + turn = Turn.new(player1, player2) + + expect(turn.winner).to eq("No Winner") + end + end + + describe '#pile_cards' do + it 'deletes first three cards from each players deck when there is no winner' 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) + + turn.pile_cards + + expect(turn.spoils_of_war).to eq([]) + expect(player1.deck).to eq([card8]) + expect(player2.deck).to eq([card7]) + end end end -end \ No newline at end of file +end + From 49bdc8d06f8dd1147bc2544e1395a1157387972f Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 21:32:19 -0500 Subject: [PATCH 43/48] Updated add_card method --- lib/deck.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/deck.rb b/lib/deck.rb index 62ee82e65..c9764a4e4 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -28,7 +28,7 @@ def remove_card @cards.shift end - def add_card(card4) - @cards.append(card4) + def add_card(card) + @cards.append(card) end end \ No newline at end of file From 747e2c8a5c626a9e222c18318458014cd1e9c9eb Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 21:32:43 -0500 Subject: [PATCH 44/48] All tests passing --- lib/turn.rb | 55 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/lib/turn.rb b/lib/turn.rb index b47ab0cbf..3142fbc18 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -9,45 +9,58 @@ def initialize(player1, player2) end def type - if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank - :basic - elsif @player2.deck.cards[0].rank > @player1.deck.cards[0].rank - :basic - elsif (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) + if (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && + (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) + :mutually_assured_destruction + elsif + (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) + (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) :war + elsif + @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + :basic else - (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) - :mutually_assured_destruction + @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + :basic end end def winner - if @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + if (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && + (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) + "No Winner" + elsif + @player1.deck.cards[0].rank == @player2.deck.cards[0].rank && + @player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 && + @player1.deck.cards[2].rank > @player2.deck.cards[2].rank @player1 elsif - @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + @player1.deck.cards[0].rank == @player2.deck.cards[0].rank && + @player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 && + @player2.deck.cards[2].rank > @player1.deck.cards[2].rank @player2 elsif - (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) - @spoils_of_war.push(@player1.deck.cards[0, 1], @player2.deck.cards[0, 1]) @player1.deck.cards[0].rank > @player2.deck.cards[0].rank @player1 - elsif - (@player2.deck.cards[0].rank == @player1.deck.cards[0].rank) && (@player2.deck.cards.count >= 3) && (@player1.deck.cards.count >= 3) - @spoils_of_war.push(@player2.deck.cards[0, 1], @player1.deck.cards[0, 1]) + else @player2.deck.cards[0].rank > @player1.deck.cards[0].rank @player2 - elsif - (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && - (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) - "No Winner" end end def pile_cards - @spoils_of_war.push(@player1.deck.cards[0], @player2.deck.cards[0]) - @player1.deck.cards.shift - @player2.deck.cards.shift + if type == :mutually_assured_destruction + @spoils_of_war.concat(@player1.deck.cards.shift(3)) + @spoils_of_war.concat(@player2.deck.cards.shift(3)) + @spoils_of_war.clear + elsif + type == :war + @spoils_of_war.concat(@player1.deck.cards.shift(3)) + @spoils_of_war.concat(@player2.deck.cards.shift(3)) + else type == :basic + @spoils_of_war.concat(@player1.deck.cards.shift(1)) + @spoils_of_war.concat(@player2.deck.cards.shift(1)) + end end def award_spoils(winner) From 42fd20321007c0b78aeb53dda3b432f5f40c3a50 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 21:32:51 -0500 Subject: [PATCH 45/48] All tests passing --- spec/turn_spec.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 7fc2ead70..da2906156 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -143,10 +143,12 @@ turn = Turn.new(player1, player2) winner = turn.winner + turn.pile_cards turn.award_spoils(winner) - expect(player1.deck).to eq([card2, card5, card8, card1, card3]) - expect(player2.deck).to eq([card4, card6, card7]) + expect(player1.deck.cards).to eq([card2, card5, card8, card1, card3]) + expect(player2.deck.cards).to eq([card4, card6, card7]) + expect(turn.spoils_of_war).to eq([]) end end end @@ -194,6 +196,7 @@ turn = Turn.new(player1, player2) + expect(turn.type).to be(:war) expect(turn.winner).to eq(player2) end end @@ -243,10 +246,11 @@ turn = Turn.new(player1, player2) winner = turn.winner + turn.pile_cards turn.award_spoils(winner) - expect(player1.deck).to eq([card8]) - expect(player2.deck).to eq([card7, card1, card2, card5, card4, card3, card6]) + expect(player1.deck.cards).to eq([card8]) + expect(player2.deck.cards).to eq([card7, card1, card2, card5, card4, card3, card6]) end end end @@ -320,8 +324,8 @@ turn.pile_cards expect(turn.spoils_of_war).to eq([]) - 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 From a5969533c09c9048c76be973988b62d87ef1f583 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Mon, 14 Oct 2024 21:44:27 -0500 Subject: [PATCH 46/48] Removed # from in between turn types --- spec/turn_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index da2906156..9209b47c6 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -50,7 +50,7 @@ expect(turn.player2).to eq(player2) end end - ############################################################################################################## + describe 'Basic Turn' do describe '#type' do it "creates a basic turn type" do @@ -152,7 +152,7 @@ end end end - ############################################################################################################## + describe 'War Turn' do describe '#type' do it "creates a war turn type" do @@ -254,7 +254,7 @@ end end end - ############################################################################################################## + describe 'Mutually_Assured_Destruction Turn' do describe '#type' do it 'creates a mutually_assured_destruction turn type' do From b863b82290bb32a5df502c04bc58daa5b95892f6 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 15 Oct 2024 13:06:16 -0500 Subject: [PATCH 47/48] Created 52 cards --- war_or_peace_runner.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 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..aa7d04d50 --- /dev/null +++ b/war_or_peace_runner.rb @@ -0,0 +1,23 @@ +require './lib/card' + +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 + +p all_cards \ No newline at end of file From 928f6466a048f7a102408a73dcc96f114d98c2b6 Mon Sep 17 00:00:00 2001 From: Jono Sommers Date: Tue, 15 Oct 2024 18:59:32 -0500 Subject: [PATCH 48/48] Turning in project --- lib/deck.rb | 1 + lib/game.rb | 38 +++++++++++++++++++++++++++++ lib/turn.rb | 36 +++++++++++++++------------ spec/turn_spec.rb | 4 +-- war_or_peace_runner.rb | 55 ++++++++++++++++++++++++++++++------------ 5 files changed, 102 insertions(+), 32 deletions(-) create mode 100644 lib/game.rb diff --git a/lib/deck.rb b/lib/deck.rb index c9764a4e4..d1fbef7d4 100644 --- a/lib/deck.rb +++ b/lib/deck.rb @@ -8,6 +8,7 @@ def initialize(cards) end def rank_of_card_at(index) + @cards[index].rank end diff --git a/lib/game.rb b/lib/game.rb new file mode 100644 index 000000000..7c24e624c --- /dev/null +++ b/lib/game.rb @@ -0,0 +1,38 @@ +class Game + attr_reader :player1, :player2, :turn + + def initialize(player1, player2, turn) + @player1 = player1 + @player2 = player2 + @turn = turn + @turn_count = 0 + end + + def start + until @player1.has_lost? == true || @player2.has_lost? == true || @turn_count == 1000000 + #@turn = Turn.new(player1, player2) + @turn.type + @turn.winner + @turn.pile_cards + @turn.spoils_of_war + puts "Turn #{@turn_count} #{@turn.type} #{@turn.winner_name}." + @turn_count += 1 + end + has_won? + end + + def has_won? + if (@player1.deck.cards.count >= 3) && + (@player2.deck.cards.count < 3) + @player1.has_won == true + puts "Player1 Wins!" + elsif + (@player2.deck.cards.count >= 3) && + (@player1.deck.cards.count < 3) + @player2.has_won == true + puts "Player2 Wins!" + else + puts 'DRAW' + end + end +end \ No newline at end of file diff --git a/lib/turn.rb b/lib/turn.rb index 3142fbc18..6971d7397 100644 --- a/lib/turn.rb +++ b/lib/turn.rb @@ -1,49 +1,54 @@ class Turn - attr_reader :player1, :player2, :spoils_of_war + attr_reader :player1, :player2, :spoils_of_war, :winner_name def initialize(player1, player2) @player1 = player1 @player2 = player2 @spoils_of_war = [] + @winner_name = "Winner" end def type - if (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && - (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) + 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.cards[0].rank == @player2.deck.cards[0].rank) - (@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3) + @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) + @player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 :war elsif - @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + @player2.deck.rank_of_card_at(0) > @player1.deck.rank_of_card_at(0) :basic else - @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) :basic end end def winner - if (@player1.deck.cards[0].rank == @player2.deck.cards[0].rank) && - (@player1.deck.cards[2].rank == @player2.deck.cards[2].rank) + 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) "No Winner" elsif - @player1.deck.cards[0].rank == @player2.deck.cards[0].rank && + @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 && - @player1.deck.cards[2].rank > @player2.deck.cards[2].rank + @player1.deck.rank_of_card_at(2) > @player2.deck.rank_of_card_at(2) + @winner_name = @player1.name @player1 elsif - @player1.deck.cards[0].rank == @player2.deck.cards[0].rank && + @player1.deck.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) && @player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 && - @player2.deck.cards[2].rank > @player1.deck.cards[2].rank + @player2.deck.rank_of_card_at(2) > @player1.deck.rank_of_card_at(2) + @winner_name = @player2.name @player2 elsif - @player1.deck.cards[0].rank > @player2.deck.cards[0].rank + @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0) + @winner_name = @player1.name @player1 else - @player2.deck.cards[0].rank > @player1.deck.cards[0].rank + @player2.deck.rank_of_card_at(0) > @player1.deck.rank_of_card_at(0) + @winner_name = @player2.name @player2 end end @@ -64,6 +69,7 @@ def pile_cards end def award_spoils(winner) + # @spoils_of_war.shuffle! winner.deck.cards.concat(@spoils_of_war) @spoils_of_war.clear end diff --git a/spec/turn_spec.rb b/spec/turn_spec.rb index 9209b47c6..87a045861 100644 --- a/spec/turn_spec.rb +++ b/spec/turn_spec.rb @@ -5,7 +5,7 @@ require './lib/turn' RSpec.describe Turn do - describe '#Initialize' do + describe '#initialize' do it 'exists' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) @@ -27,7 +27,7 @@ expect(turn).to be_a(Turn) end - it 'Has attributes' do + it 'has attributes' do card1 = Card.new(:heart, 'Jack', 11) card2 = Card.new(:heart, '10', 10) card3 = Card.new(:heart, '9', 9) diff --git a/war_or_peace_runner.rb b/war_or_peace_runner.rb index aa7d04d50..f636af73e 100644 --- a/war_or_peace_runner.rb +++ b/war_or_peace_runner.rb @@ -1,23 +1,48 @@ +require 'rspec' require './lib/card' +require './lib/deck' +require './lib/player' +require './lib/turn' +require './lib/game' + suits = [:heart, :diamond, :spade, :club] -all_cards = [] +deck_of_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) + deck_of_all_cards << Card.new(suit, "2", 2) + deck_of_all_cards << Card.new(suit, "3", 3) + deck_of_all_cards << Card.new(suit, "4", 4) + deck_of_all_cards << Card.new(suit, "5", 5) + deck_of_all_cards << Card.new(suit, "6", 6) + deck_of_all_cards << Card.new(suit, "7", 7) + deck_of_all_cards << Card.new(suit, "8", 8) + deck_of_all_cards << Card.new(suit, "9", 9) + deck_of_all_cards << Card.new(suit, "10", 10) + deck_of_all_cards << Card.new(suit, "Jack", 11) + deck_of_all_cards << Card.new(suit, "Queen", 12) + deck_of_all_cards << Card.new(suit, "King", 13) + deck_of_all_cards << Card.new(suit, "Ace", 14) + deck_of_all_cards.shuffle! end -p all_cards \ No newline at end of file +deck1 = Deck.new(deck_of_all_cards.shift(26)) +deck2 = Deck.new(deck_of_all_cards.shift(26)) + +player1 = Player.new('Megan', deck1) +player2 = Player.new('Aurora', deck2) + +turn = Turn.new(player1, player2) +game = Game.new(player1, player2, turn) + + + +p "Welcome to War! (or Peace) This game will be played with 52 cards." +p "The players today are Megan and Aurora." +p "Type 'GO' to start the game!" +p "------------------------------------------------------------------" + +if gets.chomp == "GO" + game.start +end