c#控制檯五子棋
阿新 • • 發佈:2019-01-01
用控制檯來寫五子棋練習。
下面是原始碼:
首先我寫了個Board類,用來處理跟棋盤有關的東西:
其成員有:
private int[,] checkerBoard = new int[20, 20];
public enum checker{}
private void show (){}
public void update(int x, int y, checker c){}
public bool isLand ( int x, int y ){}
private bool win ( int x, int y ){}
詳細如下:
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;
}
在Main方法裡就只關心,下棋這件事了:
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 );
}
}
最後發個效果圖: