代码改变世界

拼图游戏

2012-04-08 20:12  精诚所至 金石为开  阅读(748)  评论(2编辑  收藏  举报

本例创建一个简单的拼图游戏,将一个打乱的图形拼合完整,本例用数字替代图形,游戏界面如图。

20120409200851

程序代码如下。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace eg50_pintu
{
	public partial class MainForm : Form
	{
		int flag;
		private int count;
		private int[] numbers=new int[16];
		public MainForm()
		{
			InitializeComponent();
		}
		
		void T1KeyDown(object sender, KeyEventArgs e)
		{
			if(flag==0)
			{
				string keyId=e.KeyCode.ToString();
				switch(keyId)
				{
						case "Right":LeftPress();
						break;
						case "Left":RightPress();
						break;
						case "Down":UpPress();
						break;
						case "Up":DownPress();
						break;
				}
			}
		}
		private void assign()
		{
			if(numbers[0]!=-1)
				b1.Text=numbers[0].ToString();
			else
			{
				b1.Text="*";
				b1.Visible=false;
			}
			if(numbers[1]!=-1)
				b2.Text=numbers[1].ToString();
			else 
			{
				b2.Text="*";
				b2.Visible=false;
			}
			if(numbers[2]!=-1)
				b3.Text=numbers[2].ToString();
			else
			{
				b3.Text="*";
				b3.Visible=false;
			}
			if(numbers[3]!=-1)
				b4.Text=numbers[3].ToString();
			else
			{
				b4.Text="*";
				b4.Visible=false;
			}
			if(numbers[4]!=-1)
				b5.Text=numbers[4].ToString();
			else
			{
				b5.Text="*";
				b5.Visible=false;
			}
			if(numbers[5]!=-1)
				b6.Text=numbers[5].ToString();
			else
			{
				b6.Text="*";
				b6.Visible=false;
			}
			if(numbers[6]!=-1)
				b7.Text=numbers[6].ToString();
			else
			{
				b7.Text="*";
				b7.Visible=false;
			}
			if(numbers[7]!=-1)
				b8.Text=numbers[7].ToString();
			else
			{
				b8.Text="*";
				b8.Visible=false;
			}
			if(numbers[8]!=-1)
				b9.Text=numbers[8].ToString();
			else
			{
				b9.Text="*";
				b9.Visible=false;
			}
			if(numbers[9]!=-1)
				b10.Text=numbers[9].ToString();
			else
			{
				b10.Text="*";
				b10.Visible=false;
			}
			if(numbers[10]!=-1)
				b11.Text=numbers[10].ToString();
			else
			{
				b11.Text="*";
				b11.Visible=false;
			}
			if(numbers[11]!=-1)
				b12.Text=numbers[11].ToString();
			else
			{
				b12.Text="*";
				b12.Visible=false;
			}
			if(numbers[12]!=-1)
				b13.Text=numbers[12].ToString();
			else
			{
				b13.Text="*";
				b13.Visible=false;
			}
			if(numbers[13]!=-1)
				b14.Text=numbers[13].ToString();
			else
			{
				b14.Text="*";
				b14.Visible=false;
			}
			if(numbers[14]!=-1)
				b15.Text=numbers[14].ToString();
			else
			{
				b15.Text="*";
				b15.Visible=false;
			}
			if(numbers[15]!=-1)
				b16.Text=numbers[15].ToString();
			else
			{
				b16.Text="*";
				b16.Visible=false;
			}
		}
		public void RightPress()
		{
			int chk;
			int loc;
			int swap;
			loc=locator();
			if(((loc+1)%4)==0)
				return;
			swap=numbers[loc+1];
			numbers[loc+1]=-1;
			numbers[loc]=swap;
			MakeVisible();
			assign();
			chk=CheckForCompletion();
			lbl3.Text=count.ToString();
			if(chk==0)
			{
				count++;
				lbl3.Text=count.ToString();
			}
			if(chk==1)
			{
				flag=1;
				lbl1.Visible=true;
			}
		}
		public void LeftPress()
		{
			int chk;
			int loc;
			int swap;
			loc=locator();
			if((loc%4)==0)
				return;
			swap=numbers[loc-1];
			numbers[loc-1]=-1;
			numbers[loc]=swap;
			MakeVisible();
			assign();
			chk=CheckForCompletion();
			lbl3.Text=count.ToString();
			if(chk==0)
			{
				count++;
				lbl3.Text=count.ToString();
			}
			if(chk==1)
			{
				flag=1;
				lbl1.Visible=true;
			}
		}
		public void UpPress()
		{
			int chk;
			int loc;
			int swap;
			loc=locator();
			if(loc<=3)
				return;
			swap=numbers[loc-4];
			numbers[loc]=swap;
			MakeVisible();
			assign();
			chk=CheckForCompletion();
			lbl3.Text=count.ToString();
			if(chk==0)
			{
				count++;
				lbl3.Text=count.ToString();
			}
			if(chk==1)
			{
				flag=1;
				lbl1.Visible=true;
			}
		}
		public void DownPress()
		{
			int chk;
			int loc;
			int swap;
			loc=locator();
			if(loc>1)
				return;
			swap=numbers[loc+4];
			numbers[loc]=swap;
			MakeVisible();
			assign();
			chk=CheckForCompletion();
			lbl3.Text=count.ToString();
			if(chk==0)
			{
				count++;
				lbl3.Text=count.ToString();
			}
			if(chk==1)
			{
				flag=1;
				lbl1.Visible=true;
			}
		}
		private int locator()
		{
			int i;
			for(i=0;i<=15;i++)
			{
				if(numbers[i]==-1)
					break;
				else continue;
			}
			return i;
		}
		private int CheckForCompletion()
		{
			int j;
			for(int i=0;i<=15;i++)
			{
				if(numbers[i]==-1)
					numbers[i]=16;
			}
			for (j=0;j<=14;j++)
			{
				if(numbers[j]>numbers[j+1])
					break;
			}
			if(j==15)
				return 1;
			else 
			{
				for(int i=0;i<=15;i++)
				{
					if(numbers[i]==16)
						numbers[i]=-1;
				}
				return 0;
			}
		}
		private void MakeVisible()
		{
			b1.Visible=true;
			b2.Visible=true;
			b3.Visible=true;
			b4.Visible=true;
			b5.Visible=true;
			b6.Visible=true;
			b7.Visible=true;
			b8.Visible=true;
			b9.Visible=true;
			b10.Visible=true;
			b11.Visible=true;
			b12.Visible=true;
			b13.Visible=true;
			b14.Visible=true;
			b15.Visible=true;
			b16.Visible=true;
		}
	}
}