基于C#的winform实现数字华容道游戏_第1页
基于C#的winform实现数字华容道游戏_第2页
基于C#的winform实现数字华容道游戏_第3页
基于C#的winform实现数字华容道游戏_第4页
基于C#的winform实现数字华容道游戏_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第基于C#的winform实现数字华容道游戏数字华容道游戏类似于拼图游戏,只需将数字1~15按顺序排好即可。该游戏逻辑比较简单,易于编程实现。

游戏界面如图:

编程准备:

所需控件:label用于显示时间,一个重新开始的button,一个panel容器来存放数字块(按钮),再加一个timer来计时及判断游戏是否结束。

主要代码:

variables类:

classvariables

{

publicstaticint[]a=newint[16]{1,2,3,4,5,6,7,8,9,10,11,12,13,

14,15,16};

publicstaticButton[,]buttons=newButton[4,4];

}

数组a用于存放数字,随机打乱顺序并分配给buttons。buttons即游戏中的方块。

Methods类:

classMethod

{

//数组打乱顺序

publicint[]NewSorting(int[]a)

{

Randomr=newRandom();

for(inti=0;ia.Length;i++)

{

inttemp=a[i];

intrandomindex=r.Next(0,a.Length);

a[i]=a[randomindex];

a[randomindex]=temp;

}

returna;

}

//向容器中添加16个按钮

publicvoidAddButtons(Panelpanel,Button[,]buttons)

{

//数组随机打乱顺序

int[]s=NewSorting(a);

//每个按钮的宽度及高度

intwidth=32;

intheight=32;

intx0=panel.Location.X;

inty0=panel.Location.Y;

for(inti=0;ibuttons.GetLength(0);i++)

for(intj=0;jbuttons.GetLength(1);j++)

{

Buttonbutt=newButton();

//设置按钮相关属性

butt.Size=newSystem.Drawing.Size(width,height);

butt.Location=newSystem.Drawing.Point(x0+(j+1)*width,y0+(i+1)*height);

butt.Visible=true;

//打乱顺序的数组分配给每个button

butt.Text=s[i*buttons.GetLength(0)+j].ToString();

if(butt.Text=="16")

{

butt.Hide();

}

variables.buttons[i,j]=butt;

//手动添加点击事件

butt.Click+=newEventHandler(butt_Click);

//按钮添加到容器

panel.Controls.Add(butt);

}

}

//自定义点击事件

publicvoidbutt_Click(Objectsender,EventArgse)

{

Buttonbutt=senderasButton;

Buttonbutt_16=Find_Button16();

//判断是否相邻,如果相邻则交换

if(Neighboor(butt,butt_16))

{

swap(butt,butt_16);

butt_16.Focus();

}

}

//找出隐藏的按钮即16所在的按钮

publicButtonFind_Button16()

{

for(inti=0;ibuttons.GetLength(0);i++)

for(intj=0;jbuttons.GetLength(1);j++)

{

if(buttons[i,j].Visible==false)

returnbuttons[i,j];

}

returnnull;

}

//判断两个按钮是否相邻

即两个按钮的坐标位置是否差一个宽度或者高度

publicboolNeighboor(Buttonbutt1,Buttonbutt2)

{

intx1=butt1.Location.X;

inty1=butt1.Location.Y;

intx2=butt2.Location.X;

inty2=butt2.Location.Y;

if(((x1==x2)(Math.Abs(y1-y2)==butt1.Height))||((y1==y2)(Math.Abs(x1-x2)==butt1.Width)))

{

returntrue;

}

returnfalse;

}

//交换两个按钮

交换text与visible

publicvoidswap(Buttonbutt1,Buttonbutt2)

{

strings=butt1.Text;

butt1.Text=butt2.Text;

butt2.Text=s;

boola=butt1.Visible;

butt1.Visible=butt2.Visible;

butt2.Visible=a;

}

//判断游戏是否完成

publicboolGameoverOrNot()

{

for(inti=0;ibuttons.GetLength(1);i++)

for(intj=0;jbuttons.GetLength(0);j++)

{

if(int.Parse(variables.buttons[i,j].Text)!=(i*buttons.GetLength(0)+j+1))

returnfalse;

}

returntrue;

}

}

游戏中的数字方块为Methods类中的AddButtons方法自动生成的,数字方块总共有16个,其中15个的visible属性为true,1个为false。

窗体界面代码:

publicpartialclassForm1:Form

{

publicForm1()

{

InitializeComponent();

}

Methodmethod=newMethod();

intcount;

privatevoidForm1_Load(objectsender,EventArgse)

{

method.AddButtons(panel1,buttons);

label2.Text="0"+"S";

//初始时间

timer1.Start();

//启动计时器

}

privatevoidtimer1_Tick(objectsender,EventArgse)

{

//默认100毫秒刷新一次

count+=1;

label2.Text=(count/10).ToString()+"S";

if(method.GameoverOrNot())

{

timer1.Stop();

MessageBox.Show("挑战成功!");

}

}

privatevoidButtonR_Click(objectsender,EventArgse)

{

timer1.Stop();

for(inti=0;ibuttons.GetLength(0);i++)

for(intj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论