Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jackson Bickler #409

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions lib/card.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

class Card
attr_reader :suit, :value, :rank

def initialize(suit, value, rank)
@suit = suit
@value = value
@rank = rank
end
end

40 changes: 40 additions & 0 deletions lib/deck.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
require './lib/card'

class Deck
attr_reader :cards

def initialize(cards)
@cards = cards
end

def rank_of_card_at(index) #index location of card to be used
@index = cards[index].rank
end

def high_ranking_cards #return array of cards ranked <=11
cards.find_all do |card|
card.rank >= 11
end
end

def percent_high_ranking #percentage of high ranking cards
cards_total = cards.length.to_f
high_ranking_total = high_ranking_cards.length.to_f

percentage = (high_ranking_total / cards_total) * 100
percentage

end

def remove_card #remove top card of the deck
cards.shift do |card|

end
end

def add_card(card) #will add a card to the bottom
cards.push(card) do |card|

end
end
end
11 changes: 11 additions & 0 deletions lib/game.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'rspec'
require './lib/card'
require './lib/deck'
require './lib/player'
require './lib/turn'
require 'pry'

Class Game
def start

end
19 changes: 19 additions & 0 deletions lib/player.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
require './lib/card'
require './lib/deck'

class Player
attr_reader :name, :deck

def initialize(name, deck)
@name = name
@deck = deck
end

def has_lost?
if deck.cards.length == 0
true
else
false
end
end
end
82 changes: 82 additions & 0 deletions lib/turn.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
require './lib/card'
require './lib/deck'
require './lib/player'
require 'pry'

class Turn
attr_reader :player1, :player2, :spoils_of_war

def initialize(player1, player2)
@player1 = player1
@player2 = 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)
:war
elsif @player1.deck.rank_of_card_at(0) != @player2.deck.rank_of_card_at(0)
:basic
else
"crash"
end
end

def winner
if type == :basic
if @player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0)
return @player1.name
elsif @player2.deck.rank_of_card_at(0) > @player1.deck.rank_of_card_at(0)
return @player2.name
end
end
if type == :war
if @player1.deck.rank_of_card_at(2) > @player2.deck.rank_of_card_at(2)
return @player1.name
elsif @player1.deck.rank_of_card_at(2) < @player2.deck.rank_of_card_at(2)
return @player2.name
end
end
if type == :mutually_assured_destruction
:No_Winner
end
end

def pile_cards
@spoils_of_war = []

if type == :war
@spoils_of_war << @player1.deck.cards.delete_at(2)
@spoils_of_war << @player2.deck.cards.delete_at(2)
@spoils_of_war << @player1.deck.cards.delete_at(1)
@spoils_of_war << @player2.deck.cards.delete_at(1)
@spoils_of_war << @player1.deck.cards.delete_at(0)
@spoils_of_war << @player2.deck.cards.delete_at(0)
print @spoils_of_war
elsif type == :basic
@spoils_of_war << @player1.deck.cards.delete_at(0)
@spoils_of_war << @player2.deck.cards.delete_at(0)
#binding.pry
print @spoils_of_war
elsif type == :mutually_assured_destruction
@player1.deck.cards[2].pop
@player2.deck.cards[2].pop
@player1.deck.cards[1].pop
@player2.deck.cards[1].pop
@player1.deck.cards[0].pop
@player2.deck.cards[0].pop
end
@spoils_of_war
end

def award_spoils(turn_winner)
#require "pry"; binding.pry

if turn_winner == @player1.name
@player1.deck.cards.concat(@spoils_of_war).flatten
elsif turn_winner == @player2.name
@player2.deck.cards.concat(@spoils_of_war).flatten
end
end
end
2 changes: 1 addition & 1 deletion spec/card_spec.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
require 'rspec'
require './lib/card'
require './lib/card.rb'

RSpec.describe Card do
it "exists" do
Expand Down
109 changes: 109 additions & 0 deletions spec/deck_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
require 'rspec'
require './lib/card'
require './lib/deck'

RSpec.describe Deck do
describe "initialize" do
it "exits" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3]
deck = Deck.new(cards)

expect(deck).to be_an_instance_of(Deck)
end
end

describe "attributes" do
it "has cards" do

card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3]
deck = Deck.new(cards)

expect(deck.cards).to eq(cards)
expect(deck.cards).to be_an(Array)
end
end
describe "methods" do
describe "rank_of_card_at" do
it "returns rank of card at certain index" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3]
deck = Deck.new(cards)

expect(deck.rank_of_card_at(1)).to be_an(Integer)
expect(deck.rank_of_card_at(1)).to eq(9)
expect(deck.rank_of_card_at(2)).to be_an(Integer)
expect(deck.rank_of_card_at(2)).to eq(4)
expect(deck.rank_of_card_at(4)).to eq("No card in position. Please enter valid index")
end
end
describe "high_ranking_card_at" do
it "will return an array of cards in the deck that have a rank of 11 or above" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
card4 = Card.new(:spade, 'King', 13)
cards = [card1, card2, card3, card4]
deck = Deck.new(cards)

expect(deck.high_ranking_cards).to be_an(Array)
expect(deck.high_ranking_cards).to eq([card1, card4])

end
end
describe "percent_high_ranking" do
it "returns a percentage of high ranking cards in deck" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
card4 = Card.new(:spade, 'King', 13)
cards = [card1, card2, card3, card4]
deck = Deck.new(cards)

expect(deck.percent_high_ranking).to be_a(Float)
expect(deck.percent_high_ranking).to eq(50.00)

end
end
describe "remove_card" do
it "removes a card from the top of the deck" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
card4 = Card.new(:spade, 'King', 13)
cards = [card1, card2, card3, card4]
deck = Deck.new(cards)


expect(deck.remove_card).to eq(card4)
end
end
describe "add_card" do
it "adds a new card to the deck" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3,]
card4 = Card.new(:spade, 'King', 13)
deck = Deck.new(cards)

expect(deck.add_card(card4)).to eq([card1, card2, card3, card4,])
expect(deck.add_card(card4)).to be_an(Array)

end
end


end




end
51 changes: 51 additions & 0 deletions spec/player_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
require 'rspec'
require './lib/card'
require './lib/deck'
require './lib/player'

RSpec.describe Player do
describe "initialize" do
it "exits and has an name and deck" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3]
deck = Deck.new(cards)
player1 = Player.new('Jackson', deck)

expect(player1).to be_a(Player)
end
end
describe "attributes" do
it "has a name and deck" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards = [card1, card2, card3]
deck = Deck.new(cards)
player1 = Player.new('Jackson', deck)
player2 = Player.new('Kate', deck)

expect(player1.name).to be_a(String)
expect(player1.name).to eq('Jackson')
expect(player2.name).to eq('Kate')
expect(player2.deck).to be_an(Deck)
end
end
describe "has_lost?" do
it "puts if player has lost or not" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:hearts, '9', 9)
card3 = Card.new(:diamond, '4', 4)
cards1 = [card1, card2, card3]
cards2 = []
deck1 = Deck.new(cards1)
deck2 = Deck.new(cards2)
player1 = Player.new('Jackson', deck1)
player2 = Player.new('Kate', deck2)

expect(player1.has_lost?).to eq(false)
expect(player2.has_lost?).to eq(true)
end
end
end
Loading