1. 程式人生 > >c#控制檯五子棋

c#控制檯五子棋

用控制檯來寫五子棋練習。
這裡寫圖片描述
下面是原始碼:
首先我寫了個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 );
                }
            }

最後發個效果圖:
這裡寫圖片描述