Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
11 kB
3
Indexable
Never
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FIXALE
{
    internal class Board
    {
        public int selectedPieceX;
        public int selectedPieceY;
        private int[][,] aroundPosition = new int[3][,] 
        {
            new int[, ] { {0, 0}, {0,0}, {0, 0} },
            new int[, ] { {0, 0}, {0,0}, {0, 0} },
            new int[, ] { {0, 0}, {0,0}, {0, 0} }
        };

        char[,] mainBoard = {
                {   ' ',' ',' ',' ',' ','0','-','-','0','-','-','0',' ',' ',' ',' ',' '},
                {   ' ',' ',' ',' ',' ',' ','\\',' ','|',' ','/',' ',' ',' ',' ',' ',' '},
                {   ' ',' ',' ',' ',' ',' ','0','-','0','-','0',' ',' ',' ',' ',' ',' '},
                {   ' ',' ',' ',' ',' ',' ',' ','\\','|','/',' ',' ',' ',' ',' ',' ',' '},
                {   'E',' ',' ',' ','0','-','0','-','0','-','0','-','0',' ',' ',' ','E',},
                {   '|','\\',' ',' ','|','\\','|','/','|','\\','|','/','|',' ',' ','/','|'},
                {   '|',' ','E',' ','0','-','0','-','0','-','0','-','0',' ','E',' ','|',},
                {   '|',' ','|','\\','|','/','|','\\','|','/','|','\\','|','/','|',' ','|'},
                {   'E','-','E','-','E','-','E','-','E','-','E','-','E','-','E','-','E',},
                {   '|',' ','|','/','|','\\','|','/','|','\\','|','/','|','\\','|',' ','|',},
                {   '|',' ','E',' ','*','-','*','-','*','-','*','-','*',' ','E',' ','|',},
                {   '|','/',' ',' ','|','/','|','\\','|','/','|','\\','|',' ',' ','\\','|'},
                {   'E',' ',' ',' ','*','-','*','-','*','-','*','-','*',' ',' ',' ','E',},
                {   ' ',' ',' ',' ',' ',' ',' ','/','|','\\',' ',' ',' ',' ',' ',' ',' ',},
                {   ' ',' ',' ',' ',' ',' ','*','-','*','-','*',' ',' ',' ',' ',' ',' ',},
                {   ' ',' ',' ',' ',' ',' ','/',' ','|',' ','\\',' ',' ',' ',' ',' ',' ',},
                {   ' ',' ',' ',' ',' ','*','-','-','*','-','-','*',' ',' ',' ',' ',' ',},
         };



        public bool PlacePiece(int row, int col, char piece)
        {
            if (row >= 0 && row < mainBoard.GetLength(0) && col >= 0 && col < mainBoard.GetLength(1))
            {
                SelectPiece(row, col, piece); // เรียก SelectPiece เพื่อเปลี่ยนค่า selectedPieceX และ selectedPieceY
                bool canPlace = CheckPath(row, col);

                if (mainBoard[row, col] == 'E' && canPlace == true)
                {
                    mainBoard[row, col] = piece;
                    ClearPiece(selectedPieceX, selectedPieceY);
                    return true; // วางได้
                }
                else
                {
                    Console.WriteLine("This position can't place.");
                    return false;
                }
            }
            else
            {
                Console.WriteLine("ERROR");
                return false; // นอกพื้นที่
            }
        }
        
        public bool CheckPath(int targetRow, int targetCol)
        {
            int startX = -1;
            int startY = -1;
            bool result = false;
            for (int i = 0; i <= 2; i++)
            {
                for (int j = 0; j <= 2; j++)
                {
                    if (aroundPosition[i][j, 0] == targetRow && (aroundPosition[i][j, 1] == targetCol))//เช็คว่าตำแหน่งที่เลือกเดินได้หรือไม่
                    {
                        if (mainBoard[selectedPieceX + startX, selectedPieceY + startY] == '\\' ||
                            mainBoard[selectedPieceX + startX, selectedPieceY + startY] == '|' ||
                            mainBoard[selectedPieceX + startX, selectedPieceY + startY] == '/' ||
                            mainBoard[selectedPieceX + startX, selectedPieceY + startY] == '-'
                            )
                        { result = true; }
                    }
                    else
                    {
                        startY += 1;
                    }
                }
                startX += 1;



            }
            return result;
        }


        //public void ListAllArray()
        //{
        //    for (int i = 0; i <= 2; i++) 
        //    {
        //        for (int j = 0; j <= 2; j++)
        //        {
        //            Console.WriteLine("X,Y");
        //            Console.WriteLine(aroundPosition[i][j, 0]);
        //            Console.WriteLine(aroundPosition[i][j, 1]);
        //        }
        //    }
        //}
    

        public void ClearPiece(int row, int col)
        {
            if (row >= 0 && row < mainBoard.GetLength(0) && col >= 0 && col < mainBoard.GetLength(1))
            {
                mainBoard[row, col] = 'E';
            }
            else
            {
                Console.WriteLine("ERROR");
            }
        }

        public void SelectPiece(int row, int col, char piece)
        {

            if (row >= 0 && row < mainBoard.GetLength(0) && col >= 0 && col < mainBoard.GetLength(1))
            {

                if (mainBoard[row, col] == piece)
                {
                    selectedPieceY = col;
                    selectedPieceX = row;
                    int startX = -2;
                    int startY = -2;

                    for (int i = 0; i <= 2; i++) //
                    {
                        startY = -2;
                        for (int j = 0; j <= 2; j++)
                        {
                            aroundPosition[i][j, 0] = selectedPieceX + startX;
                            aroundPosition[i][j, 1] = selectedPieceY + startY;
                            startY += 2;
                        }
                        startX += 2;
                    }
                }

                else
                {
                    Console.WriteLine("This is not your piece.");
                }
            }

            else
            {
                Console.WriteLine("ERROR");
            }
        }

        //public bool Opponent()
        //{
        //    int targetRow = selectedPieceX + 1;
        //    int targetCol = selectedPieceY;

        //    if (targetRow < mainBoard.GetLength(0) - 2)
        //    {
        //        char target = mainBoard[targetRow, targetCol];
        //        char twoRowsDown = mainBoard[targetRow + 2, targetCol];

        //        if (target == '*' && twoRowsDown == 'E')
        //        {
        //            mainBoard[targetRow, targetCol] = 'E'; // กิน*
        //            mainBoard[targetRow + 2, targetCol] = '0'; // ให้ * หายไปและเปลี่ยนเป็น 0
        //            selectedPieceX = targetRow + 2;
        //            return true;
        //        }
        //    }

        //    if (targetRow < mainBoard.GetLength(0) - 2)
        //    {
        //        char target = mainBoard[targetRow, targetCol];
        //        char twoRowsDown = mainBoard[targetRow + 2, targetCol];

        //        if (target == '0' && twoRowsDown == 'E')
        //        {
        //            mainBoard[targetRow, targetCol] = 'E'; // กิน 0
        //            mainBoard[targetRow + 2, targetCol] = '0'; // ให้ 0 หายไปและเปลี่ยนเป็น *
        //            selectedPieceX = targetRow + 2;
        //            return true;
        //        }
        //    }

        //    return false; // ไม่สามารถทำได้
        //}

        public bool Opponent()
        {
            
            int targetRow = selectedPieceX + 2;
            int targetCol = selectedPieceY;

            // ตรวจสอบว่าหมากที่ถูกเลือกเป็น '*' และตำแหน่งเป้าหมากว่าช่องว่าง ('E')
            if (targetRow < mainBoard.GetLength(0) && mainBoard[selectedPieceX, selectedPieceY] == '*' && mainBoard[targetRow, targetCol] == 'E')
            {
                // กินหมากตรงข้าม
                mainBoard[selectedPieceX, selectedPieceY] = 'E'; // หมากปัจจุบันกลายเป็นช่องว่าง
                mainBoard[targetRow, targetCol] = '0'; // หมากตรงข้ามกลายเป็น '0'
                selectedPieceX = targetRow;
                selectedPieceY = targetCol;
                return true; // ทำการกินสำเร็จ
            }

            // ตรวจสอบว่าหมากที่ถูกเลือกเป็น '0' และตำแหน่งเป้าหมากว่าช่องว่าง ('E')
            if (targetRow < mainBoard.GetLength(0) && mainBoard[selectedPieceX, selectedPieceY] == '0' && mainBoard[targetRow, targetCol] == 'E')
            {
                // กินหมากตรงข้าม
                mainBoard[selectedPieceX, selectedPieceY] = 'E';
                mainBoard[targetRow, targetCol] = '*'; // หมากตรงข้ามกลายเป็น '*'
                selectedPieceX = targetRow;
                selectedPieceY = targetCol;
                return true; // ทำการกินสำเร็จ
            }

            return false;
        }

       
        public void PrintBoard()
        {
            for (int row = 0; row < mainBoard.GetLength(0); row++)
            {
                for (int col = 0; col < mainBoard.GetLength(1); col++)
                {
                    char currentChar = mainBoard[row, col];

                    if (currentChar == '*')
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                    }
                    else if (currentChar == '0')
                    {
                        Console.ForegroundColor = ConsoleColor.Blue;
                    }
                    else
                    {
                        Console.ResetColor();
                    }
                    Console.Write(mainBoard[row, col]);
                    Console.Write(" ");
                }
                Console.WriteLine();
            }
        }
    }
}