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();
}
}
}
}