コード例 #1
0
 private bool CanAddSequence(TileValue t, int pos)
 {
     if (_tiles.Count == 13)
     {
         return(false);
     }
     if (t.value == 0)
     {
         if (pos == 0 && _tiles[0].value == 1)
         {
             return(false);
         }
         if (pos == _tiles.Count && _tiles.Last().value == 13)
         {
             return(false);
         }
         return(true);
     }
     if (!IsColorValid(t.color))
     {
         return(false);
     }
     if (pos > 0 && _tiles[pos - 1].value != t.value - 1)
     {
         return(false);
     }
     if (pos < _tiles.Count && _tiles[pos].value != t.value + 1)
     {
         return(false);
     }
     return(true);
 }
コード例 #2
0
    public bool IsGameOver()
    {
        TileValue winner    = WhoWon();
        bool      isMapFull = GameGrid.instance.GetEmptySlots().Length == 0;

        return(winner != TileValue.empty || isMapFull);
    }
コード例 #3
0
ファイル: TileManager.cs プロジェクト: dannisliang/Rummikub
    private TileValue GetRandomTile()
    {
        TileValue t = tiles[Random.Range(0, tiles.Count)];

        tiles.Remove(t);
        return(t);
    }
コード例 #4
0
        public async void MyTurn_Should_Not_Able_Kong_Board_Pong()
        {
            var context = _f.TestDataContext;

            TileType  circ = TileType.Circle;
            TileValue one  = TileValue.One;

            KongTilesHelper.SetupForPongBoard(context, _f.MainPlayerUserName, circ, one);

            _f.OtherPlayerRound.IsMyTurn = false;
            _f.MainPlayerRound.IsMyTurn  = true;

            var kongCommand = new Kong.Command
            {
                RoundId   = _f.RoundId,
                UserName  = _f.MainPlayerUserName,
                TileType  = circ,
                TileValue = one
            };

            var sut = new Kong.Handler(context, _f.RoundMapper, _f.PointCalculator);

            var ex = await Assert.ThrowsAsync <RestException>(() => sut.Handle(kongCommand, CancellationToken.None));

            Assert.Equal(HttpStatusCode.BadRequest, ex.Code);
        }
コード例 #5
0
 public Oponent Create(TileValue value)
 {
     Value              = value;
     OnPlayerSlotChose += () => InTurn = false;
     OnPlayerSlotChose += () => AudioManager.CallAudio("S slot");
     IsReady            = true;
     return(this);
 }
コード例 #6
0
        public void ToTileValue_WinnerInput_ValidOutput(Winner input, TileValue expectedOutput)
        {
            // arrange

            // act
            TileValue result = input.ToTileValue();

            // assert
            result.Should().Be(expectedOutput);
        }
コード例 #7
0
 private bool CanAddGroup(TileValue t)
 {
     if (_tiles.Count == 4)
     {
         return(false);
     }
     if (t.value == 0)
     {
         return(true);
     }
     if (!IsValueValid(t.value) || Any(x => x.color == t.color))
     {
         return(false);
     }
     return(true);
 }
コード例 #8
0
ファイル: GamePiece.cs プロジェクト: StevenPurn/Theven
    public bool CheckForCapture()
    {
        TileValue    captureValue    = playerColor == Player.black ? TileValue.whitePiece : TileValue.blackPiece;
        bool         captured        = false;
        TileLocation captureLocation = captureLocations[0] + currentLocation;

        if (CheckValidLocation(captureLocation))
        {
            if (GameBoard.BoardTiles[captureLocation.x, captureLocation.y].valueOfTile == captureValue)
            {
                captureLocation = captureLocations[1] + currentLocation;
                if (CheckValidLocation(captureLocation))
                {
                    if (GameBoard.BoardTiles[captureLocation.x, captureLocation.y].valueOfTile == captureValue)
                    {
                        captured = true;
                    }
                }
            }
        }

        if (!captured)
        {
            captureLocation = captureLocations[2] + currentLocation;
            if (CheckValidLocation(captureLocation))
            {
                if (GameBoard.BoardTiles[captureLocation.x, captureLocation.y].valueOfTile == captureValue)
                {
                    captureLocation = captureLocations[3] + currentLocation;
                    if (CheckValidLocation(captureLocation))
                    {
                        if (GameBoard.BoardTiles[captureLocation.x, captureLocation.y].valueOfTile == captureValue)
                        {
                            captured = true;
                        }
                    }
                }
            }
        }
        if (captured)
        {
            Debug.Log("Piece captured at: " + currentLocation);
        }
        return(captured);
    }
コード例 #9
0
ファイル: TileManager.cs プロジェクト: Xwilarg/Rummikub-old
    private void Start()
    {
        tiles = new List <TileValue>();
        // 14 tiles of each color * 2 + 2 jokers
        for (int i = 0; i < 2; i++)
        {
            for (int y = 0; y < 4; y++)
            {
                for (int z = 1; z < 13; z++)
                {
                    tiles.Add(new TileValue(z, (TileValue.TileColor)y));
                }
            }
        }
        tiles.Add(new TileValue(0, TileValue.TileColor.Black));
        tiles.Add(new TileValue(0, TileValue.TileColor.Red));
        for (int i = 0; i < 14; i++)
        {
            TileValue  tv = GetRandomTile();
            GameObject go = Instantiate(tilePrefab, Vector3.zero, Quaternion.identity);
            TextMesh   tm = go.GetComponentInChildren <TextMesh>();
            tm.text = tv.value == 0 ? "J" : tv.value.ToString();
            switch (tv.color)
            {
            case TileValue.TileColor.Black:
                tm.color = Color.black;
                break;

            case TileValue.TileColor.Blue:
                tm.color = Color.blue;
                break;

            case TileValue.TileColor.Red:
                tm.color = Color.red;
                break;

            case TileValue.TileColor.Yellow:
                tm.color = Color.yellow;
                break;
            }
            go.name = tv.color.ToString() + " " + tv.value;
            support.AddTile(go.GetComponent <Tile>());
        }
    }
コード例 #10
0
    public void MakeTurn(TileValue value, bool humanThisDevice, bool locked)
    {
        SetValue(value);
        UpdateSprite2Value();
        SetColor(normalColor);
        SetLock(locked);

        if (humanThisDevice)
        {
            if (GameManager.instance.multiplayer)
            {
                Server.instance.currentTurnPlayer.player.OnPlayerSlotChose();
                Server.instance.currentTurnPlayer.SendTurn2Server(GameGrid.instance.GetSlotId(this), Server.instance.currentTurnPlayer);
            }
            else
            {
                Player.OnPlayerSlotChose();
            }
        }
    }
コード例 #11
0
        public static ExtraPoint ToFlowerExtraPoint(this TileValue tv)
        {
            if (tv == TileValue.FlowerNumericOne ||
                tv == TileValue.FlowerNumericTwo ||
                tv == TileValue.FlowerNumericThree ||
                tv == TileValue.FlowerNumericFour)
            {
                return(ExtraPoint.NumericFlower);
            }

            if (tv == TileValue.FlowerRomanOne ||
                tv == TileValue.FlowerRomanTwo ||
                tv == TileValue.FlowerRomanThree ||
                tv == TileValue.FlowerRomanFour)
            {
                return(ExtraPoint.RomanFlower);
            }

            return(ExtraPoint.None);
        }
コード例 #12
0
 private bool CanAdd(TileValue t, int pos)
 {
     if (_type == GroupType.Group)
     {
         return(CanAddGroup(t));
     }
     if (_type == GroupType.Sequence)
     {
         return(CanAddSequence(t, pos));
     }
     if (CanAddGroup(t))
     {
         _type = GroupType.Group;
         return(true);
     }
     if (CanAddSequence(t, pos))
     {
         _type = GroupType.Sequence;
         return(true);
     }
     return(false);
 }
コード例 #13
0
        public bool Add(TileValue?tBefore, TileValue t)
        {
            int pos = tBefore == null ? 0 : _tiles.FindIndex(x => x.IsSame(tBefore.Value)) + 1;

            if (!CanAdd(t, pos))
            {
                return(false);
            }
            if (tBefore == null)
            {
                _tiles.Insert(0, t);
            }
            else if (pos == _tiles.Count - 1)
            {
                _tiles.Add(t);
            }
            else
            {
                _tiles.Insert(pos, t);
            }
            return(true);
        }
コード例 #14
0
ファイル: GameBoard.cs プロジェクト: StevenPurn/Theven
    //Overload accepting TileValue in lieu of Player color
    void PlacePiece(TileValue tValue, TileLocation tileLocation)
    {
        Transform  parent   = BoardTiles[tileLocation.x, tileLocation.y].tileObj.transform;
        GameObject newPiece = Instantiate(piecePrefab, parent);

        newPiece.transform.localPosition = new Vector3(newPiece.transform.localPosition.x, newPiece.transform.localPosition.y + 0.5f, newPiece.transform.localPosition.z);
        GamePiece piece = newPiece.GetComponent <GamePiece>();

        piece.pieceObj        = newPiece;
        piece.currentLocation = tileLocation;
        piece.playerColor     = tValue == TileValue.blackPiece ? Player.black : Player.white;
        if (tValue == TileValue.blackPiece)
        {
            BoardTiles[tileLocation.x, tileLocation.y].valueOfTile = TileValue.blackPiece;
            blackPieces.Add(piece);
            piece.SetPieceColor(TileColor.black);
        }
        else
        {
            BoardTiles[tileLocation.x, tileLocation.y].valueOfTile = TileValue.whitePiece;
            whitePieces.Add(piece);
            piece.SetPieceColor(TileColor.white);
        }
    }
コード例 #15
0
        public static void SetupForPongUser(MahjongBuddyDbContext context, string userId, TileType tileType, TileValue tileValue)
        {
            //setup 3 same tiles as ponged in graveyard and 1 tile as user active
            var oneRoundTiles = context.RoundTiles.Where(t => t.Tile.TileType == tileType && t.Tile.TileValue == tileValue);

            if (oneRoundTiles.Count() == 4)
            {
                foreach (var t in oneRoundTiles.Take(3))
                {
                    t.Owner        = userId;
                    t.Status       = TileStatus.UserGraveyard;
                    t.TileSetGroup = TileSetGroup.Pong;
                }

                var lastTile = oneRoundTiles.Last();
                lastTile.Owner  = userId;
                lastTile.Status = TileStatus.UserActive;
            }

            List <RoundTile> userTiles = new List <RoundTile>();

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Stick));

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }
        }
コード例 #16
0
 private Sprite Value2Sprite(TileValue value) =>
 value == TileValue.cross ? crossSprite :
 value == TileValue.circle ? circleSprite :
 emptySprite;
コード例 #17
0
        public void FindWind(Game game, WinningTileSet wts, Player player)
        {
            int pts = 0;

            TileValue windVal = TileValue.WindEast;

            if (player.Wind == WindDirection.East)
            {
                windVal = TileValue.WindEast;
            }
            if (player.Wind == WindDirection.South)
            {
                windVal = TileValue.WindSouth;
            }
            if (player.Wind == WindDirection.West)
            {
                windVal = TileValue.WindWest;
            }
            if (player.Wind == WindDirection.North)
            {
                windVal = TileValue.WindNorth;
            }

            List <Tile> tiles = new List <Tile>();

            for (int i = 0; i < wts.Sets.Length; i++)
            {
                var set = wts.Sets[i];
                if (set.TileSetType == TileSetType.Pong)
                {
                    foreach (var t in set.Tiles)
                    {
                        tiles.Add(t);
                    }
                }
            }

            var matchedUserWindTile = tiles.Where(t => t.Value == windVal);

            if (matchedUserWindTile != null && matchedUserWindTile.Count() >= 3)
            {
                pts += 1;
            }

            if (game.CurrentWind == WindDirection.East)
            {
                windVal = TileValue.WindEast;
            }
            if (game.CurrentWind == WindDirection.South)
            {
                windVal = TileValue.WindSouth;
            }
            if (game.CurrentWind == WindDirection.West)
            {
                windVal = TileValue.WindWest;
            }
            if (game.CurrentWind == WindDirection.North)
            {
                windVal = TileValue.WindNorth;
            }

            var gameWindTile = tiles.Where(t => t.Value == windVal);

            if (gameWindTile != null && gameWindTile.Count() >= 3)
            {
                pts += 1;
            }

            if (pts == 1)
            {
                _winningTypes.Add(WinningType.OneGoodWind);
            }
            else if (pts == 2)
            {
                _winningTypes.Add(WinningType.TwoGoodWind);
            }
        }
コード例 #18
0
ファイル: TileValue.cs プロジェクト: Xwilarg/Rummikub-old
 public bool IsSame(TileValue t)
 => t.value == value && t.color == color;
コード例 #19
0
ファイル: Tile.cs プロジェクト: CovaliuLucian/MinesweeperV2
 public Tile(TileValue tileValue)
 {
     TileValue = tileValue;
 }
コード例 #20
0
 private void SetValue(TileValue newValue) =>
 slotValue = newValue;
コード例 #21
0
ファイル: Tile.cs プロジェクト: VilleKokkarinen/TicTacToe
 /// <summary>
 /// Create a Tile with given parameters
 /// </summary>
 /// <param name="id"></param>
 /// <param name="X"></param>
 /// <param name="Y"></param>
 /// <param name="value"></param>
 /// <param name="panel"></param>
 public Tile(int id, int X, int Y, TileValue value, Panel panel) : base(X, Y)
 {
     ID    = id;
     Value = value;
     Panel = panel;
 }
コード例 #22
0
 public void AddTile(TileValue c)
 {
     tiles.Add(c);
     tileset.Add(c);
 }
コード例 #23
0
ファイル: Tile.cs プロジェクト: lusianm/FoldingFolding
 public void SetTileInfo(Tile tile)
 {
     tileValue    = tile.tileValue;
     sprite.color = tile.originColor;
     originColor  = tile.originColor;
 }
コード例 #24
0
 public TileGroup(TileValue t)
 {
     _tiles = new List <TileValue>();
     _tiles.Add(t);
     _type = GroupType.Unknown;
 }
コード例 #25
0
ファイル: Tile.cs プロジェクト: JacKhinFai/MaxMana
 public Tile(TileValue value)
 {
     this.Value = value;
 }
コード例 #26
0
        public static void SetupForSelfActive(MahjongBuddyDbContext context, string userId, TileType tileType, TileValue tileValue)
        {
            //setup 4 same tiles as user active
            var oneRoundTiles = context.RoundTiles.Where(t => t.Tile.TileType == tileType && t.Tile.TileValue == tileValue);

            if (oneRoundTiles.Count() == 4)
            {
                foreach (var t in oneRoundTiles)
                {
                    t.Owner  = userId;
                    t.Status = TileStatus.UserActive;
                }
            }

            List <RoundTile> userTiles = new List <RoundTile>();

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money));

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }
        }
コード例 #27
0
 public void RemoveTile(TileValue c)
 {
     tiles.Remove(c);
     tileset.Remove(c);
 }
コード例 #28
0
 public Oponent Create(TileValue value)
 {
     Value   = value;
     IsReady = true;
     return(this);
 }
コード例 #29
0
    public void SetValue(Vector2Int position, TileValue value)
    {
        Slot slot = slots.First(s => s.x == position.x && s.y == position.y);

        slot.MakeTurn(value, humanThisDevice: false, locked: true);
    }
コード例 #30
0
        public static void SetupForBoard(MahjongBuddyDbContext context, string userId, TileType tileType, TileValue tileValue)
        {
            //setup tiles where user can kong from board active
            var tilesToKong = context.RoundTiles.Where(t => t.Tile.TileType == tileType && t.Tile.TileValue == tileValue);

            if (tilesToKong.Count() == 4)
            {
                foreach (var t in tilesToKong.Take(3))
                {
                    t.Owner  = userId;
                    t.Status = TileStatus.UserActive;
                }

                var lastTile = tilesToKong.Last();
                lastTile.Owner  = DefaultValue.board;
                lastTile.Status = TileStatus.BoardActive;
            }
            List <RoundTile> userTiles = new List <RoundTile>();

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Circle));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Circle));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.One && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Two && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Three && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Five && t.Tile.TileType == TileType.Money));
            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Six && t.Tile.TileType == TileType.Money));

            userTiles.Add(context.RoundTiles.First(t => t.Tile.TileValue == TileValue.Four && t.Tile.TileType == TileType.Stick));

            foreach (var t in userTiles)
            {
                t.Owner  = userId;
                t.Status = TileStatus.UserActive;
            }
        }