Implement bombs
This commit is contained in:
parent
2a5504a982
commit
1b86aade85
@ -8,7 +8,7 @@ TODO
|
|||||||
|
|
||||||
- Remove PlayToBeat model and table.
|
- Remove PlayToBeat model and table.
|
||||||
|
|
||||||
- Test `play_hand` of run including face cards
|
- Implement run including face cards
|
||||||
|
|
||||||
- BUG TODO: First player / lowest card holder should not be able to pass
|
- BUG TODO: First player / lowest card holder should not be able to pass
|
||||||
first play
|
first play
|
||||||
|
|||||||
@ -33,6 +33,7 @@ class Play < ActiveRecord::Base
|
|||||||
# Validation methods
|
# Validation methods
|
||||||
|
|
||||||
def hand_valid?
|
def hand_valid?
|
||||||
|
return false if self.hand_type == nil
|
||||||
# Gather the truths about the hand
|
# Gather the truths about the hand
|
||||||
@truths = []
|
@truths = []
|
||||||
|
|
||||||
@ -42,6 +43,11 @@ class Play < ActiveRecord::Base
|
|||||||
if game.try(:hand_to_beat)
|
if game.try(:hand_to_beat)
|
||||||
# current player is not the player to beat
|
# current player is not the player to beat
|
||||||
if (game.player_to_beat != player)
|
if (game.player_to_beat != player)
|
||||||
|
# valid bomb?
|
||||||
|
if (self.hand_type == 'bomb' && game.play_to_beat.try("play").try("hand_type") == 'single' && game.play_to_beat.try("play").try("player_cards")[0].try('rank') == '2')
|
||||||
|
@truths << true
|
||||||
|
return @truths
|
||||||
|
end
|
||||||
# hand_type match?
|
# hand_type match?
|
||||||
@truths << (self.hand_type == game.play_to_beat.try("play").try("hand_type")) if game.play_to_beat.try("play").try(:hand_type)
|
@truths << (self.hand_type == game.play_to_beat.try("play").try("hand_type")) if game.play_to_beat.try("play").try(:hand_type)
|
||||||
# beats?
|
# beats?
|
||||||
@ -86,6 +92,8 @@ class Play < ActiveRecord::Base
|
|||||||
# TODO: Recognize face cards
|
# TODO: Recognize face cards
|
||||||
def hand_type
|
def hand_type
|
||||||
case self.player_cards.length
|
case self.player_cards.length
|
||||||
|
when 0
|
||||||
|
@hand_type = 'empty'
|
||||||
when 1
|
when 1
|
||||||
@hand_type = 'single'
|
@hand_type = 'single'
|
||||||
when 2
|
when 2
|
||||||
|
|||||||
@ -287,15 +287,68 @@ RSpec.describe Play, type: :model do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'when four cards are played' do
|
context 'when four cards are played' do
|
||||||
it 'valid bomb' do
|
it 'valid bomb against a 2' do
|
||||||
@spade3 = PlayerCard.new(rank: "3", suit: "Spade")
|
@heart2 = PlayerCard.new(rank: '2', suit: 'Heart', value: 52, player_id: @game.next_player_id)
|
||||||
@club3 = PlayerCard.new(rank: "3", suit: "Club")
|
@play_to_beat = Play.new(game_id: @game.id, player_id: @game.controlling_player_id, player_cards: [@heart2])
|
||||||
@diamond3 = PlayerCard.new(rank: "3", suit: "Diamond")
|
@play_to_beat.save
|
||||||
@heart3 = PlayerCard.new(rank: "3", suit: "Heart")
|
@game.play_to_beat_id = @play_to_beat.id
|
||||||
|
@spade3 = PlayerCard.new(value: 1, rank: "3", suit: "Spade")
|
||||||
|
@club3 = PlayerCard.new(value: 2, rank: "3", suit: "Club")
|
||||||
|
@diamond3 = PlayerCard.new(value: 3, rank: "3", suit: "Diamond")
|
||||||
|
@heart3 = PlayerCard.new(value: 4, rank: "3", suit: "Heart")
|
||||||
@cards_to_play = [@spade3, @club3, @diamond3, @heart3]
|
@cards_to_play = [@spade3, @club3, @diamond3, @heart3]
|
||||||
@play.player_cards << @cards_to_play
|
@play.player_cards << @cards_to_play
|
||||||
expect(@play.hand_type).to eq('bomb')
|
expect(@play.hand_type).to eq('bomb')
|
||||||
|
expect(@play.valid?).to eq(true)
|
||||||
end
|
end
|
||||||
|
it 'valid bomb against a lesser bomb' do
|
||||||
|
# Setup the play to beat
|
||||||
|
@spade3 = PlayerCard.new(rank: "3", suit: "Spade", value: 1)
|
||||||
|
@club3 = PlayerCard.new(rank: "3", suit: "Club", value: 2)
|
||||||
|
@diamond3 = PlayerCard.new(rank: "3", suit: "Diamond", value: 3)
|
||||||
|
@heart3 = PlayerCard.new(rank: "3", suit: "Heart", value: 4)
|
||||||
|
@cards_to_beat = [@spade3, @club3, @diamond3, @heart3]
|
||||||
|
@play_to_beat = Play.new(game_id: @game.id, player_id: @game.controlling_player_id, player_cards: @cards_to_beat)
|
||||||
|
@play_to_beat.save
|
||||||
|
@game.play_to_beat_id = @play_to_beat.id
|
||||||
|
|
||||||
|
# Setup the play
|
||||||
|
@spade4 = PlayerCard.new(rank: "4", suit: "Spade", value: 5)
|
||||||
|
@club4 = PlayerCard.new(rank: "4", suit: "Club", value: 6)
|
||||||
|
@diamond4 = PlayerCard.new(rank: "4", suit: "Diamond", value: 7)
|
||||||
|
@heart4 = PlayerCard.new(rank: "4", suit: "Heart", value: 8)
|
||||||
|
@cards_to_play = [@spade4, @club4, @diamond4, @heart4]
|
||||||
|
@play.player_cards = @cards_to_play
|
||||||
|
|
||||||
|
expect(@play.hand_type).to eq('bomb')
|
||||||
|
expect(@play.beats? @play_to_beat).to eq(true)
|
||||||
|
expect(@play.valid?).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'invalid bomb against a greater bomb' do
|
||||||
|
# Setup the play to beat
|
||||||
|
@spade4 = PlayerCard.new(rank: "4", suit: "Spade", value: 5)
|
||||||
|
@club4 = PlayerCard.new(rank: "4", suit: "Club", value: 6)
|
||||||
|
@diamond4 = PlayerCard.new(rank: "4", suit: "Diamond", value: 7)
|
||||||
|
@heart4 = PlayerCard.new(rank: "4", suit: "Heart", value: 8)
|
||||||
|
@cards_to_beat = [@spade4, @club4, @diamond4, @heart4]
|
||||||
|
@play_to_beat = Play.new(game_id: @game.id, player_id: @game.next_player_id, player_cards: @cards_to_beat)
|
||||||
|
@play_to_beat.save
|
||||||
|
@game.play_to_beat_id = @play_to_beat.id
|
||||||
|
|
||||||
|
# Setup the play
|
||||||
|
@spade3 = PlayerCard.new(rank: "3", suit: "Spade", value: 1)
|
||||||
|
@club3 = PlayerCard.new(rank: "3", suit: "Club", value: 2)
|
||||||
|
@diamond3 = PlayerCard.new(rank: "3", suit: "Diamond", value: 3)
|
||||||
|
@heart3 = PlayerCard.new(rank: "3", suit: "Heart", value: 4)
|
||||||
|
@cards_to_play = [@spade3, @club3, @diamond3, @heart3]
|
||||||
|
@play.player_cards = @cards_to_play
|
||||||
|
|
||||||
|
expect(@play.hand_type).to eq('bomb')
|
||||||
|
expect(@play.beats? @play_to_beat).to eq(false)
|
||||||
|
expect(@play.valid?).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
it 'valid run of 4' do
|
it 'valid run of 4' do
|
||||||
@spade3 = PlayerCard.new(rank: "3", suit: "Spade")
|
@spade3 = PlayerCard.new(rank: "3", suit: "Spade")
|
||||||
@club4 = PlayerCard.new(rank: "4", suit: "Club")
|
@club4 = PlayerCard.new(rank: "4", suit: "Club")
|
||||||
@ -338,6 +391,7 @@ RSpec.describe Play, type: :model do
|
|||||||
expect(@play.hand_type).to eq('run of 5')
|
expect(@play.hand_type).to eq('run of 5')
|
||||||
expect(@play.errors[:player_cards]).to eq(['Invalid run of 5'])
|
expect(@play.errors[:player_cards]).to eq(['Invalid run of 5'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'valid run of 5 suited' do
|
it 'valid run of 5 suited' do
|
||||||
@spade3 = PlayerCard.new(rank: "3", suit: "Spade")
|
@spade3 = PlayerCard.new(rank: "3", suit: "Spade")
|
||||||
@club4 = PlayerCard.new(rank: "4", suit: "Spade")
|
@club4 = PlayerCard.new(rank: "4", suit: "Spade")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user