邮电学院生产实习报告连连看.docx
- 文档编号:7101304
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:25
- 大小:466.29KB
邮电学院生产实习报告连连看.docx
《邮电学院生产实习报告连连看.docx》由会员分享,可在线阅读,更多相关《邮电学院生产实习报告连连看.docx(25页珍藏版)》请在冰豆网上搜索。
邮电学院生产实习报告连连看
西安郵電學院
生产实习报告书
院(系)名称
:
计算机学院
学生姓名
:
朱连博
专业名称
:
计算机科学与技术
班级
:
计科0706
实习时间
:
11年3月7日至11年3月18日
VC连连看
一、任务目标:
由学校和易思博软件公司组织的这次校内生产实习具有非凡的意义,这是我们学习生涯的最后一站,更重要的是我们学生踏上社会征途的第一站,为我们提供了很好的平台和环境,这次实习的最重要目标就是锻炼学生们的项目开发意识,从项目开发的过程中了解到项目开发所注重的要点和乐趣,更重要的是培养学生们的团队精神,能让学生们了解到自己的任务,努力去完成自己所分配的任务,通过小组成员间的互相帮助共同完成项目的开发。
二、实习项目:
VC连连看游戏开发
三、实习地点:
西安邮电学院南校区一号实验室楼407实验室
环境设施:
小教室人少安静,学习氛围好,通风好
设备条件:
PC一人一台
四、实习内容:
1、C++测评:
进入实验室认识了我们的项目经理杨帆经理,给我们讲了生产实习每天的流程以及要遵守的纪律等。
登录软酷网,每天工作结束时写一篇生产实习报告,记录当天的工作情况的和心得体会,还有每天4次的录指纹签到。
最后杨帆经理给我们每人一套C++网络测评,由于久不接触,好多题都熟悉又陌生,最后做完没有及格,才58分。
要想继续做好后面的生产实习工作,必须巩固一下C++的基本知识了。
2、MFC学习:
第二天另一位项目经理带我们进行了MFC的学习,先给我们安排了大概一个小时来看我们经理录的视频资料(MFC),有不懂得地方随时可以喊停提问。
由于我们大多没有接触过MFC,有些陌生,项目经理给我亲自演示了基本的创建和界面实现等操作,并让我们回去用MFC做一个计算器程序。
一开始有些摸不着门路,但是理清思路以后很快界面成型,并且在小组群策群力下很快便实现了功能而且还继续讨论如何让其更人性化更方便使用,如添加数字和小数点按钮以及平方等功能按钮。
大四找完工作以后记不起有多久没有这种开动脑筋、有兴趣、有动力的学习和讨论了,这种感觉真好。
短暂的MFC学习不但让我们熟悉适应了MFC编程,还开启了我们学习MFC的兴趣,为后面的生产实习开了一个好头。
很大的帮助。
3、VC连连看游戏开发:
实习任务终于分配下来了,我们教室分到了VC连连看,虽然整体做下来应该有难度,但是小组合作的话,有任何困难都能克服的!
而且对于游戏我们这群男生都比较有兴趣,很有动力。
由于那天许多同学请假去考试,小组剩下的人不多了,对核心的随机生成地图以及图片的消除不得要领,只能自己先从简单的界面开始做起。
界面我们采用了MENU模块,先总分为“游戏”“选项”“帮助”三项,每项点开后有具体的功能。
“游戏”包括开始,放弃,退出程序等功能,“选项”包括提示暂停以及查看积分等辅助功能,“帮助”顾名思义,提供帮助文件以及程序说明。
如下为截图:
以下为开始游戏以及退出游戏功能的代码:
voidCZLLKView:
:
OnMenuFirst()
{
//TODO:
Addyourcommandhandlercodehere
inti,j;
inttemprand;
CStringstr;
CRectrect;
//产生随机序列
srand((unsigned)time(NULL));
for(i=1;i<=ROW_NUMBER;i++)
for(j=1;j<=LINE_NUMBER;j++)
{
while
(1)
{
temprand=rand()%15;//产生0-14的随机数
if(pic_number[temprand]<6)
{
pic_number[temprand]++;
llk_map[i][j].state=0;
llk_map[i][j].event=0;
llk_map[i][j].PicIndex=temprand+1;//1-15
break;
}
}
}
//列出每幅图片所有的位置
ListPicPlace();
//初始化事件
InitEvent();
g_userscore=0;
g_userlevel=1;
g_usergate=1;
//程序控制
bingame=true;
bfirst=true;
DrawRectangleHollow();
m_nUpper=0;
DrawProgress(m_nUpper);//总共400个时间
m_nSpeed=2;
SetTimer(1,1200,0);
DrawInfo(120,20,"剩余时间");
DrawInfo(20,20,"重列:
");
DrawInfo(20,40,"提示:
");
DrawInfo(540,20,"分数:
");
DrawInfo2(60,20,m_sortnumber);
DrawInfo2(60,40,m_tishinumber);
DrawInfo2(560,40,g_userscore);
DrawMap();
//音效
//if(m_soundeffect)
//PlaySound(MAKEINTRESOURCE(IDR_WAVE_NEWGAME),AfxGetResourceHandle(),SND_RESOURCE|SND_ASYNC);
}
voidCZLLKView:
:
DrawMap()
{
//输出图形
CDC*pDc;
pDc=GetDC();
CDCdcMemory;
dcMemory.CreateCompatibleDC(pDc);
dcMemory.SelectObject(&bitmap1);
inti,j;
for(i=1;i<=ROW_NUMBER;i++)
{
for(j=1;j<=LINE_NUMBER;j++)
{
if(llk_map[i][j].PicIndex>0)
{
if(llk_map[i][j].state==0)
pDc->BitBlt(tilex(j),tiley(i),
PIC_WIDTH,PIC_HEIGHT,&dcMemory,PIC_WIDTH*(llk_map[i][j].PicIndex-1),0,SRCCOPY);
}
}
}
}
voidCZLLKView:
:
OnMenuExit()
{
//TODO:
Addyourcommandhandlercodehere
PostQuitMessage(0);
}
游戏开始后界面中间为随机生成的游戏地图,上方有一个倒计时条,左边是剩余的两种帮助“提示”“重排”的剩余次数,右边是所得分数。
请看下图:
下面是我们VC连连看程序的游戏地图初始化的代码:
BOOLCZLLKView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
bitmap1.LoadBitmap(IDB_BITMAP_FOREFACE);
bitmap2.LoadBitmap(IDB_BITMAP_FACE);
returnCView:
:
PreCreateWindow(cs);
}
voidCZLLKView:
:
InitMap()//初始化地图
{
inti,j;
for(i=0;i for(j=0;j { llk_map[i][j].PicIndex=0; llk_map[i][j].state=0; llk_map[i][j].event=0; } // for(i=0;i<15;i++) { pic_number[i]=0; pic_place[i+1]=NULL; } } voidCZLLKView: : OnDraw(CDC*pDC) { CZLLKDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO: adddrawcodefornativedatahere //渲染CRectrcBlock; rcBlock.SetRect(0,0,660,640); pDC->FillSolidRect(&rcBlock,RGB(34,139,34)); CDCdcMemory1,dcMemory2; dcMemory1.CreateCompatibleDC(pDC); dcMemory1.SelectObject(&bitmap1); dcMemory2.CreateCompatibleDC(pDC); dcMemory2.SelectObject(&bitmap2); //输出图形 inti,j; for(i=1;i<=ROW_NUMBER;i++) { for(j=1;j<=LINE_NUMBER;j++) { if(llk_map[i][j].PicIndex>0) { if(llk_map[i][j].state==0) pDC->BitBlt(tilex(j),tiley(i), PIC_WIDTH,PIC_HEIGHT,&dcMemory1,PIC_WIDTH*(llk_map[i][j].PicIndex-1),0,SRCCOPY); elseif(llk_map[i][j].state==1) pDC->BitBlt(tilex(j),tiley(i), PIC_WIDTH,PIC_HEIGHT,&dcMemory2,PIC_WIDTH*(llk_map[i][j].PicIndex-1),0,SRCCOPY); } } } if(bfirst) { DrawRectangleHollow(); DrawInfo(120,20,"剩余时间"); DrawInfo(20,20,"重列: "); DrawInfo(20,40,"提示: "); DrawInfo(540,20,"分数: "); DrawInfo2(60,20,m_sortnumber); DrawInfo2(60,40,m_tishinumber); DrawInfo2(560,40,g_userscore); } } 游戏图片我们选取了我们喜爱的DOTA英雄头像。 在头像图片下方有一小块黄色底座,用来实现伪3D效果,使游戏图片看上去像是一个个按钮,增强游戏性。 另外每个头像按钮我们都制作了两套,在另一套的边框加一圈红线,游戏时被点下的图片会被换成有红线的,以表示这张图片被选中,更人性化一些。 Resource文件如下图: 游戏的核心消除图片功能的实现,我们小组经过好几天的讨论研究,并不断地补充修改,才终于最后实现图片的正确消除。 我们最终得出的连接判断算法比项目经理给的“直连”“一个拐点”“两个拐点”三种方式要复杂一些,但是我们觉得程序复杂,考虑到的情况更具体,程序执行起来会更快一些。 我们将判断两块图片师父能相连消除分为八种情况,代码如下: boolCZLLKView: : CheckConnection(intx1,inty1,intx2,inty2) { inti,temp; //分为八种 if((x1==x2))//同一行 { if(IsLineConnection(x1,y1,x2,y2))returntrue; else { for(i=1;i<=x1;i++) { if(IsLinePicEmpty(x1,y1,(x1-i),y1)) if(IsNotLineConnection((x1-i),y1,x2,y2)) returntrue; } temp=VIRTUAL_ROW-x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1+i),y1)) if(IsNotLineConnection((x1+i),y1,x2,y2)) returntrue; } } } if((y1==y2))//同一列 { if(IsLineConnection(x1,y1,x2,y2))returntrue; else { for(i=1;i<=y1;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1-i))) if(IsNotLineConnection(x1,(y1-i),x2,y2)) returntrue; } temp=VIRTUAL_LINE-y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1+i))) if(IsNotLineConnection(x1,(y1+i),x2,y2)) returntrue; } } } if((x2>x1)&&(y2>y1))//(x2,y2)在(x1,y1)右下方 { if(IsNotLineConnection(x1,y1,x2,y2))//先判断只有一个折点*代表两个点 //*----------| returntrue;//|| //|__________* //先往下判断 temp=VIRTUAL_ROW-x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1+i),y1)) { if(IsNotLineConnection((x1+i),y1,x2,y2)) returntrue; } } //往右判断 temp=VIRTUAL_LINE-y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1+i))) { if(IsNotLineConnection(x1,(y1+i),x2,y2)) returntrue; } } //往上判断 for(i=1;i<=x1;i++) { if(IsLinePicEmpty(x1,y1,(x1-i),y1)) { if(IsNotLineConnection((x1-i),y1,x2,y2)) returntrue; } } //往左判断 for(i=1;i<=y1;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1-1))) { if(IsNotLineConnection(x1,(y1-1),x2,y2)) returntrue; } } } if((x2>x1)&&(y2 { if(IsNotLineConnection(x1,y1,x2,y2))//先判断只有一个折点*代表两个点 //|----------* returntrue;//|| //*__________| //先往下判断 temp=VIRTUAL_ROW-x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1+i),y1)) { if(IsNotLineConnection((x1+i),y1,x2,y2)) returntrue; } } //往左判断 temp=y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1-i))) { if(IsNotLineConnection(x1,(y1-i),x2,y2)) returntrue; } } //往上判断 temp=x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1-i),y1)) { if(IsNotLineConnection((x1-i),y1,x2,y2)) returntrue; } } //往右判断 temp=VIRTUAL_LINE-y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1+i))) { if(IsNotLineConnection(x1,(y1+i),x2,y2)) returntrue; } } } if((x2 { if(IsNotLineConnection(x1,y1,x2,y2))//先判断只有一个折点*代表两个点 //*----------| returntrue;//|| //|__________* //先往上判断 temp=x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1-i),y1)) { if(IsNotLineConnection((x1-i),y1,x2,y2)) returntrue; } } //往左判断 temp=y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1-i))) { if(IsNotLineConnection(x1,(y1-i),x2,y2)) returntrue; } } //先往下判断 temp=VIRTUAL_ROW-x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1+i),y1)) { if(IsNotLineConnection((x1+i),y1,x2,y2)) returntrue; } } //往右判断 temp=VIRTUAL_LINE-y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1+i))) { if(IsNotLineConnection(x1,(y1+i),x2,y2)) returntrue; } } } if((x2 { if(IsNotLineConnection(x1,y1,x2,y2))//先判断只有一个折点*代表两个点 //|----------* returntrue;//|| //*__________| //先往上判断 temp=x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1-i),y1)) { if(IsNotLineConnection((x1-i),y1,x2,y2)) returntrue; } } //往右判断 temp=VIRTUAL_LINE-y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1+i))) { if(IsNotLineConnection(x1,(y1+i),x2,y2)) returntrue; } } //先往下判断 temp=VIRTUAL_ROW-x1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,(x1+i),y1)) { if(IsNotLineConnection((x1+i),y1,x2,y2)) returntrue; } } //往左判断 temp=y1; for(i=1;i<=temp;i++) { if(IsLinePicEmpty(x1,y1,x1,(y1-i))) { if(IsNotLineConnection(x1,(y1-i),x2,y2)) returntrue; } } } returnfalse; } boolCZLLKView: : IsLineConnection(intx1,inty1,intx2,inty2)//判断直线两点是不是可连通的 { inti,temp; if(x1==x2)//同一行 { temp=abs(y2-y1); if(y2>y1) { for(i=1;i if(llk_map[x1][y1+i].PicIndex! =0) returnfalse; } else { for(i=1;i if(llk_map[x1][y1-i].PicIndex! =0) returnfalse; } } if(y1==y2)//同一列 { temp=abs(x2-x1); if(x2>x1) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邮电学院 生产 实习 报告 连连
![提示](https://static.bdocx.com/images/bang_tan.gif)