patience 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +19 -0
- data/README.md +111 -0
- data/Rakefile +11 -0
- data/bin/patience +5 -0
- data/lib/patience.rb +13 -0
- data/lib/patience/area.rb +62 -0
- data/lib/patience/card.rb +107 -0
- data/lib/patience/core_ext/class.rb +17 -0
- data/lib/patience/core_ext/core_ext.rb +1 -0
- data/lib/patience/core_ext/object.rb +37 -0
- data/lib/patience/core_ext/string.rb +33 -0
- data/lib/patience/cursor.rb +66 -0
- data/lib/patience/deck.rb +21 -0
- data/lib/patience/event_handlers/click.rb +99 -0
- data/lib/patience/event_handlers/drag.rb +36 -0
- data/lib/patience/event_handlers/drop.rb +147 -0
- data/lib/patience/foundation.rb +30 -0
- data/lib/patience/game.rb +10 -0
- data/lib/patience/pile.rb +78 -0
- data/lib/patience/processable.rb +87 -0
- data/lib/patience/rank.rb +56 -0
- data/lib/patience/scenes/game_scene.rb +66 -0
- data/lib/patience/sprites/card_deck.png +0 -0
- data/lib/patience/sprites/empty_stock.png +0 -0
- data/lib/patience/sprites/pile_background.png +0 -0
- data/lib/patience/stock.rb +20 -0
- data/lib/patience/suit.rb +73 -0
- data/lib/patience/tableau.rb +42 -0
- data/lib/patience/version.rb +3 -0
- data/lib/patience/waste.rb +18 -0
- data/test/patience/core_ext/test_class.rb +28 -0
- data/test/patience/core_ext/test_object.rb +15 -0
- data/test/patience/core_ext/test_string.rb +35 -0
- data/test/patience/event_handlers/test_click.rb +142 -0
- data/test/patience/event_handlers/test_drag.rb +45 -0
- data/test/patience/event_handlers/test_drop.rb +175 -0
- data/test/patience/helper.rb +8 -0
- data/test/patience/scenes/test_game_scene.rb +14 -0
- data/test/patience/test_area.rb +74 -0
- data/test/patience/test_card.rb +165 -0
- data/test/patience/test_cursor.rb +77 -0
- data/test/patience/test_deck.rb +53 -0
- data/test/patience/test_foundation.rb +38 -0
- data/test/patience/test_game.rb +29 -0
- data/test/patience/test_pile.rb +83 -0
- data/test/patience/test_processable.rb +159 -0
- data/test/patience/test_rank.rb +88 -0
- data/test/patience/test_stock.rb +43 -0
- data/test/patience/test_suit.rb +87 -0
- data/test/patience/test_tableau.rb +57 -0
- data/test/patience/test_version.rb +11 -0
- data/test/patience/test_waste.rb +35 -0
- metadata +135 -0
@@ -0,0 +1,142 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
module Patience
|
4
|
+
class TestClick < TestCase
|
5
|
+
|
6
|
+
class Dummy < EventHandler::Click
|
7
|
+
attr_accessor :area, :pile, :card, :cards, :scenario
|
8
|
+
|
9
|
+
def initialize(mouse_pos, areas)
|
10
|
+
@mouse_pos = mouse_pos
|
11
|
+
@areas = areas
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@mouse_pos_missclick = Ray::Vector2[0, 0]
|
17
|
+
@mouse_pos_hit = Ray::Vector2[32, 166]
|
18
|
+
@deck = Deck.new
|
19
|
+
@areas = { :tableau => Tableau.new(@deck.shuffle_off! 28),
|
20
|
+
:waste => Waste.new,
|
21
|
+
:stock => Stock.new(@deck.shuffle_off! 10) }
|
22
|
+
@dummy_click_miss = Dummy.new(@mouse_pos_missclick, @areas)
|
23
|
+
@dummy_click_hit = Dummy.new(@mouse_pos_hit, @areas)
|
24
|
+
@stock_hit = Dummy.new(Ray::Vector2[32, 24], @areas)
|
25
|
+
end
|
26
|
+
|
27
|
+
def fill_attributes_up(click)
|
28
|
+
click.area = click.send(:detect_area)
|
29
|
+
click.pile = click.send(:detect_pile)
|
30
|
+
cards = click.send(:collect_cards)
|
31
|
+
click.cards = cards.map(&:first) if cards
|
32
|
+
click.card = click.cards.first
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'An area can be selected by click' do
|
36
|
+
assert_nil @dummy_click_hit.area
|
37
|
+
@dummy_click_hit.area = @dummy_click_hit.send(:detect_area)
|
38
|
+
assert_instance_of Tableau, @dummy_click_hit.area
|
39
|
+
assert_kind_of Area, @dummy_click_hit.area
|
40
|
+
|
41
|
+
assert_nil @dummy_click_miss.area
|
42
|
+
@dummy_click_miss.area = @dummy_click_miss.send(:detect_area)
|
43
|
+
assert_nil @dummy_click_miss.area
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'A pile can be selected by click' do
|
47
|
+
assert_nil @dummy_click_hit.pile
|
48
|
+
@dummy_click_hit.pile = @dummy_click_hit.send(:detect_pile)
|
49
|
+
assert_instance_of Pile, @dummy_click_hit.pile
|
50
|
+
|
51
|
+
assert_nil @dummy_click_miss.pile
|
52
|
+
@dummy_click_miss.pile = @dummy_click_miss.send(:detect_pile)
|
53
|
+
assert_nil @dummy_click_miss.pile
|
54
|
+
end
|
55
|
+
|
56
|
+
test 'A card can be selected by click' do
|
57
|
+
# Hit
|
58
|
+
tableau_click = Dummy.new(Ray::Vector2[472, 270], @areas)
|
59
|
+
assert_nil tableau_click.card
|
60
|
+
assert_nil tableau_click.cards
|
61
|
+
tableau_click.pile = @areas[:tableau].piles[4]
|
62
|
+
|
63
|
+
[Card.new(3, 1), Card.new(2, 4)].each do |card|
|
64
|
+
@areas[:tableau].piles[4] << card
|
65
|
+
card.pos = @areas[:tableau].piles[4].cards[-2].pos + [0, 20]
|
66
|
+
end
|
67
|
+
|
68
|
+
tableau_click.cards = tableau_click.send(:collect_cards).map(&:first)
|
69
|
+
assert tableau_click.cards
|
70
|
+
assert_instance_of Card::Rank::Four, tableau_click.cards[0].rank
|
71
|
+
assert_instance_of Card::Rank::Three, tableau_click.cards[1].rank
|
72
|
+
assert_instance_of Card::Rank::Two, tableau_click.cards[2].rank
|
73
|
+
|
74
|
+
# Miss
|
75
|
+
assert_nil @dummy_click_miss.card
|
76
|
+
assert_nil @dummy_click_miss.cards
|
77
|
+
@dummy_click_miss.cards = @dummy_click_miss.send(:collect_cards)
|
78
|
+
assert_nil @dummy_click_miss.card
|
79
|
+
assert_nil @dummy_click_miss.cards
|
80
|
+
end
|
81
|
+
|
82
|
+
test 'Stock can be refilled by a click' do
|
83
|
+
assert_equal 10, @areas[:stock].cards.size
|
84
|
+
assert_equal 0, @areas[:waste].cards.size
|
85
|
+
|
86
|
+
@areas[:stock].cards.each do |card|
|
87
|
+
@areas[:waste].piles[0] << card
|
88
|
+
end
|
89
|
+
@areas[:stock].piles[0].cards.clear
|
90
|
+
|
91
|
+
assert_equal 0, @areas[:stock].cards.size
|
92
|
+
assert_equal 10, @areas[:waste].cards.size
|
93
|
+
|
94
|
+
@dummy_click_hit.send(:refill_stock)
|
95
|
+
assert_equal 10, @areas[:stock].cards.size
|
96
|
+
assert_equal 0, @areas[:waste].cards.size
|
97
|
+
end
|
98
|
+
|
99
|
+
test 'A card can be displaced from Stock to Waste by a click' do
|
100
|
+
assert_equal 10, @areas[:stock].cards.size
|
101
|
+
assert_equal 0, @areas[:waste].cards.size
|
102
|
+
|
103
|
+
fill_attributes_up(@stock_hit)
|
104
|
+
@stock_hit.send(:displace_to_waste)
|
105
|
+
assert_equal 9, @areas[:stock].cards.size
|
106
|
+
assert_equal 1, @areas[:waste].cards.size
|
107
|
+
|
108
|
+
fill_attributes_up(@stock_hit)
|
109
|
+
@stock_hit.send(:displace_to_waste)
|
110
|
+
assert_equal 8, @areas[:stock].cards.size
|
111
|
+
assert_equal 2, @areas[:waste].cards.size
|
112
|
+
end
|
113
|
+
|
114
|
+
test 'Stock can change its background as a function of conditions' do
|
115
|
+
stock = @areas[:stock].piles[0]
|
116
|
+
@stock_hit.scenario = -> { @stock_hit.send(:stock) }
|
117
|
+
normal_background = @areas[:stock].piles[0].background.object_id
|
118
|
+
assert normal_background, stock.background.object_id
|
119
|
+
assert_equal 10, stock.size
|
120
|
+
|
121
|
+
fill_attributes_up(@stock_hit)
|
122
|
+
@stock_hit.scenario.call
|
123
|
+
assert normal_background, stock.background.object_id
|
124
|
+
assert_equal 9, stock.size
|
125
|
+
|
126
|
+
stock.size.times do
|
127
|
+
fill_attributes_up(@stock_hit)
|
128
|
+
@stock_hit.scenario.call
|
129
|
+
end
|
130
|
+
|
131
|
+
empty_background = stock.background.object_id
|
132
|
+
refute_equal normal_background, empty_background
|
133
|
+
assert_equal 0, stock.size
|
134
|
+
|
135
|
+
fill_attributes_up(@stock_hit)
|
136
|
+
@stock_hit.scenario.call
|
137
|
+
refute_equal empty_background, stock.background.object_id
|
138
|
+
refute_equal empty_background, normal_background
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
module Patience
|
4
|
+
class TestDrag < TestCase
|
5
|
+
|
6
|
+
class Dummy < EventHandler::Drag
|
7
|
+
def initialize
|
8
|
+
@card = Card.new(1, 1)
|
9
|
+
@tail_cards = {@card => 0, Card.new(2, 2) => 0, Card.new(3, 3) => 0}
|
10
|
+
@offset = Ray::Vector2[20, 20]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@mouse_pos = Ray::Vector2[0, 0]
|
16
|
+
@dummy = Dummy.new
|
17
|
+
@areas = { :tableau => Tableau.new([Card.new(1, 1)]) }
|
18
|
+
@cursor = Cursor.new
|
19
|
+
@cursor.mouse_pos = @mouse_pos
|
20
|
+
@cursor.click = EventHandler::Click.new(@cursor.mouse_pos, @areas)
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'A drag can move cards' do
|
24
|
+
assert_equal Ray::Vector2[0, 0], @dummy.card.sprite.pos
|
25
|
+
|
26
|
+
@mouse_pos += [200, 200]
|
27
|
+
@dummy.move(@mouse_pos)
|
28
|
+
assert_equal Ray::Vector2[220, 220], @dummy.card.sprite.pos
|
29
|
+
|
30
|
+
@mouse_pos += [-231, -365]
|
31
|
+
@dummy.move(@mouse_pos)
|
32
|
+
assert_equal Ray::Vector2[-11, -145], @dummy.card.sprite.pos
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'A drag can check, whether a card is draggable' do
|
36
|
+
assert @dummy.draggable?
|
37
|
+
|
38
|
+
@cursor.mouse_pos = Ray::Vector2[800, 500]
|
39
|
+
@cursor.click = EventHandler::Click.new(@cursor.mouse_pos, @areas)
|
40
|
+
drag = EventHandler::Drag.new(@cursor)
|
41
|
+
refute drag.draggable?
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
module Patience
|
4
|
+
class TestDrop < TestCase
|
5
|
+
|
6
|
+
class EventHandler::Click
|
7
|
+
attr_accessor :mouse_pos
|
8
|
+
end
|
9
|
+
|
10
|
+
class Dummy < EventHandler::Drop
|
11
|
+
attr_accessor :card_to_drop, :pile_beneath, :card_beneath, :area, :pile
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@mouse_pos = Ray::Vector2[361, 243]
|
16
|
+
@deck = Deck.new
|
17
|
+
@areas = { :tableau => Tableau.new(@deck.shuffle_off! 28),
|
18
|
+
:waste => Waste.new,
|
19
|
+
:foundation => Foundation.new }
|
20
|
+
@click = EventHandler::Click.new(@mouse_pos, @areas)
|
21
|
+
@drop = Dummy.new(@click, @areas)
|
22
|
+
end
|
23
|
+
|
24
|
+
def fill_attributes_up(drop)
|
25
|
+
@drop.card_beneath = @drop.send(:find_card_beneath)
|
26
|
+
@drop.pile_beneath = @drop.send(:find_pile_beneath)
|
27
|
+
end
|
28
|
+
|
29
|
+
test 'An area can be found by drop' do
|
30
|
+
@drop.card_to_drop.pos = Ray::Vector2[0, 0]
|
31
|
+
fill_attributes_up(@drop)
|
32
|
+
|
33
|
+
assert_nil @drop.send(:find_area_beneath)
|
34
|
+
|
35
|
+
@drop.card_to_drop.pos = Ray::Vector2[252, 218]
|
36
|
+
fill_attributes_up(@drop)
|
37
|
+
assert_nil @drop.send(:find_area_beneath)
|
38
|
+
|
39
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
40
|
+
fill_attributes_up(@drop)
|
41
|
+
assert_equal Tableau, @drop.send(:find_area_beneath).class
|
42
|
+
|
43
|
+
assert_kind_of Area, @drop.send(:find_area_beneath)
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'A pile can be found by drop' do
|
47
|
+
@drop.card_to_drop.pos = Ray::Vector2[0, 0]
|
48
|
+
assert_nil @drop.send(:find_pile_beneath)
|
49
|
+
|
50
|
+
@drop.card_to_drop.pos = Ray::Vector2[252, 218]
|
51
|
+
assert_nil @drop.send(:find_pile_beneath)
|
52
|
+
|
53
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
54
|
+
@drop.card_beneath = @drop.send(:find_card_beneath)
|
55
|
+
|
56
|
+
assert_equal Pile, @drop.send(:find_pile_beneath).class
|
57
|
+
end
|
58
|
+
|
59
|
+
test 'A card can be found by drop' do
|
60
|
+
@drop.card_to_drop.pos = Ray::Vector2[0, 0]
|
61
|
+
assert_nil @drop.send(:find_card_beneath)
|
62
|
+
|
63
|
+
@drop.card_to_drop.pos = Ray::Vector2[252, 218]
|
64
|
+
assert_nil @drop.send(:find_card_beneath)
|
65
|
+
|
66
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
67
|
+
assert_equal Card, @drop.send(:find_card_beneath).class
|
68
|
+
end
|
69
|
+
|
70
|
+
test 'A drop can decide whether a card meets conditions of Tableau' do
|
71
|
+
@drop.card_to_drop = Card.new(8, 1)
|
72
|
+
nine_of_clubs = Card.new(9, 4)
|
73
|
+
king_of_diamonds = Card.new(13, 2)
|
74
|
+
nine_of_hearts = Card.new(9, 1)
|
75
|
+
|
76
|
+
assert @drop.send(:tableau_conditions?, nine_of_clubs)
|
77
|
+
refute @drop.send(:tableau_conditions?, king_of_diamonds)
|
78
|
+
refute @drop.send(:tableau_conditions?, nine_of_hearts)
|
79
|
+
end
|
80
|
+
|
81
|
+
test 'A drop can decide whether a card meets conditions of Foundation' do
|
82
|
+
@drop.card_to_drop = Card.new(10, 1)
|
83
|
+
nine_of_clubs = Card.new(9, 4)
|
84
|
+
king_of_diamonds = Card.new(13, 2)
|
85
|
+
nine_of_hearts = Card.new(9, 1)
|
86
|
+
|
87
|
+
refute @drop.send(:foundation_conditions?, nine_of_clubs)
|
88
|
+
refute @drop.send(:foundation_conditions?, king_of_diamonds)
|
89
|
+
assert @drop.send(:foundation_conditions?, nine_of_hearts)
|
90
|
+
end
|
91
|
+
|
92
|
+
test 'A dropped card can be called off' do
|
93
|
+
assert_equal Ray::Vector2[361, 243], @drop.card_to_drop.pos
|
94
|
+
|
95
|
+
@drop.card_to_drop.pos = Ray::Vector2[0, 0]
|
96
|
+
assert_equal Ray::Vector2[0, 0], @drop.card_to_drop.pos
|
97
|
+
|
98
|
+
@drop.send(:call_off)
|
99
|
+
assert_equal Ray::Vector2[361, 243], @drop.card_to_drop.pos
|
100
|
+
end
|
101
|
+
|
102
|
+
test 'A dropped card can be added to the pile beneath' do
|
103
|
+
@drop.pile_beneath = Pile.new
|
104
|
+
@drop.pile = Pile.new([Card.new(1, 1)])
|
105
|
+
|
106
|
+
assert_equal 0, @drop.pile_beneath.size
|
107
|
+
assert_equal 1, @drop.pile.size
|
108
|
+
|
109
|
+
@drop.send(:add_to_pile_beneath, @drop.pile.cards[0])
|
110
|
+
assert_equal 1, @drop.pile_beneath.size
|
111
|
+
assert_instance_of Card, @drop.pile_beneath.cards[0]
|
112
|
+
assert_equal Card::Rank::Ace, @drop.pile_beneath.cards[0].rank.class
|
113
|
+
assert_equal 0, @drop.pile.size
|
114
|
+
end
|
115
|
+
|
116
|
+
# Not complete.
|
117
|
+
test "A dropped card can be checked, if it's allowed to be put in Tableau" do
|
118
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
119
|
+
fill_attributes_up(@drop)
|
120
|
+
assert @drop.send(:can_put_in_tableau?)
|
121
|
+
|
122
|
+
@drop.card_to_drop = Card.new(1, 1)
|
123
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
124
|
+
refute @drop.send(:can_put_in_tableau?)
|
125
|
+
end
|
126
|
+
|
127
|
+
# Not complete.
|
128
|
+
test "A dropped card can be checked, if it's allowed to be put in Foundation" do
|
129
|
+
@drop.card_to_drop = Card.new(1, 1)
|
130
|
+
@drop.card_to_drop.pos = Ray::Vector2[362, 23]
|
131
|
+
fill_attributes_up(@drop)
|
132
|
+
assert @drop.send(:can_put_in_foundation?)
|
133
|
+
|
134
|
+
@drop.card_to_drop = Card.new(10, 1)
|
135
|
+
refute @drop.send(:can_put_in_foundation?)
|
136
|
+
end
|
137
|
+
|
138
|
+
test 'A dropped card can be put in Tableau' do
|
139
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
140
|
+
fill_attributes_up(@drop)
|
141
|
+
assert_equal 5, @areas[:tableau].piles[4].size
|
142
|
+
@drop.send(:put_in_tableau)
|
143
|
+
assert_equal 6, @areas[:tableau].piles[4].size
|
144
|
+
|
145
|
+
@areas[:tableau].piles[3] << Card.new(2, 3)
|
146
|
+
@areas[:tableau].piles[3].cards.last.pos = @mouse_pos
|
147
|
+
@click = EventHandler::Click.new(@mouse_pos, @areas)
|
148
|
+
@drop = Dummy.new(@click, @areas)
|
149
|
+
@drop.card_to_drop.pos = Ray::Vector2[472, 270]
|
150
|
+
fill_attributes_up(@drop)
|
151
|
+
@drop.send(:put_in_tableau)
|
152
|
+
assert_equal 7, @areas[:tableau].piles[4].size
|
153
|
+
end
|
154
|
+
|
155
|
+
test 'A dropped card can be put in Foundation' do
|
156
|
+
@click = EventHandler::Click.new(Ray::Vector2[32, 165], @areas)
|
157
|
+
@drop = Dummy.new(@click, @areas)
|
158
|
+
@drop.card_to_drop.pos = Ray::Vector2[362, 23]
|
159
|
+
fill_attributes_up(@drop)
|
160
|
+
@drop.send(:put_in_foundation)
|
161
|
+
assert_equal 1, @areas[:foundation].piles[0].size
|
162
|
+
|
163
|
+
last_card = @areas[:tableau].piles[2].cards.last
|
164
|
+
@areas[:tableau].piles[2].cards.delete(last_card)
|
165
|
+
@areas[:tableau].piles[2].cards.last.flip!
|
166
|
+
@click = EventHandler::Click.new(Ray::Vector2[252, 192], @areas)
|
167
|
+
@drop = Dummy.new(@click, @areas)
|
168
|
+
@drop.card_to_drop.pos = Ray::Vector2[362, 23]
|
169
|
+
fill_attributes_up(@drop)
|
170
|
+
@drop.send(:put_in_foundation)
|
171
|
+
assert_equal 2, @areas[:foundation].piles[0].size
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
module Patience
|
4
|
+
class TestArea < TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@area = Area.new
|
8
|
+
@cards = [Card.new(1, 1)]
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'A new area should contain at least one pile' do
|
12
|
+
assert_equal 1, Area.new.piles.size
|
13
|
+
end
|
14
|
+
|
15
|
+
test 'An area can contain several piles' do
|
16
|
+
assert_equal 1, Area.new(@cards, 1).piles.size
|
17
|
+
assert_equal 10, Area.new(@cards, 10).piles.size
|
18
|
+
assert_equal 100, Area.new(@cards, 100).piles.size
|
19
|
+
end
|
20
|
+
|
21
|
+
test 'An area can return array of the piles' do
|
22
|
+
assert_instance_of Array, @area.piles
|
23
|
+
assert_instance_of Pile, @area.piles.first
|
24
|
+
end
|
25
|
+
|
26
|
+
test 'An area can be disposed' do
|
27
|
+
assert_equal Ray::Vector2[0, 0], @area.piles[0].pos
|
28
|
+
@area.pos = [20, 20]
|
29
|
+
assert_equal Ray::Vector2[20, 20], @area.piles[0].pos
|
30
|
+
@area.pos = [-100, 20]
|
31
|
+
assert_equal Ray::Vector2[-100, 20], @area.piles[0].pos
|
32
|
+
|
33
|
+
area = Area.new([], 4)
|
34
|
+
assert_equal Ray::Vector2[0, 0], area.piles[0].pos
|
35
|
+
assert_equal Ray::Vector2[0, 0], area.piles[3].pos
|
36
|
+
area.pos = [20, 20]
|
37
|
+
assert_equal Ray::Vector2[20, 20], area.piles[0].pos
|
38
|
+
assert_equal Ray::Vector2[20, 20], area.piles[3].pos
|
39
|
+
area.pos = [-100, 20]
|
40
|
+
assert_equal Ray::Vector2[-100, 20], area.piles[0].pos
|
41
|
+
assert_equal Ray::Vector2[-100, 20], area.piles[3].pos
|
42
|
+
end
|
43
|
+
|
44
|
+
test 'An area can tell its position' do
|
45
|
+
assert_equal Ray::Vector2[0, 0], @area.pos
|
46
|
+
@area.pos = [20, 20]
|
47
|
+
assert_equal Ray::Vector2[20, 20], @area.pos
|
48
|
+
@area.pos = [-100, 20]
|
49
|
+
assert_equal Ray::Vector2[-100, 20], @area.pos
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'An area can show all its cards' do
|
53
|
+
assert_equal [], @area.cards
|
54
|
+
@area.piles[0].cards << @cards
|
55
|
+
assert_equal ["Ace of Hearts"], @area.cards.map(&:to_s)
|
56
|
+
end
|
57
|
+
|
58
|
+
test 'An area can tell, if its card has been clicked' do
|
59
|
+
assert @area.hit?(Ray::Vector2[20, 20])
|
60
|
+
refute @area.hit?(Ray::Vector2[1000, 0])
|
61
|
+
end
|
62
|
+
|
63
|
+
test 'A card can be added to the first pile of area from the given pile' do
|
64
|
+
pile = Pile.new([Card.new(1, 1)])
|
65
|
+
assert pile.cards.first.face_up?
|
66
|
+
assert_equal 0, @area.cards.size
|
67
|
+
@area.add_from(pile, pile.cards.first)
|
68
|
+
assert_equal 1, @area.cards.size
|
69
|
+
assert @area.cards.first.face_down?
|
70
|
+
assert_instance_of Card, @area.cards.first
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|