|
分享16级同学大一上学期实现的台球游戏,选择了花式九球并简化规则,侧重台球碰撞、进洞的实现与模拟,加入了双人游戏机制。分步骤代码、可执行程序、录屏效果可以从百度网盘下载:http://pan.baidu.com/s/1hrOBuW8

做游戏,学编程(C语言) 台球
https://www.zhihu.com/video/1492051712092962816
主体功能描述:
程序运行首先显示开始页面,点击Message显示游戏说明,点击Play进入游戏。杆随着鼠标而围着母球旋转,点击鼠标杆停止不动确定出杆方向,此时力度条开始滑动,点击空格母球发出、杆消失。待所有球停下杆重新出现,由之前的黄色变成蓝色,即由玩家一转换到玩家二。相应玩家打球进洞会有得分,如果母球进洞减10分。按ESC键进入暂停界面,按1继续之前的游戏,按2显示结束页面。如果所有球都进洞显示结束页面。
startup()函数将全局变量进行初始化,该函数只运行一次。
show()函数负责显示,clean()函数负责将前一帧画面擦掉,两者交替进行可实现物体移动效果。
updatewithinput()接受用户输入,比如点击鼠标、按空格键。
updatewithoutinput()函数中无需输入各个变量自行更新,如小球无需控制会滑行。
boom()函数在updatewithoutinput()中调用,实现了球之间的碰撞。为了简化处理,每一时刻只处理距离最近的一对球的碰撞,循环运行会产生多球同时碰撞的效果。
startMenu()、pauseMenu()和gameOver()函数显示不同的画面,gameStatus变量的值确定程序显示哪个界面。
球的碰撞是实现难点。球与壁之间是镜面反射,球与球之间存在对心碰撞与非对心碰撞两种情况。碰撞后速度的变化需尽可能真实,否则将影响可玩性。具体实现时每次找到距离最小的一对小球进行碰撞,多次循环以模拟多对球同时发生碰撞的效果。对于非对心碰撞引入向量的概念,速度在垂直于球心连线的方向不变,而在球心连线方向重新分配。
引入一个变量,初始值为零,每一杆进洞该变量加一。根据其是奇数还是偶数,设为不同的玩家操作。
主要实现步骤:

1. 搭建基本框架
2. 实现杆绕球旋转、杆的方向控制球的方向
3. 实现多球碰撞、球壁碰撞
4. 加入阻尼力模拟物理世界
5. 初始化球的位置
6. 导入图片
7. 加入力度条
8. 加入规则与得分机制
9. 加入图片、制定游戏结束机制 |
|