当前位置:首页 > 04FunCode游戏设计+C++课程设计 - 桌球+ - 图文
C++语言课程设计一桌球
一、实验内容
玩家通过移动球杆到单一的桌球处碰撞桌球运动,当桌球于一定速度通过桌面右方的同样颜色的球洞后,则该球进洞,在桌面左边重新分配新球开始游戏。要求如下:
1. 游戏的初始界面如下,其中左边有一个体积较小的桌球,其x方向位置固定,y方
向位置随机。右边有八个颜色不一样,体积较大的球洞,游戏的目的是使用左边的桌球以一定小的速度穿过右边同样颜色的球洞就算桌球进洞,然后重新分配新球。
2. 3.
4. 5.
球杆随鼠标运动而运动,单击球杆,桌球获取一个前进的速度同时往前有运动。桌球的前进方向有一段指示球运动方向的虚线。
右侧的球洞以移动的频率不断更换位置。球洞的x左边不变,更换的是y坐标的位置,即每一轮中每一个球洞移动到下一个球洞的位置,最下边的球洞则移动到第一个球洞位置。所以的这些动作都要在一个频率的时间里面完成。因此当游戏一某一个频率进行的时候,右侧的球洞就能实现循环变化的效果。 球碰撞到桌面边沿的时候以发射角的角度弹走。
球进洞的判断是球以一定的速度通过同样颜色的球洞时,桌球消失,表明球进洞了,此时左侧随机生成新球。球运动到球洞的速度不能太大,太大则球直接运动过球洞,如果速度太小,则球同样不进洞。
二、实验指南
实验一开始实验
【实验任务】
步骤一、打开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随机一个颜色图片,作为本局的球 float
m_fOldRotation; m_spBall[8]; m_spBallCue;
// 球杆的初始朝向,用于球杆复位 // 8个球的精灵 //球杆精灵
CSprite* CSprite*
2. 进入LessonX.cpp中,在构造函数里面先把m_iGameState的值由0改为1。
然后填写初始化代码:
m_iPlayState m_iBallNumber m_fOldRotation //初始化球杆精灵 m_spBallCue
= = =
0; 0;
0.f;
= new CSprite(\
//初始化球和球洞精灵 char* tmpName=\
for(int iLoop = 0; iLoop < 8; iLoop++ ) {
//初始化8个球精灵 }
tmpName=CSystem::MakeSpriteName(\m_spBall[iLoop]=new CSprite(tmpName); m_fHoleRollTime
=
0.f;
3. 在LessonX.cpp中的GameInit函数里面填写球和球杆的初始化代码。
随机本局的球数字,如果和上一局的不一致,则将上局的球拉到屏幕外,将本局的球拉到屏幕内。
int iNewBallNumber
=
CSystem::RandomRange( 0, 7 );
if( iNewBallNumber != m_iBallNumber ) { }
m_spBall[m_iBallNumber]->SetSpritePositionY(50.f); // 新球,移动到屏幕中 m_iBallNumber
=
iNewBallNumber;
m_spBall[m_iBallNumber]->SetSpritePositionX(-30.f);
在Y向上随机摆放球的初始位置,只随机Y方向坐标,不动X方向
int
iPosY
=
CSystem::RandomRange( -25, 25 );
m_spBall[m_iBallNumber]->SetSpritePositionY((float)iPosY);
获取球拍的初始朝向,只做一次
static int iInited = 0; if( !iInited ) {
}
iInited
=
1;
=
m_spBallCue->GetSpriteRotation();
m_fOldRotation
4. 设置球杆随鼠标移动而移动。首先通过系统的OnMouseMove函数实时获取到鼠标
共分享92篇相关文档