电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

C++语言课程设计-桌球

  • 资源ID:486147579       资源大小:1.42MB        全文页数:14页
  • 资源格式: DOC        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

C++语言课程设计-桌球

C+语言课程设计一桌球一、实验内容玩家通过移动球杆到单一的桌球处碰撞桌球运动,当桌球于一定速度通过桌面右方的同样颜色的球洞后,则该球进洞,在桌面左边重新分配新球开始游戏。要求如下:1. 游戏的初始界面如下,其中左边有一个体积较小的桌球,其x方向位置固定,y方向位置随机。右边有八个颜色不一样,体积较大的球洞,游戏的目的是使用左边的桌球以一定小的速度穿过右边同样颜色的球洞就算桌球进洞,然后重新分配新球。2. 球杆随鼠标运动而运动,单击球杆,桌球获取一个前进的速度同时往前有运动。桌球的前进方向有一段指示球运动方向的虚线。3. 右侧的球洞以移动的频率不断更换位置。球洞的x左边不变,更换的是y坐标的位置,即每一轮中每一个球洞移动到下一个球洞的位置,最下边的球洞则移动到第一个球洞位置。所以的这些动作都要在一个频率的时间里面完成。因此当游戏一某一个频率进行的时候,右侧的球洞就能实现循环变化的效果。4. 球碰撞到桌面边沿的时候以发射角的角度弹走。5. 球进洞的判断是球以一定的速度通过同样颜色的球洞时,桌球消失,表明球进洞了,此时左侧随机生成新球。球运动到球洞的速度不能太大,太大则球直接运动过球洞,如果速度太小,则球同样不进洞。二、实验指南实验一开始实验【实验任务】步骤一、打开FunCode,创建一个的C+语言项目;步骤二、导入snooker模板。【实验思路】按实验指导完成。【实验指导】1、 打开FunCode,点击“项目”菜单,选择“创建C+工程”注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。2、 点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“snooker”模板,点击“导入到工程”按钮,如图二。 图 一 图 二3、导入成功后的,界面如下图所示:实验二初始化桌球和球杆同时在球的前进方向画虚线【实验内容】步骤一、设置球的初始位置,球杆的初始朝向步骤二、设置球杆随鼠标移动步骤三、在球的前进方向上画虚线【实验思路】在设置初始球的时候要考虑随机本局的球数字,如果和上一局的不一致,则将上局的球拉到屏幕外,将本局的球拉到屏幕内,在Y向上随机摆放球的出生位置,只随机Y方向坐标,不动X方向。对于球杆则通过系统的OnMouseMove函数获取到鼠标移动时的坐标位置,然后使用SetSpritePosition函数同步设置桌球精灵的位置。通过获取球的X和Y坐标,并求两个坐标平方和的平方根来得到球运动方向向量的大小,利用循环调用系统画线函数画虚线。【实验指导】1. 进入LessonX.h,添加CGameMain的成员变量,前面几个实验之后我们知道了类的成员变量一般设置访问属性为private,代码如下:int m_iPlayState;/ 操作状态,0 - 可以点击鼠标打球;1 - 球在运动中,等待下次打球机会int m_iBallNumber;/ 每局从0-7随机一个颜色图片,作为本局的球floatm_fOldRotation;/ 球杆的初始朝向,用于球杆复位CSprite*m_spBall8;/ 8个球的精灵CSprite*m_spBallCue;/球杆精灵2. 进入LessonX.cpp中,在构造函数里面先把m_iGameState的值由0改为1。然后填写初始化代码:m_iPlayState=0;m_iBallNumber=0;m_fOldRotation=0.f;/初始化球杆精灵m_spBallCue=new CSprite("BallCue");/初始化球和球洞精灵char* tmpName=""for(int iLoop = 0; iLoop < 8; iLoop+ )/初始化8个球精灵tmpName=CSystem:MakeSpriteName("Ball",iLoop);m_spBalliLoop=new CSprite(tmpName);m_fHoleRollTime=0.f;3. 在LessonX.cpp中的GameInit函数里面填写球和球杆的初始化代码。随机本局的球数字,如果和上一局的不一致,则将上局的球拉到屏幕外,将本局的球拉到屏幕内。intiNewBallNumber=CSystem:RandomRange( 0, 7 );if( iNewBallNumber != m_iBallNumber )m_spBallm_iBallNumber->SetSpritePositionY(50.f);/ 新球,移动到屏幕中m_iBallNumber=iNewBallNumber;m_spBallm_iBallNumber->SetSpritePositionX(-30.f);在Y向上随机摆放球的初始位置,只随机Y方向坐标,不动X方向intiPosY=CSystem:RandomRange( -25, 25 );m_spBallm_iBallNumber->SetSpritePositionY(float)iPosY);获取球拍的初始朝向,只做一次static int iInited = 0;if( !iInited )iInited=1;m_fOldRotation=m_spBallCue->GetSpriteRotation();4. 设置球杆随鼠标移动而移动。首先通过系统的OnMouseMove函数实时获取到鼠标移动的坐标位置参数,然后将该参数传给球杆精灵的SetSpritePosition函数,这样就能让球杆随鼠标移动了。由于鼠标在地图中有自己的图标,因此我们需要调用系统的隐藏鼠标的函数ShowCursor将鼠标隐藏掉。实现步骤如下:1) 在LessonX.h中添加我们自己定义的OnMouseMove函数的声明:voidOnMouseMove( const float fMouseX, const float fMouseY );/参数即为鼠标X,Y坐标的值2) 在LessonX.cpp中填写该函数的定义:void CGameMain:OnMouseMove( const float fMouseX, const float fMouseY )3) 调用球杆精灵的设置位置函数SetSpritePosition将鼠标的位置设置为球杆精灵的位置。在上面的函数里面填入:m_spBallCue->SetSpritePosition(fMouseX, fMouseY );4) 使用CSystem的隐藏鼠标的函数ShowCursor将鼠标在地图的图标隐藏掉。这一步可以在程序初始化的时候就完成。在GameInit函数里面的if( !iInited )判断里面填入一行代码:CSystem:ShowCursor(0);5) 在Main.cpp中的OnMouseMove函数里面填入我们的自定义函数,实时获取鼠标坐标参数:g_GameMain.OnMouseMove(fMouseX,fMouseY);5. 在球运动的方向画虚线比较简单。主要是获取球和球杆连线的向量,然后等到该向量的单位向量大小,调用DrawLine函数,利用for循环,判断循环因子为偶数的时候不画线,奇数的时候才画线。首先声明定义函数,进入LessonX.h,在CGameMain类中添加画虚线的函数声明:void DrawDottedLine();然后在LessonX中添加函数的定义:void CGameMain:DrawDottedLine()1) 在函数中填入如下代码:/ 获取球杆和球的位置floatfBallPosX=m_spBallm_iBallNumber->GetSpritePositionX();floatfBallPosY=m_spBallm_iBallNumber->GetSpritePositionY();floatfCuePosX=m_spBallCue->GetSpritePositionX();floatfCuePosY=m_spBallCue->GetSpritePositionY();m_spBallm_iBallNumber是指当前桌面上的球。2) 通过上面得到的坐标计算球和球杆之间的向量(fVectorX,fVectorY)。floatfVectorX=fBallPosX - fCuePosX;floatfVectorY=fBallPosY - fCuePosY;3) 判断球和球杆不重合的时候就执行画线操作。所以还需要在上面的代码后面添加一个if的判断,同时计算向量(fVectorX,fVectorY)的大小,以及将该向量单位化:/ 如果只有当两点不重合的时候(向量值不为零),才需要处理if( fVectorX > 0.001f | fVectorX < -0.001f | fVectorY > 0.001f | fVectorY < -0.001f )/ 计算该向量的大小,以及将该向量单位化(sqrt函数是开平方函数,回想下数学里如何求单位向量)floatfVectorSize=sqrt( fVectorX * fVectorX + fVectorY * fVectorY );floatfDirX=fVectorX / fVectorSize;floatfDirY=fVectorY /fVectorSize;因为sqrt()这个开方函数,所以需要包含头文件:#include<math.h>4) 用循环,画出球前进方向的虚线,算法:我们用循环画12段首尾相连的线段,如果全部画出来就是一条实线,如果循环变量为偶数就画,为奇数就不画,那么就得到一条虚,画一条线需要前后两个点: 一个点使用LastPos,一个点使用NewPos。循环12次,按照下面步骤写代码:NewPos等于LastPos加上Dir乘以PosStep(单位向量乘以长度值等于该向量上的一个坐标点)当循环变量为偶数的时候,使用DrawLine画一根线。在画了线之后,将NewPos赋值给LastPos具体代码如下:intiLoop= 0;floatfLastPosX= fBallPosX, fLastPosY = fBallPosY;floatfNewPosX= 0.f, fNewPosY = 0.f;floatfPosStep= fVectorSize / 10.f;for( iLoop = 0; iLoop < 12; iLoop+ )/ 新坐标等于前一坐标加上向量方向上的一个距离值fNewPosX=fLastPosX + fDirX * fPosStep;fNewPosY=fLastPosY + fDirY * fPosStep;/ 偶数段就画if( iLoop % 2 = 0 )CSystem:DrawLine( fLastPosX, fLast

注意事项

本文(C++语言课程设计-桌球)为本站会员(公****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.