C#實現(xiàn)拼圖游戲_第1頁
C#實現(xiàn)拼圖游戲_第2頁
C#實現(xiàn)拼圖游戲_第3頁
C#實現(xiàn)拼圖游戲_第4頁
C#實現(xiàn)拼圖游戲_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C#實現(xiàn)拼圖游戲使用VS的c#來實現(xiàn)

界面設計:picturebox控件來顯示圖片,button控件來實現(xiàn)按鈕點擊的各類事件:圖片重排、換圖、查看原圖等,使用numericUpDown控件來控制切割的邊數(shù)。如下圖:

把要拼的圖片放進resource文件里

設計函數(shù),使用cutpicture類來切割圖片

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Drawing;

usingSystem.Drawing.Imaging;

usingSystem.Windows.Forms;

namespace拼圖游戲

classCutPicture

publicstaticstringpicturePath="";

publicstaticListBitmapBitMapList=null;

publicstaticImageResize(stringpath,intiwidth,intiheignt)

Imagethumbnail=null;

varimg=Image.FromFile(path);

thumbnail=img.GetThumbnailImage(iwidth,iheignt,null,IntPtr.Zero);

thumbnail.Save(Application.StartupPath.ToString()+"http://Picture//img.jpeg");

catch(Exceptionexp)

Console.WriteLine(exp.Message);

returnthumbnail;

publicstaticBitmapCut(Imageb,intstartX,intstartY,intiwidth,intiheight)

if(b==null)

{returnnull;}

intw=b.Width;

inth=b.Height;

if(startX=w||startY=h)

{returnnull;}

if(startX+iwidthw)

{iwidth=w-startX;}

if(startY+iheighth)

{iheight=h-startY;}

Bitmapbmpout=newBitmap(iwidth,iheight,PixelFormat.Format24bppRgb);

Graphicsg=Graphics.FromImage(bmpout);

g.DrawImage(b,newRectangle(0,0,iwidth,iheight),newRectangle(startX,startY,iwidth,iheight),

GraphicsUnit.Pixel);

g.Dispose();

returnbmpout;

catch

returnnull;

}

Form_Main函數(shù)為主函數(shù)

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows.Forms;

usingSystem.IO;

namespace拼圖游戲

publicpartialclassForm_Main:Form

PictureBox[]picturelist=null;

SortedDictionarystring,BitmappictureLocationDict=newSortedDictionarystring,Bitmap

Point[]pointlist=null;

SortedDictionarystring,PictureBoxpictureBoxLocationDict=newSortedDictionarystring,PictureBox

PictureBoxcurrentpicturebox=null;

PictureBoxhavetopicturebox=null;

Pointoldlocation=Point.Empty;

Pointnewlocation=Point.Empty;

PointmouseDownPoint=Point.Empty;

Rectanglerect=Rectangle.Empty;

boolisDrag=false;

publicstringoriginalpicpath;

privateintImgnubers

return(int)this.numericUpDown1.Value;

privateintsidelength

get{return600/this.Imgnubers;}

publicvoidInitRandomPictureBox()

pnl_Picture.Controls.Clear();

picturelist=newPictureBox[Imgnubers*Imgnubers];

pointlist=newPoint[Imgnubers*Imgnubers];

for(inti=0;ithis.Imgnubers;i++)

for(intj=0;jthis.Imgnubers;j++)

PictureBoxpic=newPictureBox();

pic.Name="picturebox"+(j+i*Imgnubers+1).ToString();

pic.Location=newPoint(j*sidelength,i*sidelength);

pic.Size=newSize(sidelength,sidelength);

pic.Visible=true;

pic.BorderStyle=BorderStyle.FixedSingle;

pic.MouseDown+=newMouseEventHandler(picture_MouseDown);

pic.MouseMove+=newMouseEventHandler(picture_MouseMove);

pic.MouseUp+=newMouseEventHandler(picture_MouseUp);

pnl_Picture.Controls.Add(pic);

picturelist[j+i*Imgnubers]=pic;

pointlist[j+i*Imgnubers]=newPoint(j*sidelength,i*sidelength);

publicvoidFlow(stringpath,booldisorder)

InitRandomPictureBox();

Imagebm=CutPicture.Resize(path,600,600);

CutPicture.BitMapList=newListBitmap

for(inty=0;yy+=sidelength)

for(intx=0;x600;x+=sidelength)

Bitmaptemp=CutPicture.Cut(bm,x,y,sidelength,sidelength);

CutPicture.BitMapList.Add(temp);

ImporBitMap(disorder);

publicvoidImporBitMap(booldisorder)

inti=0;

foreach(PictureBoxiteminpicturelist)

Bitmaptemp=CutPicture.BitMapList[i];

item.Image=temp;

i++;

if(disorder)ResetPictureLoaction();

catch(Exceptionexp)

Console.WriteLine(exp.Message);

publicvoidResetPictureLoaction()

Point[]temp=DisOrderLocation();

inti=0;

foreach(PictureBoxiteminpicturelist)

item.Location=temp[i];

i++;

publicPoint[]DisOrderLocation()

Point[]tempArray=(Point[])pointlist.Clone();

for(inti=tempArray.Length-1;ii--)

Randomrand=newRandom();

intp=rand.Next(i);

Pointtemp=tempArray[p];

tempArray[p]=tempArray[i];

tempArray[i]=temp;

returntempArray;

privatevoidForm_Main_Load(objectsender,EventArgse)

publicvoidinitgame()

/*picturelist=newPictureBox[9]{pictureBox1,pictureBox2,pictureBox3,pictureBox4,pictureBox5,pictureBox6,pictureBox7,pictureBox8,pictureBox9};

pointlist=newPoint[9]{newPoint(0,0),newPoint(100,0),newPoint(200,0),newPoint(0,100),newPoint(100,100),newPoint(200,100),newPoint(0,200),newPoint(100,200),newPoint(200,200)};

*/if(!Directory.Exists(Application.StartupPath.ToString()+"http://Resources"))

Directory.CreateDirectory(Application.StartupPath.ToString()+"http://Resources");

Properties.Resources._0.Save(Application.StartupPath.ToString()+"http://Resources//0.jpg");

Properties.Resources._1.Save(Application.StartupPath.ToString()+"http://Resources//1.jpg");

Properties.Resources._2.Save(Application.StartupPath.ToString()+"http://Resources//2.jpg");

Properties.Resources._3.Save(Application.StartupPath.ToString()+"http://Resources//3.jpg");

Properties.Resources._4.Save(Application.StartupPath.ToString()+"http://Resources//4.jpg");

Randomr=newRandom();

inti=r.Next(5);

originalpicpath=Application.StartupPath.ToString()+"http://Resources//"+i.ToString()+".jpg";

Flow(originalpicpath,true);

publicPictureBoxGetPictureBoxByLocation(intx,inty)

PictureBoxpic=null;

foreach(PictureBoxiteminpicturelist)

if(xitem.Location.Xyitem.Location.Yitem.Location.X+sidelengthxitem.Location.Y+sidelengthy)

{pic=item;}

returnpic;

publicPictureBoxGetPictureBoxByHashCode(stringhascode)

PictureBoxpic=null;

foreach(PictureBoxiteminpicturelist)

if(hascode==item.GetHashCode().ToString())

pic=item;

returnpic;

privatevoidpicture_MouseDown(objectsender,MouseEventArgse)

oldlocation=newPoint(e.X,e.Y);

currentpicturebox=GetPictureBoxByHashCode(sender.GetHashCode().ToString());

MoseDown(currentpicturebox,sender,e);

publicvoidMoseDown(PictureBoxpic,objectsender,MouseEventArgse)

if(e.Button==MouseButtons.Left)

oldlocation=e.Location;

rect=pic.Bounds;

privatevoidpicture_MouseMove(objectsender,MouseEventArgse)

if(e.Button==MouseButtons.Left)

isDrag=true;

rect.Location=getPointToForm(newPoint(e.Location.X-oldlocation.X,e.Location.Y-oldlocation.Y));

this.Refresh();

privatePointgetPointToForm(Pointp)

returnthis.PointToClient(pictureBox1.PointToScreen(p));

privatevoidreset()

mouseDownPoint=Point.Empty;

rect=Rectangle.Empty;

isDrag=false;

privatevoidpicture_MouseUp(objectsender,MouseEventArgse)

oldlocation=newPoint(currentpicturebox.Location.X,currentpicturebox.Location.Y);

if(oldlocation.X+e.X600||oldlocation.Y+e.Y600||oldlocation.X+e.X0||oldlocation.Y+e.Y0)

return;

havetopicturebox=GetPictureBoxByLocation(oldlocation.X+e.X,oldlocation.Y+e.Y);

newlocation=newPoint(havetopicturebox.Location.X,havetopicturebox.Location.Y);

havetopicturebox.Location=oldlocation;

PictureMouseUp(currentpicturebox,sender,e);

if(Judge())

MessageBox.Show("恭喜拼圖成功");

publicvoidPictureMouseUp(PictureBoxpic,objectsender,MouseEventArgse)

if(e.Button==MouseButtons.Left)

if(isDrag)

isDrag=false;

pic.Location=newlocation;

this.Refresh();

reset();

publicboolJudge()//判斷是否成功

boolresult=true;

inti=0;

foreach(PictureBoxiteminpicturelist)

if(item.Location!=pointlist[i])

{result=false;}

i++;

returnresult;

publicvoidExchangePictureBox(MouseEventArgse)

publicPictureBox[]DisOrderArray(PictureBox[]pictureArray)

PictureBox[]tempArray=pictureArray;

for(inti=tempArray.Length-1;ii--)

Randomrand=newRandom();

intp=rand.Next(i);

PictureBoxtemp=tempArray[p];

tempArray[p]=tempArray[i];

tempArray[i]=temp;

returntempArray;

publicForm_Main()

InitializeComponent();

initgame();

privatevoidpnl_Picture_Paint(objectsender,PaintEventArgse)

privatevoidsp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論