public void ClosedHonorPonFuTest() { var config = new HandConfig(); var tiles = TileIds.Parse(man: "123456", sou: "1178", honors: "111"); var winTile = TileId.Parse(sou: "6"); var hand = Hand(new TileIds(tiles.Append(winTile)).ToTiles34()); var(fuDetails, fu) = CalculateFu(hand, winTile, GetWinGroup(hand, winTile), config); AreEqual(2, fuDetails.Count); IsTrue(fuDetails.Contains(new FuDetail(30, BASE))); IsTrue(fuDetails.Contains(new FuDetail(8, CLOSED_TERMINAL_PON))); AreEqual(fu, 40); tiles = TileIds.Parse(man: "123456", sou: "11678", honors: "11"); winTile = TileId.Parse(honors: "1"); hand = Hand(new TileIds(tiles.Append(winTile)).ToTiles34()); (fuDetails, fu) = CalculateFu(hand, winTile, GetWinGroup(hand, winTile), config); AreEqual(2, fuDetails.Count); IsTrue(fuDetails.Contains(new FuDetail(30, BASE))); IsTrue(fuDetails.Contains(new FuDetail(4, OPEN_TERMINAL_PON))); AreEqual(fu, 40); }
public void PenchanFuTest() { var config = new HandConfig(); var tiles = TileIds.Parse(man: "123456", pin: "55", sou: "12456"); var winTile = TileId.Parse(sou: "3"); var hand = Hand(new TileIds(tiles.Append(winTile)).ToTiles34()); var(fuDetails, fu) = CalculateFu(hand, winTile, GetWinGroup(hand, winTile), config); AreEqual(2, fuDetails.Count); IsTrue(fuDetails.Contains(new FuDetail(30, BASE))); IsTrue(fuDetails.Contains(new FuDetail(2, PENCHAN))); AreEqual(fu, 40); tiles = TileIds.Parse(man: "123456", pin: "55", sou: "34589"); winTile = TileId.Parse(sou: "7"); hand = Hand(new TileIds(tiles.Append(winTile)).ToTiles34()); (fuDetails, fu) = CalculateFu(hand, winTile, GetWinGroup(hand, winTile), config); AreEqual(2, fuDetails.Count); IsTrue(fuDetails.Contains(new FuDetail(30, BASE))); IsTrue(fuDetails.Contains(new FuDetail(2, PENCHAN))); AreEqual(fu, 40); }
public void IsSuukantsuTest() { var melds = new List <Meld> { MakeMeld(MeldType.KAN, sou: "1111"), MakeMeld(MeldType.KAN, sou: "3333"), MakeMeld(MeldType.KAN, pin: "5555"), MakeMeld(MeldType.CHANKAN, man: "2222") }; IsTrue(new Suukantsu().IsConditionMet(null, new object[] { melds })); var tiles = TileIds.Parse(man: "222", pin: "44555", sou: "111333"); var winTile = TileId.Parse(pin: "4"); melds = new List <Meld> { MakeMeld(MeldType.KAN, sou: "1111"), MakeMeld(MeldType.KAN, sou: "3333"), MakeMeld(MeldType.KAN, pin: "5555"), MakeMeld(MeldType.KAN, man: "2222") }; var result = EstimateHandValue(tiles, winTile, melds); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(70, result.Fu); AreEqual(1, result.Yaku.Count); }
private TileId GenerateTile(Vector2Int tileChunkPos, Vector2Int tileWorldPos, List <ChunkVein> veins, ushort chunkSize) { // Air if (tileWorldPos.y > 0) { return(TileId.Sky); } // Grass if (tileWorldPos.y == 0) { return(TileId.Grass); } // Veins bool startVein = false; TileId vein = StartVein(tileChunkPos, tileChunkPos, veins, chunkSize, out startVein); // Dirt or vein. if (startVein) { return(vein); } else { return(TileId.Dirt); } }
private static void PrintHandResult(TileIds tiles, TileId winTile, List <Meld> melds, HandResponse result) { Console.WriteLine($"{tiles.ToOneLineString()}"); var IsOpened = false; if (melds is null) { Console.WriteLine("鳴きなし"); } else { foreach (var meldItem in melds) { Console.WriteLine(meldItem); } IsOpened = melds.Count(x => x.Opened) > 0; } Console.WriteLine($"和了牌: {new TileIds(new List<TileId> { winTile }).ToOneLineString()}"); foreach (var yakuItem in result.Yaku) { var han = IsOpened ? yakuItem.HanOpen : yakuItem.HanClosed; Console.WriteLine($"{yakuItem.Japanese}\t{han}翻"); } Console.WriteLine($"{result.Han}翻 {result.Fu}符"); Console.WriteLine($"{result.Cost.Main}点"); foreach (var fuItem in result.FuDetailSet) { Console.WriteLine($"符: {fuItem.Fu}\tReason: {fuItem.Reason}"); } Console.WriteLine(""); }
public HoleTile(TileId id) : base(id) { ConnectsToSand = true; ConnectsToWater = true; ConnectsToLava = true; }
public override Task <ElevationTile> GetElevationTileData(TileId tileId, CancellationToken cancellationToken = default) { if (!_tiles.Contains(tileId)) { return(ElevationTile.FromNull()); } // Read the elevation data from the corresponding file in streaming assets. Files are named by the TileId's quadkey. var elevationTileData = File.ReadAllBytes(Path.Combine(ElevationDataDirectory, tileId.ToKey() + ".et")); // The ElevationTile data has this layout: // * 0 - magic id (0x12345678) // * 4 - min elevation in meters (float) // * 8 - tile elevation range in meters (float) // * 12 - normalized elevation values (ushorts - 257*257 entries). var minElevationInMeters = BitConverter.ToSingle(elevationTileData, 4); var elevationRangeInMeters = BitConverter.ToSingle(elevationTileData, 8); var elevationTile = ElevationTile.FromNormalizedData( tileId, 257, 257, minElevationInMeters, elevationRangeInMeters, elevationTileData, 12 /* offset */); // No async code was required so wrap in Task. return(Task.FromResult(elevationTile)); }
public bool CanBePlaced(int x, int y, TileId tile) { if (GetTile(x, y) != TileId.EMPTY) { return(false); } if (GetTile(x + 1, y + 1) == TileId.ROAD && GetTile(x, y + 1) == TileId.ROAD && GetTile(x + 1, y) == TileId.ROAD) { return(false); } if (GetTile(x - 1, y - 1) == TileId.ROAD && GetTile(x - 1, y) == TileId.ROAD && GetTile(x, y - 1) == TileId.ROAD) { return(false); } if (GetTile(x + 1, y - 1) == TileId.ROAD && GetTile(x, y - 1) == TileId.ROAD && GetTile(x + 1, y) == TileId.ROAD) { return(false); } if (GetTile(x - 1, y + 1) == TileId.ROAD && GetTile(x - 1, y) == TileId.ROAD && GetTile(x, y + 1) == TileId.ROAD) { return(false); } return(true); }
public void IsEastTest() { var(playerWind, roundWind) = (EAST, WEST); var tiles = Tiles34.Parse(man: "23422", sou: "234567", honors: "111"); IsTrue(new YakuhaiEast().IsConditionMet(Hand(tiles), new object[] { playerWind, roundWind })); var tiles_ = TileIds.Parse(man: "23422", sou: "234567", honors: "111"); var winTile = TileId.Parse(honors: "1"); var result = EstimateHandValue(tiles_, winTile, config: new HandConfig( isTsumo: false, isRiichi: false, playerWind: playerWind, roundWind: roundWind)); AreEqual(null, result.Error); AreEqual(1, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); roundWind = EAST; result = EstimateHandValue(tiles_, winTile, config: new HandConfig( isTsumo: false, isRiichi: false, playerWind: playerWind, roundWind: roundWind)); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(40, result.Fu); AreEqual(2, result.Yaku.Count); }
private static bool IsAkaDora(TileId tile, bool akaEnabled) { return(akaEnabled && (tile.Value == FIVE_RED_MAN || tile.Value == FIVE_RED_PIN || tile.Value == FIVE_RED_SOU)); }
public void IsJunchanTest() { var tiles = Tiles34.Parse(man: "123789", pin: "12399", sou: "789"); IsTrue(new Junchan().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "111999", sou: "111", honors: "22333"); IsFalse(new Junchan().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "111999", pin: "11999", sou: "111999"); IsFalse(new Junchan().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "123789", pin: "12399", sou: "789"); var winTile = TileId.Parse(man: "2"); var result = EstimateHandValue(tiles_, winTile); AreEqual(null, result.Error); AreEqual(3, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); var melds = new List <Meld> { MakeMeld(MeldType.CHI, sou: "789") }; result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(30, result.Fu); AreEqual(1, result.Yaku.Count); }
public void IsIttsuTest() { var tiles = Tiles34.Parse(man: "123456789", sou: "123", honors: "22"); IsTrue(new Ittsu().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "112233456789", honors: "22"); IsTrue(new Ittsu().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "122334567789", honors: "11"); IsFalse(new Ittsu().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "123456789", sou: "123", honors: "22"); var winTile = TileId.Parse(sou: "3"); var result = EstimateHandValue(tiles_, winTile); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); var melds = new List <Meld> { MakeMeld(MeldType.CHI, man: "123") }; result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(1, result.Han); AreEqual(30, result.Fu); AreEqual(1, result.Yaku.Count); }
public void IsToitoiTest() { var tiles = Tiles34.Parse(man: "333", pin: "44555", sou: "111333"); IsTrue(new Toitoi().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(pin: "777888999", sou: "777", honors: "44"); IsTrue(new Toitoi().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "333", pin: "44555", sou: "111333"); var winTile = TileId.Parse(pin: "5"); var melds = new List <Meld> { MakeMeld(MeldType.PON, sou: "111"), MakeMeld(MeldType.PON, sou: "333") }; var result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); tiles_ = TileIds.Parse(pin: "777888999", sou: "777", honors: "44"); winTile = TileId.Parse(pin: "9"); melds = new List <Meld> { MakeMeld(MeldType.PON, sou: "777") }; result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); }
public void IsHonrotoTest() { var tiles = Tiles34.Parse(man: "111", sou: "111999", honors: "11222"); IsTrue(new Honroto().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "1199", pin: "11", honors: "22334466"); IsTrue(new Honroto().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "111", sou: "111999", honors: "11222"); var winTile = TileId.Parse(honors: "2"); var melds = new List <Meld> { MakeMeld(MeldType.PON, sou: "111") }; var result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(4, result.Han); AreEqual(50, result.Fu); AreEqual(2, result.Yaku.Count); tiles_ = TileIds.Parse(man: "1199", pin: "11", honors: "22334466"); winTile = TileId.Parse(man: "1"); result = EstimateHandValue(tiles_, winTile); AreEqual(4, result.Han); AreEqual(25, result.Fu); }
public void IsSanshokuTest() { var tiles = Tiles34.Parse(man: "123", pin: "12345677", sou: "123"); IsTrue(new Sanshoku().IsConditionMet(Hand(tiles))); tiles = Tiles34.Parse(man: "23455", pin: "123", sou: "123456"); IsFalse(new Sanshoku().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "12399", pin: "123", sou: "123456"); var winTile = TileId.Parse(man: "2"); var result = EstimateHandValue(tiles_, winTile); AreEqual(null, result.Error); AreEqual(2, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); var melds = new List <Meld> { MakeMeld(MeldType.CHI, sou: "123") }; result = EstimateHandValue(tiles_, winTile, melds); AreEqual(null, result.Error); AreEqual(1, result.Han); AreEqual(30, result.Fu); AreEqual(1, result.Yaku.Count); }
public void IsRyanpeikouTest() { var tiles = Tiles34.Parse(man: "22", pin: "223344", sou: "112233"); IsTrue(new Ryanpeikou().IsConditionMet(Hand(tiles, 1))); tiles = Tiles34.Parse(man: "22", sou: "111122223333"); IsTrue(new Ryanpeikou().IsConditionMet(Hand(tiles, 1))); tiles = Tiles34.Parse(man: "123", pin: "23444", sou: "112233"); IsFalse(new Ryanpeikou().IsConditionMet(Hand(tiles))); var tiles_ = TileIds.Parse(man: "33", pin: "223344", sou: "112233"); var winTile = TileId.Parse(pin: "3"); var result = EstimateHandValue(tiles_, winTile); AreEqual(null, result.Error); AreEqual(3, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); var melds = new List <Meld> { MakeMeld(MeldType.CHI, sou: "123") }; result = EstimateHandValue(tiles_, winTile, melds); AreNotEqual(null, result.Error); }
public TileId Tsumo() { var tsumo = new TileId(tiles_[0]); tiles_.RemoveAt(0); return(tsumo); }
public void DisabledDoubleYakumanTest() { var tiles = TileIds.Parse(man: "19", pin: "19", sou: "119", honors: "1234567"); var winTile = TileId.Parse(sou: "1"); var result = EstimateHandValue(tiles, winTile, config: new HandConfig(options: new OptionalRules(hasDoubleYakuman: false))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(0, result.Fu); AreEqual(1, result.Yaku.Count); tiles = TileIds.Parse(man: "333", pin: "44455", sou: "111444"); winTile = TileId.Parse(pin: "5"); result = EstimateHandValue(tiles, winTile, config: new HandConfig(isTsumo: true, options: new OptionalRules(hasDoubleYakuman: false))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(50, result.Fu); AreEqual(1, result.Yaku.Count); tiles = TileIds.Parse(man: "11122345678999"); winTile = TileId.Parse(man: "2"); result = EstimateHandValue(tiles, winTile, config: new HandConfig(options: new OptionalRules(hasDoubleYakuman: false))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(50, result.Fu); AreEqual(1, result.Yaku.Count); tiles = TileIds.Parse(sou: "22", honors: "111222333444"); winTile = TileId.Parse(honors: "4"); result = EstimateHandValue(tiles, winTile, config: new HandConfig(options: new OptionalRules(hasDoubleYakuman: false))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(60, result.Fu); AreEqual(1, result.Yaku.Count); }
/// <summary> /// /// </summary> /// <param name="id">The type of this tile.</param> /// <param name="solidityType"></param> /// <param name="textureSourceRectangle">The appropriate source rectangle to use. see <c>SourceRects</c>.</param> /// <param name="drawColor"></param> public Tile(TileId id, Solidity solidityType, Rectangle textureSourceRectangle, Color drawColor, TileSide tileSide) { this.Id = id; this.SolidityType = solidityType; this.SourceRectangle = textureSourceRectangle; this.DrawColor = drawColor; this.Side = tileSide; }
public override int GetHashCode() { unchecked { int hashCode = TileId.GetHashCode(); hashCode = (hashCode * 397) ^ TileSetId.GetHashCode(); return(hashCode); } }
public static Sprite[] GetSprites(TileId tile) { if (!_tiles.ContainsKey(tile)) { return(new Sprite[0]); } return(_tiles[tile].ToArray()); }
private void FrmMain_KeyDown(object sender, KeyEventArgs e) { if (ci < 0 || cj < 0) { return; } if (e.KeyCode == Keys.Right) { ci++; } if (e.KeyCode == Keys.Left) { ci--; } if (e.KeyCode == Keys.Down) { cj++; } if (e.KeyCode == Keys.Up) { cj--; } if (ci < 0) { ci = 0; } if (ci >= nbTilesX) { ci = nbTilesX - 1; } if (cj < 0) { cj = 0; } if (cj >= nbTilesY) { cj = nbTilesY - 1; } PictureBox aPicBox = sTiles[ci, cj]; TileId aTileId = (TileId)(aPicBox).Tag; ci = aTileId.i; cj = aTileId.j; ShowSelection(aPicBox); }
public void LoadTile(TileId tileId, int ox, int oy, System.Action <bool, RendererOperation> onComplete) { var ix = ((tileId.X - ox) + ox % m_tileCountX) % m_tileCountX; var iy = ((tileId.Y - oy) + oy % m_tileCountY) % m_tileCountY; var tile = m_tileInfo[ix, iy]; RenderTile(tile, ox, oy, tileId.X, tileId.Y, tileId.Zoom); //throw new System.NotImplementedException(); }
public SaplingTile(TileId id, Tile onType, Tile growsTo) : base(id) { _onType = onType; _growsTo = growsTo; ConnectsToSand = onType.ConnectsToSand; ConnectsToGrass = onType.ConnectsToGrass; ConnectsToWater = onType.ConnectsToWater; ConnectsToLava = onType.ConnectsToLava; }
public void IsRenhouYakumanTest() { var tiles = TileIds.Parse(man: "234456", pin: "66", sou: "123444"); var winTile = TileId.Parse(sou: "4"); var result = EstimateHandValue(tiles, winTile, config: new HandConfig(isRenhou: true, options: new OptionalRules(renhouAsYakuman: true))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(1, result.Yaku.Count); }
public void IsNotDaisharinTest() { var tiles = TileIds.Parse(pin: "22334455667788"); var winTile = TileId.Parse(pin: "8"); var result = EstimateHandValue(tiles, winTile); AreEqual(null, result.Error); AreEqual(11, result.Han); AreEqual(4, result.Yaku.Count); }
void aTile_Click(object sender, EventArgs e) { PictureBox aPicBox = (PictureBox)sender; TileId aTileId = (TileId)(aPicBox).Tag; ci = aTileId.i; cj = aTileId.j; ShowSelection(aPicBox); }
public void SixtupleYakumanTest() { var tiles = TileIds.Parse(honors: "11122233344455"); var winTile = TileId.Parse(honors: "5"); var config = new HandConfig(isTenhou: true); var result = EstimateHandValue(tiles, winTile, config: config); AreEqual(null, result.Error); AreEqual(78, result.Han); AreEqual(192000, result.Cost.Main); }
public void IsDaisharinTest() { var tiles = TileIds.Parse(pin: "22334455667788"); var winTile = TileId.Parse(pin: "8"); var result = EstimateHandValue(tiles, winTile, config: new HandConfig(options: new OptionalRules(hasDaisharin: true))); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(1, result.Yaku.Count); AreEqual("Daisharin", result.Yaku[0].Name); }
public void IsChiihouTest() { var tiles = TileIds.Parse(man: "234456", pin: "66", sou: "123444"); var winTile = TileId.Parse(sou: "4"); var result = EstimateHandValue(tiles, winTile, config: new HandConfig(isChiihou: true)); AreEqual(null, result.Error); AreEqual(13, result.Han); AreEqual(40, result.Fu); AreEqual(1, result.Yaku.Count); }
public TreeTile(TileId id, int color, int barkColor1, int barkColor2) : base(id, SpriteSheet.GetSprites(TileId.Grass)) { _ssprites = SpriteSheet.GetSprites(TileId.Tree); _color = color; _barkColor1 = barkColor1; _barkColor2 = barkColor2; TileColor = color + barkColor1 + barkColor2; }