Shared board
diff --git a/lib/components/board.dart b/lib/components/board.dart
new file mode 100644
index 0000000..81720c1
--- /dev/null
+++ b/lib/components/board.dart
@@ -0,0 +1,100 @@
+import './card.dart' show Card;
+import '../logic/card.dart' as logic_card;
+import 'package:sky/widgets.dart' as widgets;
+import 'package:vector_math/vector_math.dart' as vector_math;
+import 'dart:math' as math;
+import 'package:sky/theme/colors.dart' as colors;
+
+const cardHeight = 96;
+const cardWidth = 71;
+
+class CardCluster extends widgets.Component {
+  List<int> cards; // the indicies of the 4 cards in the center, in clockwise order
+  CardCluster(this.cards);
+
+  widgets.Widget build() {
+
+    return new widgets.Container(
+      child: new widgets.Stack([
+        new widgets.Transform(
+            transform: new vector_math.Matrix4.identity().rotateZ(math.PI).translate(0, -cardHeight / 2),
+            child: new Card(logic_card.Card.All[cards[0]], true)
+          ),
+        new widgets.Transform(
+            transform: new vector_math.Matrix4.identity().rotateZ(math.PI/2.0).translate(0, cardWidth/2),
+            child: new Card(logic_card.Card.All[cards[1]], true)
+          ),
+        new widgets.Transform(
+            transform: new vector_math.Matrix4.identity().translate(-cardWidth, cardWidth / 2),
+            child: new Card(logic_card.Card.All[cards[2]], true)
+          ),
+        new widgets.Transform(
+            transform: new vector_math.Matrix4.identity().rotateZ(math.PI/2.0).translate(0, -cardHeight/2),
+            child: new Card(logic_card.Card.All[cards[3]], true)
+          )
+      ]));
+  }
+}
+
+class PlayerHand extends widgets.Component {
+  int count;
+  PlayerHand(this.count);
+
+  widgets.Widget build() {
+    List<widgets.Positioned> cards = [];
+    for (int i = 0; i < count; i++) {
+      cards.add(new widgets.Positioned(child: new Card(logic_card.Card.All[0], false),
+        top: 0.0,
+        left: cardWidth*i/2.0));
+    }
+    return new widgets.Stack(cards);
+  }
+}
+
+class Board extends widgets.Component {
+  CardCluster centerCluster;
+  List<PlayerHand> hands; // counts of cards in players hands, in clockwise order
+
+  Board(List<int> cards, List<int> playerHandCount) :
+    centerCluster = new CardCluster(cards) {
+      assert(playerHandCount.length == 4);
+      hands = new List<PlayerHand>();
+      for (int count in playerHandCount) {
+        hands.add(new PlayerHand(count));
+      }
+  }
+
+  widgets.Widget build() {
+    return new widgets.Container(
+      decoration: new widgets.BoxDecoration(backgroundColor: colors.Pink[500]),
+      child: new widgets.Stack(
+        [
+          new widgets.Positioned(child: hands[0],
+            top: 0.0,
+            left: 250.0),
+          new widgets.Positioned(child: new widgets.Transform(
+              transform: new vector_math.Matrix4.identity().rotateZ(math.PI/2.0),
+              child: hands[1]
+              ),
+            left: 100.0,
+            top: 400.0),
+          new widgets.Positioned(child: new widgets.Transform(
+              transform: new vector_math.Matrix4.identity().rotateZ(math.PI),
+              child: hands[2]
+            ),
+            top: 820.0,
+            left: 350.0),
+          new widgets.Positioned(child: new widgets.Transform(
+              transform: new vector_math.Matrix4.identity().rotateZ(math.PI/2.0),
+              child: hands[3]
+            ),
+            left: 500.0,
+            top: 400.0),
+          new widgets.Positioned(child: centerCluster,
+            top: 400.0,
+            left: 300.0),
+        ]
+      )
+    );
+  }
+}
diff --git a/lib/components/card.dart b/lib/components/card.dart
index e15eff4..f482ca9 100644
--- a/lib/components/card.dart
+++ b/lib/components/card.dart
@@ -1,6 +1,5 @@
 import '../logic/card.dart' as logic_card;
 import 'package:sky/widgets.dart' as widgets;
-import 'package:sky/theme/colors.dart' as colors;
 
 class Card extends widgets.Component {
   logic_card.Card card;
@@ -10,21 +9,7 @@
 
   widgets.Widget build() {
     return new widgets.Listener(
-      child: new widgets.Container(
-        child: new widgets.Container(
-          decoration: new widgets.BoxDecoration(
-            border: new widgets.Border.all(
-              width: 3.0,
-              color: colors.Red[500]
-            ),
-            backgroundColor: colors.Brown[500]
-          ),
-          child: new widgets.Flex([
-            imageFromCard(card, faceUp),
-            new widgets.Text('removethis')
-          ], direction: widgets.FlexDirection.vertical)
-        )
-      )
+      child: imageFromCard(card, faceUp)
     );
   }
 
diff --git a/lib/components/game.dart b/lib/components/game.dart
index 9a229c2..da2c4d1 100644
--- a/lib/components/game.dart
+++ b/lib/components/game.dart
@@ -3,6 +3,7 @@
 import 'card_collection.dart' show CardCollectionComponent, Orientation;
 import 'package:sky/widgets/basic.dart';
 import 'package:sky/theme/colors.dart' as colors;
+import 'board.dart' show Board;
 
 class GameComponent extends StatefulComponent {
   Game game;
@@ -17,6 +18,8 @@
     switch (game.gameType) {
       case GameType.Hearts:
         return buildHearts();
+        // Code to display board:
+        // return new Board([2,3,4,5], [1, 2, 3, 4]);
       default:
         return null; // unsupported
     }
diff --git a/lib/logic/card.dart b/lib/logic/card.dart
index 021495f..f637191 100644
--- a/lib/logic/card.dart
+++ b/lib/logic/card.dart
@@ -1,7 +1,65 @@
+import 'dart:collection';
+
 class Card {
   final String deck;
   final String identifier;
 
+  static final List<Card> All = new UnmodifiableListView<Card>([
+    const Card("classic", "c1"),
+    const Card("classic", "c2"),
+    const Card("classic", "c3"),
+    const Card("classic", "c4"),
+    const Card("classic", "c5"),
+    const Card("classic", "c6"),
+    const Card("classic", "c7"),
+    const Card("classic", "c8"),
+    const Card("classic", "c9"),
+    const Card("classic", "c10"),
+    const Card("classic", "cj"),
+    const Card("classic", "cq"),
+    const Card("classic", "ck"),
+    const Card("classic", "d1"),
+    const Card("classic", "d2"),
+    const Card("classic", "d3"),
+    const Card("classic", "d4"),
+    const Card("classic", "d5"),
+    const Card("classic", "d6"),
+    const Card("classic", "d7"),
+    const Card("classic", "d8"),
+    const Card("classic", "d9"),
+    const Card("classic", "d10"),
+    const Card("classic", "dj"),
+    const Card("classic", "dq"),
+    const Card("classic", "dk"),
+    const Card("classic", "h1"),
+    const Card("classic", "h2"),
+    const Card("classic", "h3"),
+    const Card("classic", "h4"),
+    const Card("classic", "h5"),
+    const Card("classic", "h6"),
+    const Card("classic", "h7"),
+    const Card("classic", "h8"),
+    const Card("classic", "h9"),
+    const Card("classic", "h10"),
+    const Card("classic", "hj"),
+    const Card("classic", "hq"),
+    const Card("classic", "hk"),
+    const Card("classic", "s1"),
+    const Card("classic", "s2"),
+    const Card("classic", "s3"),
+    const Card("classic", "s4"),
+    const Card("classic", "s5"),
+    const Card("classic", "s6"),
+    const Card("classic", "s7"),
+    const Card("classic", "s8"),
+    const Card("classic", "s9"),
+    const Card("classic", "s10"),
+    const Card("classic", "sj"),
+    const Card("classic", "sq"),
+    const Card("classic", "sk"),
+  ]);
+
+
   const Card(this.deck, this.identifier);
 
   toString() => "${deck} ${identifier}";
diff --git a/lib/logic/game.dart b/lib/logic/game.dart
index 0aeaf9d..7f51861 100644
--- a/lib/logic/game.dart
+++ b/lib/logic/game.dart
@@ -10,60 +10,7 @@
 class Game {
   final GameType gameType;
   final List<List<Card>> cardCollections = new List<List<Card>>();
-  final List<Card> deck = <Card>[
-    const Card("classic", "c1"),
-    const Card("classic", "c2"),
-    const Card("classic", "c3"),
-    const Card("classic", "c4"),
-    const Card("classic", "c5"),
-    const Card("classic", "c6"),
-    const Card("classic", "c7"),
-    const Card("classic", "c8"),
-    const Card("classic", "c9"),
-    const Card("classic", "c10"),
-    const Card("classic", "cj"),
-    const Card("classic", "cq"),
-    const Card("classic", "ck"),
-    const Card("classic", "d1"),
-    const Card("classic", "d2"),
-    const Card("classic", "d3"),
-    const Card("classic", "d4"),
-    const Card("classic", "d5"),
-    const Card("classic", "d6"),
-    const Card("classic", "d7"),
-    const Card("classic", "d8"),
-    const Card("classic", "d9"),
-    const Card("classic", "d10"),
-    const Card("classic", "dj"),
-    const Card("classic", "dq"),
-    const Card("classic", "dk"),
-    const Card("classic", "h1"),
-    const Card("classic", "h2"),
-    const Card("classic", "h3"),
-    const Card("classic", "h4"),
-    const Card("classic", "h5"),
-    const Card("classic", "h6"),
-    const Card("classic", "h7"),
-    const Card("classic", "h8"),
-    const Card("classic", "h9"),
-    const Card("classic", "h10"),
-    const Card("classic", "hj"),
-    const Card("classic", "hq"),
-    const Card("classic", "hk"),
-    const Card("classic", "s1"),
-    const Card("classic", "s2"),
-    const Card("classic", "s3"),
-    const Card("classic", "s4"),
-    const Card("classic", "s5"),
-    const Card("classic", "s6"),
-    const Card("classic", "s7"),
-    const Card("classic", "s8"),
-    const Card("classic", "s9"),
-    const Card("classic", "s10"),
-    const Card("classic", "sj"),
-    const Card("classic", "sq"),
-    const Card("classic", "sk"),
-  ];
+  final List<Card> deck = new List<Card>.from(Card.All);
 
   final Random random = new Random();
   String debugString = 'hello?';
@@ -112,4 +59,4 @@
     }
     return -1;
   }
-}
\ No newline at end of file
+}