认识实习上机报告3.docx

上传人:b****3 文档编号:26622817 上传时间:2023-06-20 格式:DOCX 页数:22 大小:246.30KB
下载 相关 举报
认识实习上机报告3.docx_第1页
第1页 / 共22页
认识实习上机报告3.docx_第2页
第2页 / 共22页
认识实习上机报告3.docx_第3页
第3页 / 共22页
认识实习上机报告3.docx_第4页
第4页 / 共22页
认识实习上机报告3.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

认识实习上机报告3.docx

《认识实习上机报告3.docx》由会员分享,可在线阅读,更多相关《认识实习上机报告3.docx(22页珍藏版)》请在冰豆网上搜索。

认识实习上机报告3.docx

认识实习上机报告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);

/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1