This code sample is a GDI+ shuffle game aimed for beginners. Attached zip file includes the exe and the Shuffle.cs file.
using
System;
using System.Drawing;
using System.WinForms;
using System.Collections;
namespace ShuffleGame
{
public class Shuffle:Form
{
private Label lbl1= new Label();
private Label lbl2= new Label();
private Label lbl3= new Label();
private Label lbl4= new Label();
private Label lbl5= new Label();
private Label lbl6= new Label();
private Label lbl7= new Label();
private Label lbl8= new Label();
private Label lblBlank= new Label();
private int[,] pos= {{0,0,0},{0,0,0},{0,0,0}};
private int ar,ac;
private int Hits;
private Label lblHits = new Label();
private Hashtable value = new Hashtable();
public static int Main(string [] args)
{
Application.Run(new Shuffle());
return 0;
}
public Shuffle()
{
ar=2;
ac=2;
Hits=0;
this.Text="Shuffle Game";
this.BackColor=Color.RoyalBlue;
this.Size=new Size(310,370);
lbl1.Text="1";
//lbl1.Location=new Point(0,0);
lbl1.BackColor=Color.LightGray;
lbl1.Size= new Size(90,90);
lbl1.Font=new Font("Times New Roman",14);
lbl2.Text="2";
//lbl2.Location=new Point(100,0);
lbl2.BackColor=Color.LightGray;
lbl2.Size= new Size(90,90);
lbl2.Font=new Font("Times New Roman",14);
lbl3.Text="3";
//lbl3.Location=new Point(200,0);
lbl3.BackColor=Color.LightGray;
lbl3.Size= new Size(90,90);
lbl3.Font=new Font("Times New Roman",14);
lbl4.Text="4";
//lbl4.Location=new Point(0,100);
lbl4.BackColor=Color.LightGray;
lbl4.Size= new Size(90,90);
lbl4.Font=new Font("Times New Roman",14);
lbl5.Text="5";
//lbl5.Location=new Point(100,100);
lbl5.BackColor=Color.LightGray;
lbl5.Size= new Size(90,90);
lbl5.Font=new Font("Times New Roman",14);
lbl6.Text="6";
//lbl6.Location=new Point(200,100);
lbl6.BackColor=Color.LightGray;
lbl6.Size= new Size(90,90);
lbl6.Font=new Font("Times New Roman",14);
lbl7.Text="7";
//lbl7.Location=new Point(0,200);
lbl7.BackColor=Color.LightGray;
lbl7.Size= new Size(90,90);
lbl7.Font=new Font("Times New Roman",14);
lbl8.Text="8";
//lbl8.Location=new Point(100,200);
lbl8.BackColor=Color.LightGray;
lbl8.Size= new Size(90,90);
lbl8.Font=new Font("Times New Roman",14);
lblBlank.Location=new Point(200,200);
lblBlank.Size=new Size(90,90);
PlaceRandom();
lblHits.Location=new Point(0,310);
lblHits.Text="Hits so far ---> " +Hits.ToString();
lblHits.BackColor=Color.LightGray;
lblHits.Size=new Size(350,40);
this.Controls.Add(lbl1);
this.Controls.Add(lbl2);
this.Controls.Add(lbl3);
this.Controls.Add(lbl4);
this.Controls.Add(lbl5);
this.Controls.Add(lbl6);
this.Controls.Add(lbl7);
this.Controls.Add(lbl8);
this.Controls.Add(lblHits);
this.Controls.Add(lblBlank);
this.MouseDown += new MouseEventHandler(Win_Click);
this.KeyDown+=new KeyEventHandler(Win_KeyDown);
}
private void Win_Click(Object sender, MouseEventArgs e)
{
Random rnd=new Random();
MessageBox.Show(rnd.Next(8).ToString());
MessageBox.Show("Hello");
}
private void Win_KeyDown(Object sender, KeyEventArgs k)
{
int temp;
switch(k.KeyCode.ToInt32())
{
case 38:
//"Up"
if(ar<2)
{
temp=pos[ar,ac];
pos[ar,ac]=pos[ar+1,ac];
pos[ar+1,ac]=temp;
Swap(pos[ar,ac],temp);
ar++;
Hits++;
}
break;
case 37:
//"Left"
if(ac<2)
{
temp=pos[ar,ac];
pos[ar,ac]=pos[ar,ac+1];
pos[ar,ac+1]=temp;
Swap(pos[ar,ac],temp);
ac++;
Hits++;
}
break;
case 39:
//"Right"
if(ac>0)
{
temp=pos[ar,ac];
pos[ar,ac]=pos[ar,ac-1];
pos[ar,ac-1]=temp;
Swap(pos[ar,ac],temp);
ac--;
Hits++;
}
break;
case 40:
//"Down"
if(ar>0)
{
temp=pos[ar,ac];
pos[ar,ac]=pos[ar-1,ac];
pos[ar-1,ac]=temp;
Swap(pos[ar,ac],temp);
ar--;
Hits++;
}
break;
}
lblHits.Text="Hits so far ---> " +Hits.ToString();
Boolean same=true;
String arrEle="";
for(int ctr=1,i=0;i<3;i++)
{
for(int j=0;j<3;j++,ctr++)
{
/*if(j==2 && i==2)
{
if(pos[i,j]==0)
same=true;
break;
}
else if(pos[i,j]!=ctr)
{
same=false;
break;
}*/
if(pos[i,j]!=ctr)
{
same=false;
break;
}
arrEle=arrEle+"\t"+pos[i,j];
}
arrEle=arrEle+"\n";
}
if(same)
{
MessageBox.Show("You have finished the game in " + Hits.ToString() + " hits","End of Game",2);
}
}
private void Swap(int vNum, int blank)
{
Point temp;
switch(vNum)
{
case 1:
temp=lbl1.Location;
lbl1.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 2:
temp=lbl2.Location;
lbl2.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 3:
temp=lbl3.Location;
lbl3.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 4:
temp=lbl4.Location;
lbl4.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 5:
temp=lbl5.Location;
lbl5.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 6:
temp=lbl6.Location;
lbl6.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 7:
temp=lbl7.Location;
lbl7.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
case 8:
temp=lbl8.Location;
lbl8.Location=lblBlank.Location;
lblBlank.Location=temp;
break;
}
}
private void PlaceRandom()
{
int r,c;
r=10;c=10;
int i=0;
ar=0;
ac=0;
Random rnd= new Random();
int val;
while(i<8)
{
val=rnd.Next(9).ToInt32();
if(numNotExists(val)==true && val>0)
{
pos[ar,ac]=val;
switch(val)
{
case 1:
lbl1.Location=new Point(c,r);
break;
case 2:
lbl2.Location=new Point(c,r);
break;
case 3:
lbl3.Location=new Point(c,r);
break;
case 4:
lbl4.Location=new Point(c,r);
break;
case 5:
lbl5.Location=new Point(c,r);
break;
case 6:
lbl6.Location=new Point(c,r);
break;
case 7:
lbl7.Location=new Point(c,r);
break;
case 8:
lbl8.Location=new Point(c,r);
break;
default:
}
c+=100;
ac++;
if(ac>2)
{
ac=0;
ar++;
}
if(c>300)
{
c=10;
r+=100;
}
i++;
}
else
continue;
}
lblBlank.Location=new Point(c,r);
pos[2,2]=9;
}
private Boolean numNotExists(int num)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
if(pos[i,j]==num)
return false;
}
return true;
}
}
}