class Board
{
private int[,] checkerBoard = new int[20, 20];
public enum checker
{
white,
black
}
public Board()
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
checkerBoard[i, j] = 0;
}
}
show();
}
private void show()
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
if (checkerBoard[i, j] == 0)
Console.Write("■");
else
{
if (checkerBoard[i, j] == 1)
Console.Write("○");
else
Console.Write("●");
}
}
Console.WriteLine();
}
}
public void update(int x, int y, checker c)
{
Console.Clear();
switch (c)
{
case checker.white:
if (isLand(x, y))
// checkerBoard[x, y] = "○";
checkerBoard[x, y] = 1;
break;
case checker.black:
if (isLand(x, y))
// checkerBoard[x, y] = "●";
checkerBoard[x, y] = 2;
break;
}
show();
if (win(x, y))
{
Console.WriteLine("You're winer");
}
}
private bool win(int x, int y)
{
bool isWin = false;
int count = 0;
int tempx = x, tempy = y;
//1
while (y > 0)
{
if (checkerBoard[tempx, tempy] == checkerBoard[x, --y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy;
while (y < 19)
{
if (checkerBoard[tempx, tempy] == checkerBoard[x, ++y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy; count = 0;
//2
while (x > 0)
{
if (checkerBoard[tempx, tempy] == checkerBoard[--x, y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy;
while (x < 19)
{
if (checkerBoard[tempx, tempy] == checkerBoard[++x, y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy; count = 0;
//3
while (y > 0 && x > 0)
{
if (checkerBoard[tempx, tempy] == checkerBoard[--x, --y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy;
while (y < 19 && x < 19)
{
if (checkerBoard[tempx, tempy] == checkerBoard[++x, ++y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy; count = 0;
//4
while (y > 0 && x < 19)
{
if (checkerBoard[tempx, tempy] == checkerBoard[++x, --y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
x = tempx; y = tempy;
while (y < 19 && x > 0)
{
if (checkerBoard[tempx, tempy] == checkerBoard[--x, ++y])
{
count++;
}
else
break;
}
if (count >= 4)
{
return true;
}
return isWin;
}
public bool isLand(int x, int y)
{
bool T = true;
if (checkerBoard[x, y] == 0)
{
T = true;
}
else
{
T = false;
}
return T;
}
}
class Program
{
static void Main(string[] args)
{
//Console.SetWindowSize(40, 20);
Console.Title = "GoBang";
Board board = new Board();
int left = 18, top = 9;
bool isTurn = false;
bool temp = false;
Console.SetCursorPosition(left, top);
while (true)
{
ConsoleKey key = Console.ReadKey(true).Key;
switch (key)
{
case ConsoleKey.W:
case ConsoleKey.UpArrow:
if (top < 20 && top > 0)
top--;
break;
case ConsoleKey.S:
case ConsoleKey.DownArrow:
if (top >= 0)
top++;
if (top >= 19)
top = 19;
break;
case ConsoleKey.A:
case ConsoleKey.LeftArrow:
if (left > 0)
left = left - 2;
if (left <= 0)
left = 0;
break;
case ConsoleKey.D:
case ConsoleKey.RightArrow:
if (left / 2 < 20)
left = left + 2;
if (left / 2 >= 19)
left = 38;
break;
case ConsoleKey.Enter:
case ConsoleKey.Spacebar:
if (!board.isLand(top, left / 2))
{
isTurn = !temp;
}
if (!isTurn) //黑棋为先
{
Board.checker c = Board.checker.black;
board.update(top, left / 2, c);
isTurn = true;
}
else
{
Board.checker c = Board.checker.white;
board.update(top, left / 2, c);
isTurn = false;
}
temp = isTurn;
break;
}
Console.SetCursorPosition(left, top);
}
}
}