Untitled
unknown
csharp
2 years ago
3.5 kB
4
Indexable
namespace domino; using System; using System.Collections.Generic; class Program { static void Main(string[] args) { Game game = new Game(); } } public class DominoPiece { public int End1 { get; private set; } public int End2 { get; private set; } public DominoPiece(int end1, int end2) { End1 = end1; End2 = end2; } public void Flip() { int temp = End1; End1 = End2; End2 = temp; } } public class Bazar { private List<DominoPiece> bazar; public Bazar() { bazar = new List<DominoPiece>(); for (int i = 0; i <= 6; i++) { for (int j = i; j <= 6; j++) { bazar.Add(new DominoPiece(i, j)); } } } public void Shuffle() { for (int i = bazar.Count() - 1; i >= 1; i--) { Random random = new Random(); int j = random.Next(i + 1); var temp = bazar[j]; bazar[j] = bazar[i]; bazar[i] = temp; } } public List<DominoPiece> DealPieces(int numberOfPieces) { List<DominoPiece> dealtPieces = new List<DominoPiece>(); for (int i = 0; i < numberOfPieces; i++) { if (bazar.Count > 0) { dealtPieces.Add(bazar[0]); bazar.RemoveAt(0); } } return dealtPieces; } } public class Player { public List<DominoPiece> Hand { get; private set; } public Player() { Hand = new List<DominoPiece>(); } public void AddPiece(DominoPiece piece) { Hand.Add(piece); } public bool CanPlayPiece(DominoPiece piece, List<DominoPiece> board) { if (!Hand.Contains(piece)) return false; if (board.Count == 0) return true; DominoPiece leftEndPiece = board.First(); DominoPiece rightEndPiece = board.Last(); return piece.End1 == leftEndPiece.End1 || piece.End1 == rightEndPiece.End2 || piece.End2 == leftEndPiece.End1 || piece.End2 == rightEndPiece.End2; } public bool MakeMove(DominoPiece piece, bool isLeft, List<DominoPiece> board) { if (CanPlayPiece(piece, board)) { Hand.Remove(piece); if (isLeft) { board.Insert(0, piece); } else { board.Add(piece); } return true; } return false; } } public class Game { private List<Player> players; private Bazar dominoSet; private List<DominoPiece> board; private int currentPlayerIndex; public Game() { players = new List<Player> { new Player(), new Player() }; dominoSet = new Bazar(); board = new List<DominoPiece>(); dominoSet.Shuffle(); foreach (var player in players) { player.Hand.AddRange(dominoSet.DealPieces(6)); } currentPlayerIndex = 0; } public void MakeMove(DominoPiece piece, bool isLeft) { Player currentPlayer = players[currentPlayerIndex]; if (currentPlayer.CanPlayPiece(piece, board) && currentPlayer.MakeMove(piece, isLeft, board)) { currentPlayerIndex = (currentPlayerIndex + 1) % players.Count; } else { Console.WriteLine("Ход невозможен"); } } }
Editor is loading...
Leave a Comment