本例创建一个简单的拼图游戏,将一个打乱的图形拼合完整,本例用数字替代图形,游戏界面如图。
程序代码如下。
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; } } }