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); }
public bool IsGameOver() { TileValue winner = WhoWon(); bool isMapFull = GameGrid.instance.GetEmptySlots().Length == 0; return(winner != TileValue.empty || isMapFull); }
private TileValue GetRandomTile() { TileValue t = tiles[Random.Range(0, tiles.Count)]; tiles.Remove(t); return(t); }
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); }
public Oponent Create(TileValue value) { Value = value; OnPlayerSlotChose += () => InTurn = false; OnPlayerSlotChose += () => AudioManager.CallAudio("S slot"); IsReady = true; return(this); }
public void ToTileValue_WinnerInput_ValidOutput(Winner input, TileValue expectedOutput) { // arrange // act TileValue result = input.ToTileValue(); // assert result.Should().Be(expectedOutput); }
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); }
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); }
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>()); } }
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(); } } }
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); }
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); }
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); }
//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); } }
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; } }
private Sprite Value2Sprite(TileValue value) => value == TileValue.cross ? crossSprite : value == TileValue.circle ? circleSprite : emptySprite;
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); } }
public bool IsSame(TileValue t) => t.value == value && t.color == color;
public Tile(TileValue tileValue) { TileValue = tileValue; }
private void SetValue(TileValue newValue) => slotValue = newValue;
/// <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; }
public void AddTile(TileValue c) { tiles.Add(c); tileset.Add(c); }
public void SetTileInfo(Tile tile) { tileValue = tile.tileValue; sprite.color = tile.originColor; originColor = tile.originColor; }
public TileGroup(TileValue t) { _tiles = new List <TileValue>(); _tiles.Add(t); _type = GroupType.Unknown; }
public Tile(TileValue value) { this.Value = value; }
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; } }
public void RemoveTile(TileValue c) { tiles.Remove(c); tileset.Remove(c); }
public Oponent Create(TileValue value) { Value = value; IsReady = true; return(this); }
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); }
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; } }