Search Forum
(57415 Postings)
Search Site/Articles

Archived Articles
712 Articles

C# Books
C# Consultants
What Is C#?
Download Compiler
Code Archive
Archived Articles
Advertise
Contribute
C# Jobs
Beginners Tutorial
C# Contractors
C# Consulting
Links
C# Manual
Contact Us
Legal

GoDiagram for .NET from Northwoods Software www.nwoods.com


              
Printable Version

Logic Game In C#
By Pavel Tsekov

Here is a logic game in C#. The ojective of the game is to click
the green buttons until they turn red. The code gives examples of how
to use windows forms, buttons and LOTS more.

/* 
A little logical game. A little practice with C#.
project created on 02/09/2001 at 01:05
Author : Pavel Tsekov
*/

using System;
using System.Windows.Forms;
using System.Drawing;

class MainForm : Form
{
 private const int BUTTON_COUNT=25; //count of buttons (exact square 16,25,36,49,...)
 private int SQUARE_ROOT=Convert.ToInt32(Math.Sqrt(BUTTON_COUNT)); //the square root of the count
 private int PART_COUNT=2*Convert.ToInt32(Math.Sqrt(BUTTON_COUNT))+1;
 private Button[] btn=new Button[BUTTON_COUNT]; //the array of buttons
 private Label lblAim; //the label in the upper left part of the form
 public MainForm()
 {
  //do some form settings
  this.Left=0;
  this.Top=0;
  this.MaximizeBox=false;
  this.FormBorderStyle=FormBorderStyle.Fixed3D;
  this.Text = "The PressAll GAME";
  //make the buttons and put them on the form
  for (int i=0 ; i < BUTTON_COUNT ; i++)
  {
   btn[i]=new Button();
   btn[i].Width=this.ClientSize.Width/PART_COUNT;
   btn[i].Height=this.ClientSize.Height/PART_COUNT;
   btn[i].Left=this.ClientSize.Width/PART_COUNT+2*(i%SQUARE_ROOT)*this.ClientSize.Width/PART_COUNT;
   btn[i].Top=this.ClientSize.Height/PART_COUNT+2*(i/SQUARE_ROOT)*this.ClientSize.Height/PART_COUNT;
   btn[i].BackColor=Color.SeaGreen;
   btn[i].Text=Convert.ToString(i+1);  
   btn[i].Click+=new EventHandler(btn_Click);
   btn[i].Tag=0;
   this.Controls.Add(btn[i]);
  }
  //make the label and put it on the form
  lblAim=new Label();
  lblAim.Width=this.ClientSize.Width;
  lblAim.Text="All buttons must become RED!";
  this.Controls.Add(lblAim);
 }
 //this function activates when the user clicks on a button
 public void btn_Click(object sender, EventArgs eArgs)
 {
  int i=Convert.ToInt32(((Button)sender).Text)-1;
  ChangeButtonState(i); //pressed button
  ChangeButtonState((i/SQUARE_ROOT)*SQUARE_ROOT+(i+1)%SQUARE_ROOT); //right button
  ChangeButtonState((i/SQUARE_ROOT)*SQUARE_ROOT+(i+SQUARE_ROOT-1)%SQUARE_ROOT); //left button
  ChangeButtonState((i+SQUARE_ROOT)%BUTTON_COUNT); //down button
  ChangeButtonState((i-SQUARE_ROOT+BUTTON_COUNT)%BUTTON_COUNT); //up button
  if (CheckForWin()==true) WonTheGame(); //check whether all the buttons have become RED
 }
 private void ChangeButtonState(int i)
 {
  if (Convert.ToInt32(btn[i].Tag)==0)
  {
   btn[i].Tag=1;
   btn[i].BackColor=Color.Red;
  }
  else
  {
   btn[i].Tag=0;
   btn[i].BackColor=Color.SeaGreen;
  }
 }

 private bool CheckForWin()
 {
  for (int i=0 ; i < BUTTON_COUNT ; i++)
  {
   if (Convert.ToInt32(btn[i].Tag)==0) 
   {
    return false;
   }
  }
  return true;
 }
 private void WonTheGame()
 {
  lblAim.Text="Congratulations!!!";
  for (int i=0 ; i < BUTTON_COUNT ; i++)
  {
   btn[i].Click-=new EventHandler(btn_Click);
  }
 }

 public static void Main(string[] args)
 {
  Application.Run(new MainForm());
 }
}