




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C#實(shí)現(xiàn)拼圖游戲使用VS的c#來實(shí)現(xiàn)
界面設(shè)計(jì):picturebox控件來顯示圖片,button控件來實(shí)現(xiàn)按鈕點(diǎn)擊的各類事件:圖片重排、換圖、查看原圖等,使用numericUpDown控件來控制切割的邊數(shù)。如下圖:
把要拼的圖片放進(jìn)resource文件里
設(shè)計(jì)函數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無人機(jī)數(shù)據(jù)采集和分析試題及答案
- 《課件亮點(diǎn)紛呈》課件
- 企業(yè)管理變革與創(chuàng)新
- 《講師劉建亮》課件
- 高中語文聽課心得體會(huì)模版
- 英語十六時(shí)態(tài)表格完整總結(jié)模版
- 《社區(qū)兒童活動(dòng)規(guī)劃》課件
- 醫(yī)師資格考試2025年臨床執(zhí)業(yè)助理醫(yī)師資格考試考點(diǎn)總結(jié)模版
- 先進(jìn)生產(chǎn)力是新質(zhì)生產(chǎn)力
- 冬季疾病防治培訓(xùn)
- 人教版(2024)七年級(jí)下冊(cè)Unit 3 Keep fit 素養(yǎng)檢測(cè)(含解析)
- 2025年四川省成都市成華區(qū)中考二診英語試題(含筆試答案無聽力音頻及原文)
- 綏化綏化市2025年度“市委書記進(jìn)校園”事業(yè)單位引才287人筆試歷年參考題庫附帶答案詳解
- 歷史七年級(jí)歷史下冊(cè)期中復(fù)習(xí)知識(shí)點(diǎn)梳理課件 2024-2025學(xué)年七年級(jí)歷史下冊(cè)(統(tǒng)編版2024)
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全程序文件SOP
- 封條模板A4直接打印版
- 雙減背景下的作業(yè)設(shè)計(jì)與實(shí)施優(yōu)秀案例PPT
- 基于PLC的數(shù)控車床電氣控制系統(tǒng)設(shè)計(jì)畢業(yè)論文_(2)[1]
- 古典概型 教學(xué)設(shè)計(jì)
- 鋼管截面積、強(qiáng)度、撓度、慣性矩計(jì)算公式
- 施工現(xiàn)場(chǎng)平面布置和臨時(shí)設(shè)施、臨時(shí)道路布置
評(píng)論
0/150
提交評(píng)論