gamemaker 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8ed2317c608973479ee2a1026d2746ea145ca03
4
- data.tar.gz: 693d244d9a09aefbac66bbfb4dbf43fcfad86a12
3
+ metadata.gz: cc9c799ef34e5fa6def38e0c9ca605422066beb7
4
+ data.tar.gz: 71dfb99cd0ae105da715e2a95c8dd504dafb2c5e
5
5
  SHA512:
6
- metadata.gz: c7cf928832af99eab9f3a224f9a7216066e6c7e50176975cef4eb289acfbb7c4b821367ae68e043b3b4d0090c3cd28ad7d1e9cbfc2752cfeb8ed2bdd6f45783e
7
- data.tar.gz: fb360b6b992c5c0243fe4f365e6cc4d7213dfd975d317137a4ed391f7c1801630318b9a1db4d9391721dfb679a4a9315098e0d4ee048ba628b0a84897bf2c33d
6
+ metadata.gz: d9fb7600fad795a54207bc0ee96af83123ea675c5fd69b366217e8d1ce3afe04d6f42c4372a581255315eb1879baa50974218ba01d7b0bb9c6489e1527b85d53
7
+ data.tar.gz: 604c9d9304ec761dc990a16693032bef46f60fd79554894b2cfdb3eeb0bb2bc26d04596ab2cba879ae48d451f3e0550c6cc19dd9a22778516af09acbb418db24
@@ -1,3 +1,4 @@
1
1
  require 'gamemaker/card_game/card'
2
2
  require 'gamemaker/card_game/deck'
3
+ require 'gamemaker/card_game/hand'
3
4
  require 'gamemaker/card_game/playing_card'
@@ -30,6 +30,7 @@ module Gamemaker
30
30
 
31
31
  def shuffle!
32
32
  @cards.shuffle!
33
+ self
33
34
  end
34
35
 
35
36
  def draw(n = nil)
@@ -50,6 +51,33 @@ module Gamemaker
50
51
 
51
52
  alias_method :take!, :draw!
52
53
 
54
+ def put(*cards, position: :bottom)
55
+ case position
56
+ when :top
57
+ undraw(*cards)
58
+ when :bottom
59
+ self << cards
60
+ else
61
+ raise ArgumentError, "Cannot put cards to #{position.inspect}"
62
+ end
63
+ end
64
+
65
+ def <<(*cards)
66
+ @cards.concat(cards.flatten)
67
+ self
68
+ end
69
+
70
+ def undraw(*cards)
71
+ @cards = cards.flatten + @cards
72
+ self
73
+ end
74
+
75
+ alias_method :untake, :undraw
76
+
77
+ def merge!(other)
78
+ self << other.draw(other.length)
79
+ end
80
+
53
81
  def to_a
54
82
  @cards.dup
55
83
  end
@@ -0,0 +1,20 @@
1
+ module Gamemaker
2
+ module CardGame
3
+ class Hand < Deck
4
+ def self.card_class
5
+ raise NotImplementedError, "Hand is an abstract class, use Hand.of(CardType) to create a usable subclass"
6
+ end
7
+
8
+ def self.of(card_class)
9
+ Class.new(self) do
10
+ define_singleton_method(:name) { super() || "#{card_class.name}Hand" }
11
+ define_singleton_method(:card_class) { card_class }
12
+ end
13
+ end
14
+
15
+ def initialize(cards = [])
16
+ super(cards)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -4,6 +4,14 @@ module Gamemaker
4
4
  SUITS = [:clubs, :diamonds, :hearts, :spades]
5
5
  RANKS = [:ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, :jack, :queen, :king]
6
6
 
7
+ SUIT_GLYPHS = { clubs: "♣", diamonds: "♦", hearts: "♥", spades: "♠" }
8
+ CARD_GLYPHS = {
9
+ clubs: { ace: "🃑", 2 => "🃒", 3 => "🃓", 4 => "🃔", 5 => "🃕", 6 => "🃖", 7 => "🃗", 8 => "🃘", 9 => "🃙", 10 => "🃚", jack: "🃛", queen: "🃝", king: "🃞" },
10
+ diamonds: { ace: "🃁", 2 => "🃂", 3 => "🃃", 4 => "🃄", 5 => "🃅", 6 => "🃆", 7 => "🃇", 8 => "🃈", 9 => "🃉", 10 => "🃊", jack: "🃋", queen: "🃍", king: "🃎" },
11
+ hearts: { ace: "🂱", 2 => "🂲", 3 => "🂳", 4 => "🂴", 5 => "🂵", 6 => "🂶", 7 => "🂷", 8 => "🂸", 9 => "🂹", 10 => "🂺", jack: "🂻", queen: "🂽", king: "🂾" },
12
+ spades: { ace: "🂡", 2 => "🂢", 3 => "🂣", 4 => "🂤", 5 => "🂥", 6 => "🂦", 7 => "🂧", 8 => "🂨", 9 => "🂩", 10 => "🂪", jack: "🂫", queen: "🂭", king: "🂮" }
13
+ }
14
+
7
15
  attr_reader :suit, :rank
8
16
 
9
17
  def self.all
@@ -80,6 +88,29 @@ module Gamemaker
80
88
  @rank == other.rank && @suit == other.suit
81
89
  end
82
90
 
91
+ def to_s(format = :simple)
92
+ suit = SUIT_GLYPHS[@suit]
93
+
94
+ if Fixnum === @rank
95
+ rank = @rank.to_s
96
+ else
97
+ rank = @rank.to_s.upcase[0]
98
+ end
99
+
100
+ simple = suit + rank
101
+
102
+ case format
103
+ when :simple
104
+ simple
105
+ when :fancy
106
+ "┌──┐\n│#{simple.ljust(3,'|')}\n└──┘\n"
107
+ when :glyph
108
+ CARD_GLYPHS[@suit][@rank]
109
+ else
110
+ raise ArgumentError, "Unknown format #{format.inspect}"
111
+ end
112
+ end
113
+
83
114
  def as_json(*)
84
115
  { suit: @suit, rank: @rank }
85
116
  end
@@ -87,5 +118,26 @@ module Gamemaker
87
118
 
88
119
  class PlayingCardDeck < Deck.of(PlayingCard)
89
120
  end
121
+
122
+ class PlayingCardHand < Hand.of(PlayingCard)
123
+ def to_s(format = :simple, seperator: ' ', seperators: nil)
124
+ if format != :fancy && seperators
125
+ raise ArgumentError, "Invalid option `seperators: #{seperators.inspect}` (did you mean `seperator`?)"
126
+ end
127
+
128
+ strings = @cards.map { |c| c.to_s(format) }
129
+
130
+ if format == :fancy
131
+ seperators ||= [' ' * seperator.length, ' ' * seperator.length, seperator]
132
+ strings.map(&:split)
133
+ .transpose
134
+ .zip(seperators)
135
+ .map { |line| line.inject(:join) }
136
+ .join("\n") + "\n"
137
+ else
138
+ strings.join(seperator)
139
+ end
140
+ end
141
+ end
90
142
  end
91
143
  end
@@ -1,3 +1,3 @@
1
1
  module Gamemaker
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamemaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Godfrey Chan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-18 00:00:00.000000000 Z
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -87,6 +87,7 @@ files:
87
87
  - lib/gamemaker/card_game.rb
88
88
  - lib/gamemaker/card_game/card.rb
89
89
  - lib/gamemaker/card_game/deck.rb
90
+ - lib/gamemaker/card_game/hand.rb
90
91
  - lib/gamemaker/card_game/playing_card.rb
91
92
  - lib/gamemaker/version.rb
92
93
  homepage: http://gamemaker.io