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
}
}
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)
// add the button controls to the form
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//////
if (x + i < 8 && y + i < 8)
{
if (buttons[x + i, y + i].BackColor == Color.Black)
buttons[x + i, y + i].Image = dotBlack;
else
buttons[x + i, y + i].Image = dotWhite;
}
for (int j = 8; j >= 0; j--)
{
if (x - i >= 0 && y - i >= 0)
{
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)
{
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)
{
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;
else//if x + y equals an odd number
b.Image = queenWhite;
queenCount++;
openSquares = 0;
for (int h = 0; h < 8; h++)
{
for (int j = 0; j < 8; j++)
{
if (buttons[h, j].Image == null)
openSquares++;
}
labelCount.Text = "Queens: " + queenCount + " || Open Squares: " + openSquares;
Invalidate();
}
if (openSquares == 0)
{
MessageBox.Show("Good Job You Completed The Game Using Only: " + queenCount.ToString() + " Queens!", "Game Over...");
NewGame();
}
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
aboutForm about = new aboutForm();
about.ShowDialog();
}
private void instructionsToolStripMenuItem_Click(object sender, EventArgs e)
{
instructForm instructions = new instructForm();
instructions.ShowDialog();
}
private void newGameToolStripMenuItem_Click(object sender, EventArgs e)
{
NewGame();
MessageBox.Show("New Game Started", "Notice...");
}
private void NewGame()
{
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
}
}
}