查看: 280|回复: 17

做游戏,学编程(C语言) 21 台球

[复制链接]

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-11-30 16:56:42 | 显示全部楼层 |阅读模式
分享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. 加入图片、制定游戏结束机制
回复

使用道具 举报

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-30 16:57:07 | 显示全部楼层
老师啊,你那本书我看完了,不过好像没有软件测试相关的内容啊
回复

使用道具 举报

2

主题

11

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2022-11-30 16:57:32 | 显示全部楼层
那边书主要面向编程初学者,没有测试相关内容
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-30 16:58:15 | 显示全部楼层
就是感觉多少提一点概念嘛
回复

使用道具 举报

0

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-11-30 16:59:15 | 显示全部楼层
我大一做的二十四点,low暴了。。。。
回复

使用道具 举报

2

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-11-30 17:00:06 | 显示全部楼层
我想问一下老师,怎么把写出来的东西弄成应用程序然后发到别人电脑上还可以运行?(其实就是在问上传到网盘上的文件里具体包括什么)
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-11-30 17:00:12 | 显示全部楼层
点赞,建议放oschina或者github
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-30 17:01:03 | 显示全部楼层
Easyx官网有相关内容
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-30 17:01:54 | 显示全部楼层
有一个很困扰的问题 因为小球的速度实质上并不是连续变化的 所以球心之间的距离也不是连续变化的 那么在判断碰撞与否的时候 就会出现小球粘在一起的情况 这个要怎么解决呢老师
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-30 17:02:12 | 显示全部楼层
文件已经不能下了啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表