/// <summary> /// NouvellePiece /// </summary> /// <param name="version"></param> public void NouvellePiece() { Y = -3; X = 6; SetPoche(); if (Nexts == null) { Pieces = new TetrisPieceList(TetrisPieceList.GetPiece(GetNext())); } else { Pieces = new TetrisPieceList(TetrisPieceList.GetPiece(Nexts.PieceID)); } Nexts = new TetrisPieceList(TetrisPieceList.GetPiece(GetNext())); TetrisHorizontalList tetrisHorizontals = new TetrisHorizontalList(); for (int rotation = 0; rotation < 4; rotation++) { for (int x = 2; x < 12; x++) { if (RotateX(rotation, x) is TetrisPieceList tmpPiece) { double score = PieceTombes.GetAiScore(tmpPiece); tetrisHorizontals.Add(new TetrisHorizontal(rotation, x, score)); } } } XOptimal = tetrisHorizontals.ScoreX; RotationOptimal = tetrisHorizontals.ScoreRotation; }
/// <summary> /// RotateX /// </summary> /// <param name="rotation"></param> /// <param name="x"></param> /// <returns></returns> private TetrisPieceList RotateX(int rotation, int x) { if (new TetrisPieceList(TetrisPieceList.GetPiece(Pieces.PieceID, rotation), x) is TetrisPieceList tetrisPieces) { if (tetrisPieces.Largeur < 12) { return(tetrisPieces); } } return(null); }
/// <summary> /// EffacerLigne /// </summary> /// <returns></returns> public TetrisPieceList EffacerLigne() { int bonus = 1; TetrisPieceList tetrisPieces = new TetrisPieceList(); for (int y = -3; y < 19; y++) { if (PieceTombes.Count(p => p.Y == y) == 10) { Score += bonus; bonus *= 2; tetrisPieces.AddRange(PieceTombes.EffacerLigne(y)); } } return(tetrisPieces); }
/// <summary> /// TetrisAnimation /// </summary> private static void TetrisAnimation(PixelList pixels, TetrisPieceList tetrisPieces) { pixels.BackGround(1); if (tetrisPieces.Any()) { for (int anime = 0; anime < 10; anime++) { foreach (TetrisPiece pieceTombe in tetrisPieces) { if (pixels.GetCoordonnee(pieceTombe.X, pieceTombe.Y) is Pixel pixel) { if (anime % 2 == 0) { foreach (TetrisPiece piece in tetrisPieces) { piece.Couleur = Couleur.Noir; } } else { foreach (TetrisPiece piece in tetrisPieces) { piece.Couleur = piece.TmpCouleur; } } pixel.SetColor(pieceTombe.Couleur); } } Util.SetLeds(); using ManualResetEventSlim waitHandle = new ManualResetEventSlim(false); waitHandle.Wait(TimeSpan.FromMilliseconds(40)); } } }
/// <summary> /// Rotate /// </summary> private TetrisPieceList Rotate(int rotation) { return(new TetrisPieceList(TetrisPieceList.GetPiece(Pieces.PieceID, rotation))); }
/// <summary> /// Constructeur /// </summary> public Tetris() { PieceTombes = new TetrisPieceList(); NouvellePiece(); }