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

Jono Sommers #410

Open
wants to merge 48 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
6f6900d
add class file
JonoSommers Oct 8, 2024
12abbe8
First card test passes
JonoSommers Oct 8, 2024
4321125
Initial commit
JonoSommers Oct 8, 2024
9363c5e
Initial commit
JonoSommers Oct 8, 2024
fb2a656
Test failing, add_cards method created
JonoSommers Oct 8, 2024
92af98a
Test failing, add_cards method created
JonoSommers Oct 8, 2024
8afb284
Backtracking
JonoSommers Oct 9, 2024
ed3941e
Backtracking
JonoSommers Oct 9, 2024
47f0e12
First two tests pass
JonoSommers Oct 10, 2024
207c905
First two tests pass
JonoSommers Oct 10, 2024
cf4424a
Working on high_ranking_cards method
JonoSommers Oct 10, 2024
1e0b275
Working on high_ranking_cards test
JonoSommers Oct 10, 2024
7b3f0ef
percent high ranking test passes
JonoSommers Oct 10, 2024
f53a88f
updated with project info
JonoSommers Oct 10, 2024
cbeab09
percent high ranking method works
JonoSommers Oct 10, 2024
91772bf
Finished iteration 1
JonoSommers Oct 10, 2024
7edaf78
Finished iteration 1
JonoSommers Oct 10, 2024
58b47d2
Finished iteration one (removed pry from test)
JonoSommers Oct 10, 2024
01b513d
Finished iteration 1
JonoSommers Oct 11, 2024
a6e8deb
Finished iteration 1
JonoSommers Oct 11, 2024
09fda54
Initial commit
JonoSommers Oct 11, 2024
12b8ef4
Initial commit
JonoSommers Oct 11, 2024
532802c
All tests passing in player class
JonoSommers Oct 11, 2024
42bfdbe
All tests passing in player spec
JonoSommers Oct 11, 2024
b5f2bf3
All tests passing (removed pry)
JonoSommers Oct 11, 2024
a3e0fb7
Initial commit / test one passing
JonoSommers Oct 11, 2024
8009d98
Initial commit / test one passing
JonoSommers Oct 11, 2024
7f7629e
Type test passes
JonoSommers Oct 11, 2024
b28636b
Type test passes
JonoSommers Oct 11, 2024
ad01bc9
Basic turn almost passing
JonoSommers Oct 11, 2024
edad5f0
Took out an empty line
JonoSommers Oct 11, 2024
5777c9f
All tests passing but last one
JonoSommers Oct 11, 2024
56609af
Took awawy empty spaces
JonoSommers Oct 11, 2024
f41834e
All tests created
JonoSommers Oct 12, 2024
ecfe950
Need to write the rest of my code
JonoSommers Oct 12, 2024
dccc5ac
Updated and organized tests
JonoSommers Oct 14, 2024
5ead88f
Updated and organized tests
JonoSommers Oct 14, 2024
42eba46
Updated and organized tests
JonoSommers Oct 14, 2024
d8116cd
fixed award_spoils method
JonoSommers Oct 14, 2024
8831523
Rewriting and fixing tests
JonoSommers Oct 14, 2024
bc7dc4e
Added extra test to high_ranking_cards
JonoSommers Oct 14, 2024
d5d0e1b
All tests written
JonoSommers Oct 15, 2024
49bdc8d
Updated add_card method
JonoSommers Oct 15, 2024
747e2c8
All tests passing
JonoSommers Oct 15, 2024
42fd203
All tests passing
JonoSommers Oct 15, 2024
a596953
Removed # from in between turn types
JonoSommers Oct 15, 2024
b863b82
Created 52 cards
JonoSommers Oct 15, 2024
928f646
Turning in project
JonoSommers Oct 15, 2024
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
13 changes: 13 additions & 0 deletions lib/card.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Card

attr_reader :rank,
:suit,
:value

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

end
35 changes: 35 additions & 0 deletions lib/deck.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class Deck

attr_reader :cards

def initialize(cards)
@cards = cards

end

def rank_of_card_at(index)

@cards[index].rank
end

def high_ranking_cards
@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

def remove_card
@cards.shift
end

def add_card(card)
@cards.append(card)
end
end
38 changes: 38 additions & 0 deletions lib/game.rb
Original file line number Diff line number Diff line change
@@ -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
14 changes: 14 additions & 0 deletions lib/player.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Player

attr_reader :name, :deck

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

def has_lost?
@deck.cards.empty?
end

end
77 changes: 77 additions & 0 deletions lib/turn.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
class Turn

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.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)
@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3
:war
elsif
@player2.deck.rank_of_card_at(0) > @player1.deck.rank_of_card_at(0)
:basic
else
@player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0)
:basic
end
end

def winner
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.rank_of_card_at(0) == @player2.deck.rank_of_card_at(0) &&
@player1.deck.cards.count >= 3 && @player2.deck.cards.count >= 3 &&
@player1.deck.rank_of_card_at(2) > @player2.deck.rank_of_card_at(2)
@winner_name = @player1.name
@player1
elsif
@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.rank_of_card_at(2) > @player1.deck.rank_of_card_at(2)
@winner_name = @player2.name
@player2
elsif
@player1.deck.rank_of_card_at(0) > @player2.deck.rank_of_card_at(0)
@winner_name = @player1.name
@player1
else
@player2.deck.rank_of_card_at(0) > @player1.deck.rank_of_card_at(0)
@winner_name = @player2.name
@player2
end
end

def pile_cards
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)
# @spoils_of_war.shuffle!
winner.deck.cards.concat(@spoils_of_war)
@spoils_of_war.clear
end
end

2 changes: 1 addition & 1 deletion spec/card_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
expect(card.value).to eq('Queen')
expect(card.rank).to eq(12)
end
end
end
136 changes: 136 additions & 0 deletions spec/deck_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
require 'rspec'
require './lib/card'
require './lib/deck'

RSpec.describe Deck do
describe "#initialize" do
it 'exists' do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:spade, '3', 3)
card3 = Card.new(:heart, 'Ace', 14)
cards = [card1, card2, card3]

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

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

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])
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
expect(deck.high_ranking_cards).to eq([card3])
end
end

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

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

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





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

RSpec.describe Player do
describe "#initialize" do
it "exists" do
card1 = Card.new(:diamond, 'Queen', 12)
card2 = Card.new(:spade, '3', 3)
card3 = Card.new(:heart, 'Ace', 14)
deck = Deck.new([card1, card2, card3])

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

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.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
Loading