基于C#的winform實現(xiàn)數(shù)字華容道游戲_第1頁
基于C#的winform實現(xiàn)數(shù)字華容道游戲_第2頁
基于C#的winform實現(xiàn)數(shù)字華容道游戲_第3頁
基于C#的winform實現(xiàn)數(shù)字華容道游戲_第4頁
基于C#的winform實現(xiàn)數(shù)字華容道游戲_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第基于C#的winform實現(xiàn)數(shù)字華容道游戲數(shù)字華容道游戲類似于拼圖游戲,只需將數(shù)字1~15按順序排好即可。該游戲邏輯比較簡單,易于編程實現(xiàn)。

游戲界面如圖:

編程準備:

所需控件:label用于顯示時間,一個重新開始的button,一個panel容器來存放數(shù)字塊(按鈕),再加一個timer來計時及判斷游戲是否結(jié)束。

主要代碼:

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];

}

數(shù)組a用于存放數(shù)字,隨機打亂順序并分配給buttons。buttons即游戲中的方塊。

Methods類:

classMethod

{

//數(shù)組打亂順序

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)

{

//數(shù)組隨機打亂順序

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();

//設(shè)置按鈕相關(guān)屬性

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

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

butt.Visible=true;

//打亂順序的數(shù)組分配給每個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;

}

}

游戲中的數(shù)字方塊為Methods類中的AddButtons方法自動生成的,數(shù)字方塊總共有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("挑戰(zhàn)成功!");

}

}

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論