认识实习上机报告3.docx
《认识实习上机报告3.docx》由会员分享,可在线阅读,更多相关《认识实习上机报告3.docx(22页珍藏版)》请在冰豆网上搜索。
认识实习上机报告3
认识实习c#上机实验报告3
序号
班级
姓名
学号
日期
时间
地点
3
信计1002
董凤鸿
41040317
9月24日至26日
13:
00-16:
10
理实楼221
实验名称:
认识实习c#上机实习—(迷宫游戏)报告
实验任务:
1.编写程序实现迷宫游戏画面并初始化
2.使程序能够实现游戏的相关功能(如:
自动寻找最短路径的走法并将其画出来)
实习目的:
通过实习进一步熟悉C#程序的编程思想,同时能通过实习熟练掌握运用visualstudio2010编程实现具有一定娱乐功能的程序,同时熟悉面向对象的思想及类的用法,再有就是熟悉队列求解最短路径的算法。
实习要求:
1)能够进一步熟练掌握C#Windows窗体应用程序的基本操作。
2)进一步熟悉一些新的功能,例如在窗体中调入图片进行绘画的方法。
3)学会运用面向对象的设计思想,同时学会通过编写类,实现既定功能。
4)学会运用队列求解最短路径的方法,并将其以图的方式显示。
5)学习如何调用图片在绘图框中按规则显示。
01实习过程:
本次实习前后持续时间为3天,基本是每天都会有新任务。
每天的程序都有各自的特点。
有编写类实现队列计算最短路径的过程,也有通过调用图片及一些绘图方法来实现窗口绘画的过程。
根据程序的分类将实习分为三个阶段。
每个阶段的具体任务见实习内容。
阶段一、时间:
第一天(9月24日)
内容:
绘制窗体,同时查询相关资料通过编写类,实现队列求解迷宫问题最短路径的算法。
阶段二、时间:
第二天(9月25日)
内容:
绘制初始化迷宫游戏窗口,包括一些图片的调入绘画及窗口的设计。
阶段三、时间:
第三天(9月26日)
内容:
通过调用类的方法实现游戏的路径自动寻找及显示及总程序的调试。
实习内容:
根据上面的各种不同的阶段,有着不同的实验任务。
阶段一:
绘制窗体,同时查询相关资料通过编写类,实现队列求解迷宫问题最短路径的算法。
。
其中主要代码实现如下:
队列类的代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;//读¨¢取¨?
文?
件t所¨´需¨¨的Ì?
namespacefenghongdong3
{
publicstructsqtype//队¨®列¢D的Ì?
三¨y元a组Á¨¦说¦Ì明¡Â,位?
置?
和¨ª回?
退ª?
下?
标À¨º
{
publicintx,y,pre;
}
structmoved//坐Á?
标À¨º增?
量¢?
表À¨ª
{
publicintx,y;
}
publicclassCMaze
{
privateintrows,cols;//迷?
宫?
矩?
阵¨®的Ì?
行D列¢D数ºy
privateintbi,bj;//迷?
宫?
起e点Ì?
坐Á?
标À¨º
privateintei,ej;//迷?
宫?
终?
点Ì?
坐Á?
标À¨º
privateint[]elems;
publicCQueuesq;
staticmoved[]move=newmoved[8];
//--------------------------------------------------------------------------------
publicintGetrows(){returnrows;}
publicintGetcols(){returncols;}
publicintGetbi(){returnbi;}
publicintGetbj(){returnbj;}
publicintGetei(){returnei;}
publicintGetej(){returnej;}
publicvoidSetbi(intbi){this.bi=bi;}
publicvoidSetbj(intbj){this.bj=bj;}
publicvoidSetei(intei){this.ei=ei;}
publicvoidSetej(intej){this.ej=ej;}
publicintGetelems(introw,intcol)
{
returnelems[row*(cols+2)+col];
}
publicvoidSetelems(introw,intcol,intvalue)
{
elems[row*(cols+2)+col]=value;
}
publicCQueueMazeQueue()
{
returnsq;
}
////////////////////////////////////////////////////////////
publicintGetIntData(stringstrdata,intk,outintoutk)
{
intlen=strdata.Length;
intks=k,data;
stringstr;
while((ks'9')))
ks++;
str="";
while((ks='0')&&(strdata[ks]<='9')))
str=str+strdata[ks++];
if(str!
="")
data=Convert.ToInt32(str);
else
data=0;
outk=ks;
return(data);
}
publicCMaze(stringstrmazedata)
{
inti,j,dd,know;
sq=newCQueue();
know=0;
if(strmazedata=="")
{
rows=cols=0;
return;
}
rows=GetIntData(strmazedata,know,outknow);
cols=GetIntData(strmazedata,know,outknow);
bi=GetIntData(strmazedata,know,outknow);
bj=GetIntData(strmazedata,know,outknow);
ei=GetIntData(strmazedata,know,outknow);
ej=GetIntData(strmazedata,know,outknow);
elems=newint[(rows+2)*(cols+2)];
for(i=1;i<=rows;i++)
{
for(j=1;j<=cols;j++)
{
dd=GetIntData(strmazedata,know,outknow);
elems[i*(cols+2)+j]=dd;
}
}
for(i=0;i<=rows+1;i++)
{
elems[i*(cols+2)+0]=1;
elems[i*(cols+2)+cols+1]=1;
}
for(j=0;j<=cols+1;j++)
{
elems[0*(cols+2)+j]=1;
elems[(rows+1)*(cols+2)+j]=1;
}
elems[bi*(cols+2)+bj]=0;//起e点Ì?
elems[ei*(cols+2)+ej]=0;//终?
点Ì?
}
////////////////////////////////////////////////////////////
publicintShortPath()
{
//初?
始º?
化¡¥位?
置?
坐Á?
标À¨º增?
量¢?
move[0].x=0;move[1].x=+1;move[2].x=0;move[3].x=-1;
move[0].y=+1;move[1].y=0;move[2].y=-1;move[3].y=0;
//清?
除y迷?
宫?
矩?
阵¨®中D的Ì?
原-有®D路¡¤径?
标À¨º记?
clear();
//清?
空?
队¨®列¢D
sq.MakeEmpty();
//判D断?
合?
理¤¨ª性?
if(rows==0||cols==0)
return0;
if((bi==ei)&&bj==ej)//起e点Ì?
与®?
终?
点Ì?
重?
合?
return1;
inti,j,k,x,y;
//定¡§义°?
临¢¨´时º¡À三¨y元a组Á¨¦
sqtypetemp;
//三¨y元a组Á¨¦初?
值¦Ì为a起e点Ì?
temp.x=bi;
temp.y=bj;
temp.pre=0;
sq.In(temp);
//起e点Ì?
走Á?
过y
Setelems(bi,bj,-1);
//队¨®列¢D不?
空?
时º¡À循-环¡¤
while(!
sq.IsEmpty())
{
//取¨?
队¨®头ª¡¤
temp=sq.Getfront();
x=temp.x;y=temp.y;
//循-环¡¤每?
个?
方¤?
向¨°
for(k=0;k<4;k++)
{
//新?
的Ì?
顶£¤点Ì?
坐Á?
标À¨º
i=x+move[k].x;
j=y+move[k].y;
//顶£¤点Ì?
可¨¦走Á?
时º¡À入¨?
队¨®,ê?
并¡é设¦¨¨置?
为a走Á?
过y
if(Getelems(i,j)==0)
{
temp.x=i;
temp.y=j;
temp.pre=sq.Front()+1;
sq.In(temp);
Setelems(i,j,-1);
}
//走Á?
到Ì?
终?
点Ì?
时º¡À
if(i==ei&&j==ej)
{
//从䨮队¨®尾2向¨°前¡ã查¨¦找¨°走Á?
过y的Ì?
路¡¤径?
j=sq.Rear();
for(i=sq.Rear();i>=1;i--)
{
temp=sq.Getdata(i);
if(i==j)
{
Setelems(temp.x,temp.y,-1);
j=temp.pre;
}
else
Setelems(temp.x,temp.y,0);
}
return1;
}
}
//处ä|理¤¨ª过y的Ì?
顶£¤点Ì?
出?
队¨®
sq.Out();
}
clear();
sq.MakeEmpty();
return0;
}
////////////////////////////////////////////////////////////
publicvoidclear()
{
inti,j;
for(i=1;i<=rows;i++)
{
for(j=1;j<=cols;j++)
{
if(Getelems(i,j)==-1)
Setelems(i,j,0);
}
}
}
////////////////////////////////////////////////////////////
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespacefenghongdong3
{
publicclassCQueue
{
privateintfront,rear;
privateType[]elems;
privateconstintMaxsize=200;
//--------------------------------------------------------------------------------
publicvoidMakeEmpty(){front=rear=0;}//清?
空?
publicboolIsEmpty(){returnfront==rear;}//判D队¨®空?
publicboolIsFull(){return(rear+1)%Maxsize==front;}//判D队¨®满¨²
publicintFront(){returnfront;}
publicintRear(){returnrear;}
///////////////////////////////////////////////////////////
publicCQueue()
{
elems=newType[Maxsize];
front=rear=0;
}
///////////////////////////////////////////////////////////
publicboolIn(Typeitem)//入¨?
队¨®
{
if(!
IsFull())
{
rear=(rear+1)%Maxsize;
elems[rear]=item;
return(true);
}
else
return(false);
}
///////////////////////////////////////////////////////////
publicTypeOut()//出?
队¨®
{
front=(front+1)%Maxsize;
returnelems[front];
}
///////////////////////////////////////////////////////////
publicTypeGetfront()
{
returnelems[(front+1)%Maxsize];
}
///////////////////////////////////////////////////////////
publicTypeGetdata(intk)
{
returnelems[k];
}
///////////////////////////////////////////////////////////
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespacefenghongdong3
{
publicclassCStack
{
privateinttop;
privateType[]elems;
privateconstintMaxsize=100;
//--------------------------------------------------------------------------------
publicvoidMakeEmpty(){top=-1;}//清?
空?
publicboolIsEmpty(){returntop==-1;}//判D栈?
空?
publicboolIsFull(){returntop==Maxsize-1;}//判D栈?
满¨²
///////////////////////////////////////////////////////////
publicCStack()
{
elems=newType[Maxsize];
top=-1;
}
///////////////////////////////////////////////////////////
publicboolPush(refTypeitem)//入¨?
栈?
{
if(!
IsFull())
{
elems[++top]=item;
return(true);
}
else
return(false);
}
///////////////////////////////////////////////////////////
publicTypePop()//出?
栈?
{
returnelems[top--];
}
///////////////////////////////////////////////////////////
publicTypeGettop()
{
returnelems[top];
}
///////////////////////////////////////////////////////////
}
}
窗体运行结果如图:
阶段二:
绘制初始化迷宫游戏窗口,包括一些图片的调入绘画及窗口的设计。
其中主要代码实现如下:
功能函数:
voidinitdraw()
{
dx=0;
minx=dx;
maxx=Convert.ToInt32(Math.Floor((this.Width-2*dx)/10.0)*10);
dy=0;
miny=dy;
maxy=Convert.ToInt32(Math.Floor((this.Height-2*dy)/10.0)*10);
Graphicsmyg=this.CreateGraphics();
Brushb0=newSolidBrush(Color.White);
//myg.Clear(Color.FromArgb(255,224,224,224));
myg.FillRectangle(b0,minx,miny,maxx-minx,maxy-miny);
//RectanglesourceRectangle=newRectangle(200,200,imageList1.Images[0].Width,imageList1.Images[0].Height);//要°a放¤?
大䨮的Ì?
区?
域®¨°
//myg.DrawImage(imageList1.Images[0],sourceRectangle,sourceRectangle,GraphicsUnit.Pixel);
//myg.DrawImageUnscaled(imageList1.Images[0],sourceRectangle);
}
publicvoidDrawMaze(CMazem_maze)
{
initdraw();
Graphicsmyg=this.CreateGraphics();
//Brushb0=newSolidBrush(Color.White);
Imageimage0=System.Drawing.Image.FromFile("..\\..\\tile.bmp");
Imageimage1=System.Drawing.Image.FromFile("..\\..\\qiu1.bmp");
Imageimage2=System.Drawing.Image.FromFile("..\\..\\qiu2.bmp");
intpw=image0.Width;
intph=image0.Height;
intm=m_maze.Getrows();
intn=m_maze.Getcols();
Rectanglert1,rt2;
rt1=newRectangle(0,0,pw,ph);
for(inti=0;i<=m+1;i++)
{
for(intj=0;j<=n+1;j++)
{
if(m_maze.Getelems(i,j)==1)
{
rt2=newRectangle(j*(pw),i*(ph),pw,ph);
myg.DrawImage(image0,rt2,rt1,GraphicsUnit.Pixel);
}
elseif(m_maze.Getelems(i,j)==0)
{
}
elseif(m_maze.Getelems(i,j)==-1)
{
if(IsPath)//画-路¡¤径?
{
//myg.FillRectangle(b0,j*pw,i*ph,pw,ph);
}
else
{
//myg.FillRectangle(b0,j*pw,i*ph,pw,ph);
}
}
}
}
//画-路¡¤径?
DrawPath(m_maze);
//画-起e点Ì?
终?
点Ì?
rt2=newRectangle(m_maze.Getbj()*pw,m_maze.Getbi()*ph,pw,ph);
myg.DrawImage(image1,rt2,rt1,GraphicsUnit.Pixel);
rt2=newRectangle(m_maze.Getej()*pw,m_maze.Getei()*ph,pw,ph);
myg.DrawImage(image2,rt2,rt1,GraphicsUnit.Pixel);
/