예제 #1
0
        private void DrawPort(Graphics gfx, HexEdge edge, Port port)
        {
            var linePoints = HexEdgeToAbsolutePoints(edge);
            if (linePoints != null)
            {
                Color c = port.Resource == ResourceTypes.None ? Color.Black : ResourceColorMap[port.Resource];
                Brush hb = new HatchBrush(HatchStyle.Wave, c, BoardColors.Water);
                Pen p = new Pen(c, 2f);
                Pen bp = new Pen(Color.Black, 1f);

                var box = linePoints.GetBoundingBox();
                gfx.DrawEllipse(bp, box.OffsetSize(2, 2));
                gfx.DrawEllipse(p, box);
                gfx.FillEllipse(hb, box);

                bp.Dispose();
                hb.Dispose();
                p.Dispose();
            }
        }
예제 #2
0
파일: GameBoard.cs 프로젝트: jsnklpn/jatan
        private void SetupPorts()
        {
            _ports.Clear();

            // There are 4 three-to-one ports, and one two-to-one for each resource type.

            // Sort the water edges into a ring, so we can walk around the outside
            var waterRing = new List<HexEdge>();
            var remainingWaterEdges = new List<HexEdge>(_borderEdges);
            waterRing.Add(remainingWaterEdges.RemoveRandom());
            while (remainingWaterEdges.Count > 0)
            {
                var currentEdge = waterRing.Last();
                var nextEdge = remainingWaterEdges.First(e => e.IsTouching(currentEdge));
                remainingWaterEdges.Remove(nextEdge);
                waterRing.Add(nextEdge);
            }

            var portsToAdd = new List<ResourceTypes>();
            portsToAdd.Add(ResourceTypes.None, 4);
            portsToAdd.Add(ResourceTypes.Brick);
            portsToAdd.Add(ResourceTypes.Ore);
            portsToAdd.Add(ResourceTypes.Sheep);
            portsToAdd.Add(ResourceTypes.Wheat);
            portsToAdd.Add(ResourceTypes.Wood);

            int ringIndex = 0;
            for (int i = 0; portsToAdd.Any(); i++)
            {
                var resource = portsToAdd.RemoveRandom();
                _ports[waterRing[ringIndex]] = new Port(resource);

                // Every third add, skip 4 edges instead of 3.
                ringIndex += (i % 3 == 0) ? 4 : 3;
            }
        }