如何使用C#实现数字华容道游戏
这篇文章主要介绍如何使用C#实现数字华容道游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
具体内容如下
代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWindowsFormsApp6{undefinedpublicpartialclassForm1:Form{undefinedpublicForm1(){undefinedInitializeComponent();}constintN=4;Button[,]buttons=newButton[N,N];privatevoidForm1_Load(objectsender,EventArgse){undefined//产生所有按钮GenerateAllButtons();}privatevoidbutton1_Click(objectsender,EventArgse){undefinedShuffle();}//打乱顺序voidShuffle(){undefined//多次随机交换两个按钮Randomrnd=newRandom();for(inti=0;i<100;i++){undefinedinta=rnd.Next(N);intb=rnd.Next(N);intc=rnd.Next(N);intd=rnd.Next(N);Swap(buttons[a,b],buttons[c,d]);}}//生成所有按钮voidGenerateAllButtons(){undefinedintx0=100,y0=10,w=45,d=50;for(intr=0;r<N;r++)for(intc=0;c<N;c++){undefinedintnum=r*N+c;Buttonbtn=newButton();btn.Text=(num+1).ToString();btn.Top=y0+r*d;btn.Left=x0+c*d;btn.Width=w;btn.Height=w;btn.Visible=true;btn.Tag=r*N+c;//这个数据用来表示它所在的行列位置//注册事件btn.Click+=newEventHandler(btn_Click);buttons[r,c]=btn;this.Controls.Add(btn);}buttons[N-1,N-1].Visible=false;//最后一个不可见}//交换两个按钮voidSwap(Buttonbtna,Buttonbtnb){undefinedstringt=btna.Text;btna.Text=btnb.Text;btnb.Text=t;boolv=btna.Visible;btna.Visible=btnb.Visible;btnb.Visible=v;}//按钮点击事件处理voidbtn_Click(objectsender,EventArgse){undefinedButtonbtn=senderasButton;//当前点中按钮Buttonblank=FindHiddenButton();//空白按钮//判断与空白按钮是否相邻,如果是,交换if(IsNeighbor(btn,blank)){undefinedSwap(btn,blank);blank.Focus();}//判断是否完成了if(ResultIsOk()){undefinedMessageBox.Show("ok");}}//查找要隐藏的按钮ButtonFindHiddenButton(){undefinedfor(intr=0;r<N;r++)for(intc=0;c<N;c++){undefinedif(!buttons[r,c].Visible){undefinedreturnbuttons[r,c];}}returnnull;}//判断是否相邻boolIsNeighbor(ButtonbtnA,ButtonbtnB){undefinedinta=(int)btnA.Tag;//Tag中记录是行列位置intb=(int)btnB.Tag;intr1=a/N,c1=a%N;intr2=b/N,c2=b%N;if(r1==r2&&(c1==c2-1||c1==c2+1)//左右相邻||c1==c2&&(r1==r2-1||r1==r2+1))returntrue;returnfalse;}//检查是否完成boolResultIsOk(){undefinedfor(intr=0;r<N;r++)for(intc=0;c<N;c++){undefinedif(buttons[r,c].Text!=(r*N+c+1).ToString()){undefinedreturnfalse;}}returntrue;}}}
以上是“如何使用C#实现数字华容道游戏”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。