// clears all tiles
        private void clearGuiTiles(Board modelBoard)
        {
            // use gui=true tiles from modelBoard.internalBoard
            // find the corresponding panels in guiTileRefs
            // ADD OR REMOVE THE CONTAINING PIECE ACCORDINGLY
            // mark the modelBoard tiles as gui=false

            int size = modelBoard.Size;

            for (int row = 0; row < size; row++)
            {
                Tile[] rowOfTiles = modelBoard.InternalBoard[row];
                for (int col = 0; col < size; col++)
                {
                    Tile tile = rowOfTiles[col];
                    if (tile.GuiMustBeUpdated)
                    {
                        try
                        {
                            System.Windows.Forms.Panel guiTile = guiTileRefs[row][col];
                            guiTile.Controls.Clear();
                            // finally mark the tile as gui=false, this is LOGIC CODE
                        }
                        catch (NullReferenceException e)
                        {
                            System.Console.Error.WriteLine("resetting board before its created");
                            // it is better practise to not have this type of error handled here
                            // it is better to have the option to click reset disabled while the
                            // board has not been created yet
                        }

                    }
                }
            }
        }
Exemple #2
0
 public View(Board board)
 {
     this.DoubleBuffered = true;
     this.data = new Data();
     this.board = board; //model
     InitializeComponent(); //view
     renderTiles(board);
 }
Exemple #3
0
 public void test()
 {
     Console.WriteLine("test1");
     Board b = new Board();
     b.populateGameBoard();
     Coord c = new Coord(2, 2); //this piece
     List<Move> vm = b.getValidAvailableMoves(c);
     Console.WriteLine("board created and populated");
     Console.WriteLine(">: NUM OF VALID MOVES FOR THIS PIECE {0}", vm.Count); //this piece
 }
Exemple #4
0
        static void Main(string[] args)
        {
            Board board = new Board();           // model
            Gui gui = new Gui();                 // view
            Controller logic = new Controller(board, gui); // controller - model, view goes in here

            logic.test();

            /*
             * board b contains internal board
             * puplic generateboard, clearboard, populateBoard, addPiecestorows, getTile (ref), getPiecesValidAMoves,
             * getTilesWithPieceMoves, isCoordTileOnBoard, isPieceOnKingRow, movePiece
             * */
        }
Exemple #5
0
 public Controller(Board board, Gui gui)
 {
     this.board = board;
     this.gui = gui;
 }
        // go through the model board, find those with gui needs to be
        // updated set to true, and use the refs array to obtain the gui tile
        // finally set the model back to guineedsupdate=false
        // used only for initially adding the pieces
        private void renderAllPieces(Board modelBoard)
        {
            // use gui=true tiles from modelBoard.internalBoard
            // find the corresponding panels in guiTileRefs
            // ADD OR REMOVE THE CONTAINING PIECE ACCORDINGLY
            // mark the modelBoard tiles as gui=false

            int size = modelBoard.Size;

            for (int row = 0; row < size; row ++)
            {
                Tile[] rowOfTiles = modelBoard.InternalBoard[row];
                for (int col = 0; col < size; col ++)
                {
                    Tile tile = rowOfTiles[col];

                    try
                    {
                        System.Windows.Forms.Panel guiTile = guiTileRefs[row][col];

                        if (tile.IsOccupied)
                        {
                            string player = tile.OccupyingPiece.Player;
                            CirclePanel guiPiece = new CirclePanel(player);

                            guiPiece.BackColor = Color.Transparent; // this set in the current main thread for visual priority
                            guiPiece.Size = new System.Drawing.Size(20, 20);
                            guiPiece.Location = new System.Drawing.Point(10, 10);
                            guiPiece.Click += (sender, eventArgs) => { tileClickedHandler(sender, tile.TileCoord); };
                            guiPiece.Name = "guiPiece"; //
                            guiTile.Controls.Add(guiPiece);
                        }
                        else // remove the corresponding gui piece
                            // since this means guineedsupdating=true, and there are NO pieces on the logic tile
                        {
                            // so remove the guiPiece which should currently be on PiecePanel
                            guiTile.Controls.Clear();
                        }
                    // finally mark the tile as gui=false, this is LOGIC CODE
                    }
                    catch (NullReferenceException e)
                    {
                        System.Console.Error.WriteLine("resetting board before its created");
                        // it is better practise to not have this type of error handled here
                        // it is better to have the option to click reset disabled while the
                        // board has not been created yet
                    }

                }
            }
        }
 /* null the guiTileRefs, clear the tilePanel controls */
 private void undrawTiles(Board board)
 {
     guiTileRefs = null;
     tilePanel.Controls.Clear();
 }
        /* Event response to the vs Computer game option clicked, firstly the board tiles should be drawn
         * the method will need to get the size of the board from the settings (logic/model)
         * it will use the same .py loop method for generating the physical placement of the gui components
         * ADDITIONALLY, it will place a referene of the compontents in an easy to access array. So when the
         * logic needs to access the tiles it can do so without having to resort to the expensive find_withtag
         * gui method such was used in the .py version */
        private void renderTiles(Board modelBoard)
        {
            // get the size of the board from the logic
            //int size = logic.getSize();
            int size = modelBoard.Size;
            // initialise the refs array
            guiTileRefs = new System.Windows.Forms.Panel[size][];

            int tilePanelDimension = this.tilePanel.Size.Height; // height==width
            int tileSize = this.tilePanel.Size.Height / size;
            // tilePanel dimensions are 322*322,
            // 8x40p-wide tiles with 1 pixel outermost border

            // starting board position relative to tilePanel == 1,1
            int baseLocationX = 1;
            int baseLocationY = 1;
            for (int row = 0; row < size; row ++) // multi by
            {

                System.Windows.Forms.Panel[] listOfPanels = new System.Windows.Forms.Panel[size];

                for (int col = 0; col < size; col ++)
                {
                    // create the control
                    System.Windows.Forms.Panel tile = new System.Windows.Forms.Panel();

                    // add control to 'this' form
                    // NOT TIMES PLUS ?=
                    //
                    int newLocationX = baseLocationX + (col * tileSize); // col * size(tile)
                    int newLocationY = baseLocationY + (row * tileSize);
                    tile.Location = new System.Drawing.Point(newLocationX, newLocationY);
                    tile.Size = new System.Drawing.Size(tileSize, tileSize);
                    // get the tileIcon/color from the logical tile
                    // modelBoard obj already made previously
                    Coord coord = new Coord(col, row);
                    Tile modelTile = modelBoard.getTile(coord);
                    //string strColor = modelBoard.getTile(coord).TileIcon;
                    //tile.BackColor = System.Drawing.Color.FromName(strColor);
                    if (modelTile.TileIcon == "white")
                    {
                        tile.BackgroundImage = checkers_wf.Properties.Resources.off_white_micro_fiber_cloth_fabric_texture_190x190;
                    }
                    if (modelTile.TileIcon == "black")
                    {
                        tile.BackgroundImage = checkers_wf.Properties.Resources.Indian_Premium_Black_Slab_464x464;
                    }
                    // add the event handler
                    tile.Click += (sender, eventArgs) => { tileClickedHandler(sender, coord); };

                    tilePanel.Controls.Add(tile);
                    // now add the reference to the gui array
                    listOfPanels[col] = tile;

                }
                guiTileRefs[row] = listOfPanels;
            }
        }