计算机学院本科生实验报告

时间:2024-02-02 点赞:45600 浏览:88529 作者原创标记本站原创

本文是一篇计算机论文范文,计算机相关大学毕业论文,关于计算机学院本科生实验报告相关学年毕业论文范文。适合计算机及游戏及参考文献方面的的大学硕士和本科毕业论文以及计算机相关开题报告范文和职称论文写作参考文献资料下载。

计算机学院本科生实验报告

实验课程:程序设计实验

实验项目:平面游戏设计(陨石撞飞机)

指导教师:张金区

开课时间:2016年6月

班级:2016实验班

华南师范大学

计算机学院_程序设计实验_课实验报告

2016年级班实验日期2016/7/10

姓名___曾润智__学号___20162101028__

实验题目:陨石撞飞机教师评定__________

报告提纲:

一、平面游戏的发展现状和趋势

发展现状:虽然经过了十多年的发展,中国的2D游戏发展依旧比较缓慢.2D游戏犹如原地打滚,停滞不前.在这个抄袭的年代,抄袭细节,抄袭经验好象才是游戏开发的根本.抄袭严重甚至全搬,说到底,这也是一种缺乏创新意识的表现.一味的利益追求已经束缚了开发商自我突破的双臂,捞一票走人,急功近利的心态已将整个2D市场搅得污浊不堪,基本上每款2D游戏都重复着几乎别无二致的打怪,劈杀,练级.重复的机械动作已经激不起玩家的乐趣和新鲜感.缺乏自身创新元素,抄袭,模仿现象越来越严重.现在中国的2D游戏数量较多,但是正真高质量的比较少.2D游戏正在逐步的衰落中.

发展趋势:目前很多人都认为游戏市场的份额将会越来越多地被3D游戏所占据,但是事实上2D游戏一直坚守着自己的领地.虽然说3D技术的基础就是2D,但这并不代表3D的出现会是2D的末日,实际上,2D游戏有着3D游戏所没有的魅力,但在视觉效果上却是永远不可能超越3D的,这就是各游戏企业,游戏学院一直在不断同时开发2D和3D游戏的原因.最早出现3D游戏,多数还是在秀技术,而后才是在游戏画面提升的基础上,再去提升游戏品质.而坚持2D领域的作品,是先提升游戏品质,而后再去考虑提升游戏画面.比如《大富翁》这种作品,比如《俄罗斯方块》这种作品,它们只有2D这一条路可选.再如对对碰,连连看或者其他棋牌类游戏作品,均只有2D这一条路可选.而他们无论是游戏性可玩性,还是人气还是其他方面,均不输给CS或者魔兽之类的作品,这就是它们的发展之路,这也是2D作品得以伸展的领域.而最新的格斗游戏《街霸4》,虽然是3D画面,但是其格斗规则仍旧是2D规则,这也是2D游戏和3D游戏将来的一个趋势——合二而一.3D游戏的领域,则逐渐在模拟真实的方面施展开了,比如虚幻3引擎带来的那些战争巨作,科幻巨作.而对于短平快的小型游戏作品,显然3D游戏不适合在这里施展自己的才华.而对于MMORPG领域来说,诸如《梦幻西游》这种2D大作仍旧占据着霸主的地位,也从另一个角度说明了,游戏的画面,并不是决定成败的关键因素.更重要的还是游戏品质.所以,2D和3D游戏的发展将会朝着越来越优质的方向前进,这也是它们唯一的发展道路,同时还要选择适合自己游戏作品施展长处的领域.非要用2D画面去做一款《最终幻想14》那样的史诗般巨作,那是肯不出来.非要用3D游戏画面去做一款街坊大妈式游戏,估计十有也是要惨败而归的.

二、常用平面游戏开发工具及技术特点分析

1.GameMaker

.GameMaker是个专为设计游戏而制作的工具,不同于其他工具的部分是它将复杂的游戏功能融于简单的操作方式,让使用者不需要遇到极大的困难就能轻松制作一个中型以下的游戏,主要为2D游戏而设计,提供贴图,移动,游戏规则以及其他多种功能让你使用.Phrogram

Phrogram是专门用于为青少年,儿童学习编程的语言,使用Phrogram每个人都可以制作计算机游戏,软件和艺术作品.Phrogram使得编程如此简单以至于从来没有学习和自学过编程的新手也可以胜任编程工作.Phrogram是学习和制作计算机游戏和图形化软件的最佳方式.Phrogram还可以通过有趣,交互式和直观的范例让理解诸如几何学,三角法和物理等复杂项目变得更加简单.Phrogram甚至可以制作独立于你自己软件的Windows安装程序,因此你可以与其他人共享你的作品,甚至在他们没有Phrogram软件的情况下.Phrogram包括一个有趣且简单的初学者编程指南,一个详细的用户向导以及150多个你可以从中学习的游戏和软件样本XNAFramework

XNAFramework是建置于.NETFramework2.0上,另外还加入了一些专注于游戏开发上类库,在指定的平台上使程式码重用达之最大效果.XNAFramework在一个特别为有管理式游戏运行的通用语言执行层(CommonLanguageRuntime)版本上运行.这个执行层支援WindowsXP,WindowsVista和XBox360.由于游戏是开发在执行层上,使得游戏能在所有支持XNAFramework的平台上只要很少甚至不需要任何更改便能运行.现时所有在XNAFramework上的游戏必需使用C#和XNAGameStudioExpressIDE开发.

XNAFramework把所有用作游戏编程的低阶技术包起来,由此,游戏开发员就可以专注于游戏内容开发而不用关心游戏移植至不同平台上的问题,游戏只要开发于XNA的平台上,所有硬件只要支持XNA都能运行.XNAFramework还内置一些工具,例如XACT以帮助游戏内容开发.这些工具还能帮助开发视觉和听觉效果和和像真度很高的模型制作.XNAFramework同时支持2D和3D的游戏开发也支持XBox360的控制器和震动效果.XboxLive卖场可以升级开发者的XNAGameStudioExpress以使能把他们开发的游戏用于Xbox360上.

CBitmapm_stone1等

//声明陨石的坐标变量为int类型:

intnstone1x,nstone1y,

//判断是否碰到东西

booleat(intx,inty),

intscore,//记分

//声明绘制陨石的函数原型:

voidDrawStone1(CDC*pDC),

PlaneView.cpp部分函数定义:

CPlaneView::CPlaneView()

{

//TODO:addconstructioncodehere

mx等于100,

my等于100,

m_plane.LoadBitmap(IDB_BITMAP1),

score等于0,

//添加初始化操作代码:

nstone1x等于rand()%500,//x方向随机数0~499

nstone1y等于10,

m_stone1.LoadBitmap(IDB_BITMAP2),

nstone2x等于rand()%500,//x方向随机数0~499

nstone2y等于10,

m_stone2.LoadBitmap(IDB_BITMAP3),

nstone3x等于rand()%500,//x方向随机数0~499

nstone3y等于10,

m_stone3.LoadBitmap(IDB_BITMAP4),

nstone4x等于rand()%500,//x方向随机数0~499

nstone4y等于10,

m_stone4.LoadBitmap(IDB_BITMAP5),

nstone5x等于rand()%500,//x方向随机数0~499

nstone5y等于10,

m_stone5.LoadBitmap(IDB_BITMAP6),

nstone6x等于rand()%500,//x方向随机数0~499


nstone6y等于10,

m_stone6.LoadBitmap(IDB_BITMAP7),

nstone7x等于rand()%500,//x方向随机数0~499

nstone7y等于10,

m_stone7.LoadBitmap(IDB_BITMAP11),

nstone8x等于rand()%500,//x方向随机数0~499

nstone8y等于10,

m_stone8.LoadBitmap(IDB_BITMAP12),

nstone9y等于rand()%400,//x方向随机数0~499

nstone9x等于10,

m_stone9.LoadBitmap(IDB_BITMAP13),

nstone10x等于10,//y方向随机数0~399

nstone10y等于rand()%400,

m_stone10.LoadBitmap(IDB_BITMAP14),

flowerx等于rand()%500,//x方向随机数0~499

flowery等于10,

flower.LoadBitmap(IDB_BITMAP10),

diamondx等于rand()%500,

diamondy等于10,

diamond.LoadBitmap(IDB_BITMAP9),

blank.LoadBitmap(IDB_BITMAP15),

m_die.LoadBitmap(IDB_BITMAP8),

}

voidCPlaneView::DrawPlane(CDC*pDC)//画小人

{

CDCMemDC,

MemDC.CreateCompatibleDC(pDC),

BITMAPbm,

m_plane.GetObject(sizeof(BITMAP),&,bm),

CBitmapMemBitmap,

MemBitmap.CreateCompatibleBitmap(pDC,bm.bmWidth,bm.bmHeight),

CBitmap*pOldBitmap,

pOldBitmap等于(CBitmap*)MemDC.SelectObject(&,MemBitmap),

MemDC.SelectObject(&,m_plane),

pDC->,BitBlt(mx,my,bm.bmWidth,bm.bmHeight,&,MemDC,0,0,SRCCOPY),

MemDC.SelectObject(pOldBitmap),

}

//响应键盘

voidCPlaneView::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)

{

//TODO:Addyourmessagehandlercodehereand/orcalldefault

CClientDCClientDC(this),

RECTrect,

BITMAPbm,

m_plane.GetObject(sizeof(BITMAP),&,bm),

rect.left等于mx,

rect.top等于my,

rect.right等于rect.left+bm.bmWidth,

rect.bottom等于rect.top+bm.bmHeight,

CBrushbrush(GetSysColor(COLOR_WINDOW)),//擦去原来的飞机图像

ClientDC.FillRect(&,rect,&,brush),

if(nChar等于等于VK_UP)//按键盘上的向上键"↑"

{my等于my-15,}

if(nChar等于等于VK_LEFT)//按键盘上的向上键"←"

{mx等于mx-15,}

if(nChar等于等于VK_RIGHT)//按键盘上的向上键"→"

{mx等于mx+15,}

if(nChar等于等于VK_DOWN)//按键盘上的向上键"↓"

{my等于my+15,}

DrawPlane(&,ClientDC),//重新绘制飞机图像

CView::OnKeyDown(nChar,nRepCnt,nFlags),

}

//判断是否碰到东西

boolCPlaneView::eat(intx,inty)

{

if(x>,等于mx-45&,&,x<,等于mx+45&,&,y>,等于my-40&,&,y<,等于my+40)

returntrue,

returnfalse,

}

//OnTimer函数

voidCPlaneView::OnTimer(UINTnIDEvent)

{

//TODO:Addyourmessagehandlercodehereand/orcalldefault

CStringstrin

本文是一篇计算机论文范文,计算机相关大学毕业论文,关于计算机学院本科生实验报告相关学年毕业论文范文。适合计算机及游戏及参考文献方面的的大学硕士和本科毕业论文以及计算机相关开题报告范文和职称论文写作参考文献资料下载。

g,

CClientDCClientDC(this),

RECTClientRect,

GetClientRect(&,ClientRect),

RECTrect1,rect2,rect3,rect4,rect5,rect6,rect7,rect8,rect9,rect10,

RECTrect11,rect12,

BITMAPbm,

m_stone1.GetObject(sizeof(BITMAP),&,bm),

CBrushbrush(GetSysColor(COLOR_WINDOW)),

intn等于0,ns1,ns2,ns3,ns4,ns5,ns6,

intns7,ns8,ns9,

intns10,ns13,ns14,

intns11,ns12,

n++,

ns1等于nstone1x+n,

rect1.left等于ns1-20,

rect1.top等于nstone1y-20,

rect1.right等于rect1.left+bm.bmWidth+10,

rect1.bottom等于rect1.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect1,&,brush),

nstone1y等于nstone1y+14,//陨石1下落的速度

if(nstone1y>,ClientRect.bottom)

{

nstone1y等于0,

nstone1x等于rand()%ClientRect.right,//陨石落下的位置随机产生

}

ns2等于nstone2x+n,

rect2.left等于ns2-20,

rect2.top等于nstone2y-20,

rect2.right等于rect2.left+bm.bmWidth+10,

rect2.bottom等于rect2.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect2,&,brush),

nstone2y等于nstone2y+21,

if(nstone2y>,ClientRect.bottom)

{

nstone2y等于0,

nstone2x等于rand()%ClientRect.right,

}

ns3等于nstone3x+n,

rect3.left等于ns3-20,

rect3.top等于nstone3y-20,

rect3.right等于rect3.left+bm.bmWidth+10,

rect3.bottom等于rect3.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect3,&,brush),

nstone3y等于nstone3y+23,

if(nstone3y>,ClientRect.bottom)

{

nstone3y等于0,

nstone3x等于rand()%ClientRect.right,

}

ns4等于nstone4x+n,

rect4.left等于ns4-20,

rect4.top等于nstone4y-20,

rect4.right等于rect4.left+bm.bmWidth+10,

rect4.bottom等于rect4.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect4,&,brush),

nstone4y等于nstone4y+18,

if(nstone4y>,ClientRect.bottom)

{

nstone4y等于0,

nstone4x等于rand()%ClientRect.right,

}

ns5等于nstone5x+n,

rect5.left等于ns5-20,

rect5.top等于nstone5y-20,

rect5.right等于rect5.left+bm.bmWidth+10,

rect5.bottom等于rect5.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect5,&,brush),

nstone5y等于nstone5y+15,

if(nstone5y>,ClientRect.bottom)

{

nstone5y等于0,

nstone5x等于rand()%ClientRect.right,

}

ns6等于nstone6x+n,

rect6.left等于ns6-20,

rect6.top等于nstone6y-20,

rect6.right等于rect6.left+bm.bmWidth+10,

rect6.bottom等于rect6.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect6,&,brush),

nstone6y等于nstone6y+22,

if(nstone6y>,ClientRect.bottom)

{

nstone6y等于0,

nstone6x等于rand()%ClientRect.right,

}

ns7等于nstone7x+n,

rect7.left等于ns7-20,

rect7.top等于nstone7y-20,

rect7.right等于rect7.left+bm.bmWidth+10,

rect7.bottom等于rect7.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect7,&,brush),

nstone7y等于nstone7y+20,

if(nstone7y>,ClientRect.bottom)

{

nstone7y等于0,

nstone7x等于rand()%ClientRect.right,

}

ns8等于nstone8x+n,

rect8.left等于ns8-20,

rect8.top等于nstone8y-20,

rect8.right等于rect8.left+bm.bmWidth+10,

rect8.bottom等于rect8.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect8,&,brush),

nstone8y等于nstone8y+9,

if(nstone8y>,ClientRect.bottom)

{

nstone8y等于0,

nstone8x等于rand()%ClientRect.right,

}

ns9等于nstone9y+n,

rect9.left等于ns9-20,

rect9.top等于nstone9y-20,

rect9.right等于rect9.left+bm.bmWidth+10,

rect9.bottom等于rect9.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect9,&,brush),

nstone9x等于nstone9x+3,

if(nstone9y>,ClientRect.right)

{

nstone9x等于0,

nstone9y等于rand()%ClientRect.bottom,

}

ns10等于nstone10y+n,

rect10.left等于ns10-20,

rect10.top等于nstone10y-20,

rect10.right等于rect10.left+bm.bmWidth+10,

rect10.bottom等于rect10.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect10,&,brush),

nstone10x等于nstone10x+6,

if(nstone10x>,ClientRect.right)

{

nstone10x等于0,

nstone10y等于rand()%ClientRect.bottom,

}

ns11等于flowerx+n,

rect11.left等于ns11-20,

rect11.top等于flowery-20,

rect11.right等于rect11.left+bm.bmWidth+10,

rect11.bottom等于rect11.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect11,&,brush),

flowery等于flowery+15,

if(flowery>,ClientRect.bottom)

{

flowery等于0,

flowerx等于rand()%ClientRect.right,

}

ns12等于diamondx+n,

rect12.left等于ns12-20,

rect12.top等于diamondy-20,

rect12.right等于rect12.left+bm.bmWidth+10,

rect12.bottom等于rect12.top+bm.bmHeight+10,

ClientDC.FillRect(&,rect12,&,brush),

diamondy等于diamondy+15,

if(diamondy>,ClientRect.bottom)

{

diamondy等于0,

diamondx等于rand()%ClientRect.right,

}

if(mx>,ClientRect.right)

{

DrawBlank(&,ClientDC,mx,my),

mx等于0,

}

if(mx<,0)

{

DrawBlank(&,ClientDC,mx,my),

mx等于ClientRect.right,

}

if(my>,ClientRect.bottom)

{

DrawBlank(&,ClientDC,mx,my),

my等于0,

}

if(my<,0)

{

DrawBlank(&,ClientDC,mx,my),

my等于ClientRect.bottom,

}

if(n>,3)

{

n等于0,

}

DrawStone1(&,ClientDC),

DrawStone2(&,ClientDC),

DrawStone3(&,ClientDC),

DrawStone4(&,ClientDC),

DrawStone5(&,ClientDC),

DrawStone6(&,ClientDC),

DrawStone7(&,ClientDC),

DrawStone8(&,ClientDC),

DrawStone9(&,ClientDC),

DrawStone10(&,ClientDC),

DrawFlower(&,ClientDC),

DrawDiamond(&,ClientDC),

CView::OnTimer(nIDEvent),

//撞到不能吃的东西

if(eat(nstone1x,nstone1y))

{

DrawBlank(&,ClientDC,nstone1x,nstone1y),

DrawBlank(&,ClientDC,mx,my),//清除痕迹,画出死亡的样子

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone1y等于0,

nstone1x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone2x,nstone2y))

{

DrawBlank(&,ClientDC,nstone2x,nstone2y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),//转化字符串显示分数

MessageBox(string),

nstone2y等于0,

nstone2x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone3x,nstone3y))

{

DrawBlank(&,ClientDC,nstone3x,nstone3y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone3y等于0,

nstone3x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone4x,nstone4y))

{

DrawBlank(&,ClientDC,nstone4x,nstone4y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone4y等于0,

nstone4x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone5x,nstone5y))

{

DrawBlank(&,ClientDC,nstone5x,nstone5y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone5y等于0,

nstone5x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone6x,nstone6y))

{

DrawBlank(&,ClientDC,nstone6x,nstone6y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

本文是一篇计算机论文范文,计算机相关大学毕业论文,关于计算机学院本科生实验报告相关学年毕业论文范文。适合计算机及游戏及参考文献方面的的大学硕士和本科毕业论文以及计算机相关开题报告范文和职称论文写作参考文献资料下载。

nstone6y等于0,

nstone6x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone7x,nstone7y))

{

DrawBlank(&,ClientDC,nstone7x,nstone7y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone7y等于0,

nstone7x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone8x,nstone8y))

{

DrawBlank(&,ClientDC,nstone8x,nstone8y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone8y等于0,

nstone8x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone9x,nstone9y))

{

DrawBlank(&,ClientDC,nstone9x,nstone9y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone9y等于0,

nstone9x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

if(eat(nstone10x,nstone10y))

{

DrawBlank(&,ClientDC,nstone10x,nstone10y),

DrawBlank(&,ClientDC,mx,my),

DrawDie(&,ClientDC),

KillTimer(1),

string.Format("死亡!分数为%d",score),

MessageBox(string),

nstone10y等于0,

nstone10x等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score等于0,

}

//碰到食物

if(eat(flowerx,flowery))

{

DrawBlank(&,ClientDC,flowerx,flowery),

flowery等于0,

flowerx等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score+等于5,

}

if(eat(diamondx,diamondy))

{

DrawBlank(&,ClientDC,diamondx,diamondy),

diamondy等于0,

diamondx等于rand()%ClientRect.right,

SetTimer(1,200,NULL),

score+等于10,

}

}

五、游戏测试与总结

游戏效果:

Gameover效果:

总结:

本游戏不足:

物体不能移动太快,否则会在背景上留下痕迹.

由于用的是位图,"连续"效果并不好.

无法实时显示分数.

可能的改进:

实现大便的反弹功能.

物体移动速度随着时间的延长而加快.

实时显示分数.

小人可能吐出"炮弹",击破大便.

相关论文

星海音乐学院本科生毕业文开题报告

本文是一篇传播学论文范文,传播学方面有关自考毕业论文开题报告,关于星海音乐学院本科生毕业文开题报告相关毕业论文提纲范文。适合传播学及。

计算机网络课程设计实验报告

本文是一篇计算机论文范文,计算机有关毕业论文格式范文,关于计算机网络课程设计实验报告相关电大毕业论文范文。适合计算机及课程及学科教学。

计算机操作系统实验报告

本文是一篇生产者论文范文,生产者类毕业论文提纲,关于计算机操作系统实验报告相关在职毕业论文范文。适合生产者及缓冲区及消费者方面的的大。

计算机类文开题报告范文

本文是一篇信息化论文范文,信息化类在职毕业论文开题报告,关于计算机类文开题报告范文相关毕业论文提纲范文。适合信息化及网络及计算机网络。

本科生开题报告范文

本文是一篇中国农业论文范文,中国农业相关毕业论文开题报告范文,关于本科生开题报告范文相关硕士毕业论文范文。适合中国农业及开题报告及结。