




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術素材考試題及答案
- 商業(yè)樓宇中央空調改造工程協(xié)議
- 市場推廣制作與執(zhí)行合同書
- 在線服務隱私保護合同協(xié)議書
- 金融投資產品開發(fā)協(xié)議
- 貴州國企招聘2025貴州磷化(集團)有限責任公司招聘139人筆試參考題庫附帶答案詳解
- 2025黑龍江中鐵特貨物流股份有限公司招聘75人筆試參考題庫附帶答案詳解
- 2025廣東儲能產業(yè)發(fā)展有限公司招聘17人筆試參考題庫附帶答案詳解
- 2025年甘肅人力委托招聘蘭州地鐵安檢人員筆試參考題庫附帶答案詳解
- 贈友送別類試題及答案
- 2025屆鄂東南省級示范高中聯(lián)盟高考英語二模試卷含答案
- 2025購銷合同范本下載
- 2024年家政服務職業(yè)技能大賽家庭照護賽項決賽試理論題庫1000題
- 2025年四川省成都市成華區(qū)中考二診英語試題(含筆試答案無聽力音頻及原文)
- 2025勞動合同范本下載打印
- (四調)武漢市2025屆高中畢業(yè)生四月調研考試 地理試卷(含答案)
- 管道試壓吹掃方案
- Unit 4 Clothes 單元整體(教學設計)-2024-2025學年人教精通版(2024)英語三年級下冊
- TCECA-G 0344-2025《零碳園區(qū)評價技術規(guī)范》團體標準
- 2024年探放水工技能大賽理論考試題庫500題(供參考)
- XX道路危險運輸企業(yè)安全管理臺賬標準化表格
評論
0/150
提交評論