游戏所需图片:设计游戏窗体、在Windows项目下添加一个图片控件picturebox1(游戏面板),1个菜单控件menustrip1属性设置如下表所示代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespace推箱子游戏{publicpartialclassForm1:Form{privateintx;//工人当前位置(x,y)privateinty;//privateboolflag=true;//0代表墙,1代表人,2代表箱子,3代表路,4代表目的地//5代表人在目的地,6代表放到目的地的箱子privateenumMap_State{None=-1,Wall=0,Worker,Box,Passageway,Destination,WorkerInDest,RedBox};privateMap_State[,]myArray;//privateint[,]my;privateintOrder=1;//游戏关的序号publicForm1(){InitializeComponent();}privatevoidReadMap(intn){stringfilename=map\\map_+n.ToString()+.info;FileStreamfs=newFileStream(filename,FileMode.Open,FileAccess.Read);BinaryReaderr=newBinaryReader(fs);//读取数据for(inti=0;i7;i++)for(intj=0;j7;j++)myArray[i,j]=(Map_State)r.ReadByte();for(inti=0;i7;i++)for(intj=0;j7;j++)if(myArray[i,j]==Map_State.Worker){x=i;y=j;}r.Close();fs.Close();}publicvoidinitdata(){myArray=newMap_State[7,7];ReadMap(Order);}privatevoidForm1_Load(objectsender,System.EventArgse){initdata();drawimage();}//绘制整个游戏区域图形privatevoiddrawimage(){Bitmapbit=newBitmap(this.pictureBox1.Width,this.pictureBox1.Height);Graphicsg=Graphics.FromImage(bit);SolidBrushredBrush=newSolidBrush(Color.Red);System.Drawing.Imageimage=newBitmap(worker.gif);for(inti=0;i7;i++){for(intj=0;j7;j++){if(myArray[i,j]==Map_State.Wall){image=newBitmap(wall.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.Worker){image=newBitmap(worker.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.Box){image=newBitmap(box.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.Passageway){image=newBitmap(passageway.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.Destination){image=newBitmap(destination.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.WorkerInDest){image=newBitmap(worker.gif);g.DrawImage(image,i*50,j*50,50,50);}if(myArray[i,j]==Map_State.RedBox){image=newBitmap(redbox.gif);g.DrawImage(image,i*50,j*50,50,50);}}}this.pictureBox1.Image=bit;}privatevoidForm1_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse){intx1,y1,x2,y2;//工人当前位置(x,y)switch(e.KeyCode)//分析按键消息{//向上caseKeys.Up:x1=x;y1=y-1;x2=x;y2=y-2;//将所有位置输入以判断并作地图更新MoveTo(x1,y1,x2,y2);break;//向下caseKeys.Down:x1=x;y1=y+1;x2=x;y2=y+2;MoveTo(x1,y1,x2,y2);break;//向左caseKeys.Left:x1=x-1;y1=y;x2=x-2;y2=y;MoveTo(x1,y1,x2,y2);break;//向右caseKeys.Right:x1=x+1;y1=y;x2=x+2;y2=y;MoveTo(x1,y1,x2,y2);break;caseKeys.Space://空格键重玩ToolStripMenuItem_Click(null,null);break;}}privatevoidMoveMan(intx,inty){if(myArray[x,y]==Map_State.Worker)myArray[x,y]=Map_State.Passageway;elseif(myArray[x,y]==Map_State.WorkerInDest)myArray[x,y]=Map_State.Destination;}privatevoidMoveTo(intx1,inty1,intx2,inty2){Map_StateP1,P2;P1=P2=Map_State.None;if(IsInGameArea(x1,y1))//判断是否在游戏区域P1=myArray[x1,y1];if(IsInGameArea(x2,y2))P2=myArray[x2,y2];if(P1==Map_State.Passageway)//P1处为通道{MoveMan(x,y);x=x1;y=y1;myArray[x1,y1]=Map_State.Worker;}if(P1==Map_State.Destination)//P1处为目的地{MoveMan(x,y);x=x1;y=y1;myArray[x1,y1]=Map_State.WorkerInDest;}if(P1==Map_State.Wall||!IsInGameArea(x1,y1))//P1处为墙或出界{return;}if(P1==Map_State.Box)//P1处为箱子if(P2==Map_State.Wall||!IsInGameArea(x1,y1)||P2==Map_State.Box)////P2处为墙或出界{return;}//以下P1处为箱子//P1处为箱子,P2处为通道if(P1==Map_State.Box&&P2==Map_State.Passageway){MoveMan(x,y);x=x1;y=y1;myArray[x2,y2]=Map_State.Box;myArray[x1,y1]=Map_State.Worker;}if(P1==Map_State.Box&&P2==Map_State.Destination){MoveMan(x,y);x=x1;y=y1;myArray[x2,y2]=Map_State.RedBox;myArray[x1,y1]=Map_State.Worker;}//P1处为放到目的地的箱子,P2处为通道if(P1==Map_State.RedBox&&P2==Map_State.Passageway){MoveMan(x,y);x=x1;y=y1;myArray[x2,y2]=Map_State.Box;myArray[x1,y1]=Map_State.WorkerInDest;}//P1处为放到目的地的箱子,P2处为目的地if(P1==Map_State.RedBox&&P2==Map_State.Destination){MoveMan(x,y);x=x1;y=y1;myArray[x2,y2]=Map_State.RedBox;myArray[x1,y1]=Map_State.WorkerInDest;}drawimage();//这里要验证是否过关if(IsFinish()){MessageBox.Show(恭喜你顺利过关,提示);下一关ToolStripMenuItem_Click(null,null);return;}}//判断是否在游戏区域privateboolIsInGameArea(introw,intcol){return(row=0&&row7&&col=0&&col7);}publicboolIsFinish()//验证是否过关{boolbFinish=true;for(inti=0;i7;i++)for(intj=0;j7;j++)if(myArray[i,j]==Map_State.Destination||myArray[i,j]==Map_State.WorkerInDest)bFinish=false;returnbFinish;}privatevoid编辑地图ToolStripMenuItem_Click(objectsender,EventArgse){FrmConfigf2=newFrmConfig();f2.ShowDialog();}privatevoid重玩ToolStripMenuItem_Click(objectsender,EventArgse){this.Text=第+Order.ToString()+关;initdata();drawimage();}privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse){Application.Exit();}privatevoid下一关ToolStripMenuItem_Click(objectsender,EventArgse){Order++;stringfilename=map\\map_+Order.ToString()+.info;if(!File.Exists(filename)){MessageBox.Show(没有下一关了,提醒);Order--;return;}this.Text=第+Order.ToString()+关;initdata();drawimage();}}}