C语言课程设计_黄金矿工(提高篇)代码
C语言课程设计--黄金矿工
一、实验内容
玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。
要求如下:
游戏的初始界面如下图(一),单机键盘上的空格键进入游戏,进入后界面如图(二),金块的总数是20,大小位置是随机的。
在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子,此时矿工是向下摇动转轴。获取到金子往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。
伸出的钩子如果碰触到金子,则钩子和金子一起往回拉,回收的速度根据抓取到的金子的大小变化而变化,金子越大,回拉的速度越慢,反之亦然。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。
抓取到的金子拉回到转轴处消失,此时金子数目减少一个。如果玩家将所有金子抓取完,游戏返回到如图(一)的初始界面。
图(一)
图(二)
二、实验指南
实验一 开始实验
【实验任务】
步骤一、打开FunCode,创建一个的C语言项目;
步骤二、导入Goldman模板。
【实验思路】
按实验指导完成。
【实验指导】
打开FunCode,点击“项目”菜单,选择“创建C语言工程”
注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。
点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“Goldman”模板,点击“导入到工程”按钮,如图二。
图 一 图 二
导入成功后的,界面如下图所示:
实验二 单击空格键,开始游戏
【实验内容】
步骤、启动游戏显示“空格开始”,单击空格键进入游戏初始界面。
【实验思路】
系统会自动响应dOnKeyDown函数来响应键盘按下消息,这部分代码实现在main.cpp里。我们要做的就是通过在main.cpp的dOnKeyDown函数里实现我们的代码。当用户单击键盘上的空格键之后,设置GameBegin即“空格开始”精灵不可见。
【实验指导】
首先游戏会有不同的游戏状态,我们设置全局变量g_iGameState,分别用游戏状0 表示游戏结束等待开始状态;游戏状态1表示按下空格键开始,初始化游戏;游戏状态2表示游戏进行中;
有了以上游戏状态的定义,我们就可以将游戏的主流程写出来;由于游戏是一直进行的,所以一下要写在while循环当中:
switch( g_iGameState )
{
// 初始化游戏,清空上一局相关数据
case 1:
{
GameInit();
g_iGameState=2; // 初始化之后,将游戏状态设置为进行中
}
break;
// 游戏进行中,处理各种游戏逻辑
case 2:
{
// 金子数量大于0的时候,继续游戏
if( g_iGoldCount > 0 )
{
GameRun( fTimeDelta );
}
else
{
// 游戏结束。调用游戏结数函数并把游戏状态修改为结束状态
g_iGameState=0;
GameEnd();
}
}
break;
// 游戏结束/等待按空格键开始
case 0:
default:
break;
};
这是游戏的总体框架,那么我们就来完成这个游戏;
我们已经知道,系统会自动检测键盘的按下消息,即main.cpp里面的dOnKeyDown函数。系统会捕获按下什么键,是否同时按下Alt键或Shift键或Ctrl键,通过dOnKeyDown的参数传递进来,供编程者使用。
键盘的键值我们通过枚举类型给出,其中空格对应的键值为KEY_SPACE,所以当ikey参数的值为KEY_SPACE且游戏的状态为0,即g_iGameState的值为0,说明用户单击了空格键,之后将g_iGameState的值改为1,说明游戏开始,并且把“游戏开始”精灵隐藏掉。
如果是空格键按下,则说明现在游戏开始,说明游戏状态进入1,我们在GameInit中调用dSetSpriteVisible函数将“空格开始”隐藏;这里我们就不在添加代码。
至此,实验二完成,单机空格键,“空格开始”消失,游戏进入初始化状态。
实验三 钩子左右摇摆
【实验内容】
步骤、钩子在等待抓取状态下左右摇摆
【实验思路】
钩子的摆动实际是动画精灵以某个点为中心位置,在某个角度范围来回旋转。在FunCode中,游戏不断刷新屏幕,每次时间为几微秒,每次刷新相应改变精灵的角度,就能达到旋转的效果。
游戏每刷新一次屏幕,while循环执行一次