All pastes #526248 Raw Edit

David Richardson

public text v1 · immutable
#526248 ·published 2007-05-31 18:48 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Queens
{
    public partial class Queens : Form
    {
        public Button[,] buttons = new Button[8, 8];//this is the multidimensional
        //array of buttons that the user can click on (either white/black)
        public Point lastMove;//this is the location of the last move the user makes.
        public int queenCount = 0;
        public int openSquares = 64;
        ////End Globals////
        /*The two Bitmap variables below are the images of the knights. Knight.png is
         * the image that appears in a regular white button thats clicked. Knightblack
         * is the image that appears in a black square. This was necessery because 
         * I had problems getting the software to accept the transparent backround. */

        private Bitmap queenWhite = new Bitmap(typeof(Queens), "QueenWhite.png");
        private Bitmap queenBlack = new Bitmap(typeof(Queens), "QueenBlack.png");
        private Bitmap dotWhite = new Bitmap(typeof(Queens), "DotWhite.png");
        private Bitmap dotBlack = new Bitmap(typeof(Queens), "DotBlack.png");
        bool firstMove = true;//this bool value stays true until the user clicks button
        double counter = 0.0;//value that stores the percentage the user has completed
        
        public Queens()    
        {
            InitializeComponent();//loads the form
            for (int i = 0; i < 8; i++)
                /*This for loop creates each of the buttons in the grid and then fills
                 * in their properties. Including name, width, height, location and
                 * their backround colour */ 
                for (int j = 0; j < 8; j++)
                {
                    // create each of the buttons
                    buttons[i, j] = new Button();
                    // initialize each button here
                    buttons[i, j].Name = "b" + (i * 100 + j).ToString();//button name
                    buttons[i, j].Width = 50;//sets button width
                    buttons[i, j].Height = 50;//sets button height
                    buttons[i, j].Location = new Point(i * 50, j * 50);//sets location
                    // adds the click event handler
                    buttons[i, j].Click += new EventHandler(ButtonClick);//if button is
                    //clicked then go to the function ButtonClick().
                    //the if/else statement below creates a chessboard pattern by
                    //painting alternate squares white and black.
                    if ((i + j) % 2 == 0)//if i + j equals an even number
                        buttons[i, j].BackColor = Color.Black;//sets backround colour
                    else//if i + j equals an odd number
                        buttons[i, j].BackColor = Color.White;//sets backround colour
                        // add the button controls to the form
                    this.Controls.Add(buttons[i, j]);//adds the button to the form
                }
            Invalidate();
        }

        private void ButtonClick(object sender, EventArgs e)
        {
            Button b = (Button)sender;//determines which button was clicked 
            int x = Convert.ToInt32(b.Name.TrimStart('b')) / 100; //gets the position (horizontal)
            int y = Convert.ToInt32(b.Name.TrimStart('b')) % 100;// gets the position (verticle)

            if (buttons[x, y].Image != null)
            {
                MessageBox.Show("This Spot Is Already Taken...", "Error:");
                return;
            }
            for (int i = 0; i < 8; i++)
            {
                //////PRINTS//VERTICAL//LINES//////
                if ((x + i) % 2 == 0)
                    buttons[x, i].Image = dotBlack;
                else
                    buttons[x, i].Image = dotWhite;
                //////PRINTS//HORIZONTAL//LINES/////
                if ((i + y) % 2 == 0)
                    buttons[i, y].Image = dotBlack;
                else
                    buttons[i, y].Image = dotWhite;
                //////PRINTS//DIAGONAL//LINES//////
                /*The following if statements basically just draw all your 
                 * diagonal lines. The reason I used several if statements is 
                 * because the diagonal line has to be drawn in 4 different 
                 * directions. */
                if (x + i < 8 && y + i < 8)
                {   //this if statement draws diagonal lines up and to the right
                    if (buttons[x + i, y + i].BackColor == Color.Black)
                        buttons[x + i, y + i].Image = dotBlack;
                    else
                        buttons[x + i, y + i].Image = dotWhite;
                }
                if (x - i >= 0 && y - i >= 0)
                {   //this if statement draws diagonal lines down and left
                    if (buttons[x - i, y - i].BackColor == Color.Black)
                        buttons[x - i, y - i].Image = dotBlack;
                    else
                        buttons[x - i, y - i].Image = dotWhite;
                }
                if (x + i >= 0 && y - i >= 0 && x + i < 8 && y - i < 8)
                {   //this one draws them up and to the left.
                    if (buttons[x + i, y - i].BackColor == Color.Black)
                       buttons[x + i, y - i].Image = dotBlack;
                    else
                       buttons[x + i, y - i].Image = dotWhite;
                }

                if (x - i >= 0 && y + i >= 0 && x - i < 8 && y + i < 8)
                {   //this one draws them down and to the right
                    if (buttons[x - i, y + i].BackColor == Color.Black)
                        buttons[x - i, y + i].Image = dotBlack;
                    else
                        buttons[x - i, y + i].Image = dotWhite;
                }
            }
            /////////SETS QUEEN IMAGE//////////
            if ((x + y) % 2 == 0)//if x + y equals an even number
                b.Image = queenBlack;//black image of queen is used (blacksquare)
            else//if x + y equals an odd number
                b.Image = queenWhite;//white image of queen is used (whitesquare)
            queenCount++;//increases number of queens that have been played
            openSquares = 0;//resets the number of open squares to 0.
            for (int h = 0; h < 8; h++)
            {   //this simple for loop counts up how many availible squares the
                //usr has. If there are no images it counts it as an open square
                //and then increments the interger value.
                for (int j = 0; j < 8; j++)
                {
                    if (buttons[h, j].Image == null)//if no image
                        openSquares++;//increments count
                }//end for
                labelCount.Text = "Queens: " + queenCount + " || Open Squares: " + openSquares;//updates display
                Invalidate();//updates form
            }//end for
            if (openSquares == 0)
            {   //if there are no free squares then display a message telling user
                //they won.
                MessageBox.Show("Good Job You Completed The Game Using Only: " + queenCount.ToString() + " Queens!", "Game Over...");
                NewGame();//send to form => newgame
            }//end if
        }//end buttonClick()

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {/*When user wants to click File>Exit */
            this.Dispose();//shuts down form and ends all processes
        }//end exitToolStrip

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //displays a form telling the user about the program
            aboutForm about = new aboutForm(); //aboutForm is aboutForm.cs
            about.ShowDialog();//displays the form
        }//end

        private void instructionsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //displays a form telling the user how to use the program
            instructForm instructions = new instructForm();//instructForm.cs
            instructions.ShowDialog();//displays instructions
        }//end

        private void newGameToolStripMenuItem_Click(object sender, EventArgs e)
        {
            NewGame();//calls newGame function
            MessageBox.Show("New Game Started", "Notice...");//notifies usr :(
        }//end newGameToolStrip()

        private void NewGame()
        {   //this function resets the form to it's original state.
            Form form = new Form();//creates a new form
            this.Hide();//hides the current form
            form = new Queens();//sets new form equal to current
            form.Show();//shows the new form
        }//end NewGame()
    }//end public Queens
}//end namespace