3D斯诺克桌球游戏

    为了应付学院检查,只好抽出两三天的时间做个一直打算做但总是没有时间的桌球游戏。本人比较爱好斯诺克运动,虽然技术不怎么样。好了废话不多说,切入正题吧。3D的引擎有很多,本人用得最顺手的当属OSG,物理引擎我的机子上只有ODE与bullet两款,选择了简单的ODE。按照上学期课程所学的设计模式,稍微运用了下,设计了若干类。主要考虑到统分的方便,因此把球类做成一族产品,用一个简单工厂来创建它们。类图如下,由于没有事先设计类图,所以这些类图都是用逆向工程从代码中生成的,不是那么简洁美观。


简单工厂创建球类:

 

 

 

 

 

 

考虑到在物理引擎中一般分为世界和刚体(因为桌球游戏应该只需要考虑刚体便足够了),因此将世界类与刚体类分为了两级层次来处理,分别用CWorld与CBody类对他们的属性即方法进行了封装。所有的球以及台球桌都是从CBody类派生而来。而CWorld是拥有这些类的对象的,共同组成了整个游戏。那么再贴点这些类的图吧。

 

 

 

 

鼠标键盘的交互控制,在OSG中比较简单可以实现的,从osgGA::GUIEventHandler派生了一个类CHitHandler用于完成击球交互控制。

最终的效果如图所示:

 

 

 

换个角度

 

 

 

源码暂且未贴出来,之前在我的资源里上传过一个OSG&ODE桌球游戏的雏形,不过那个程序没有设计类,只是基于控制台的一个简单测试,至于这个成型版本本人用的开发环境是VS2005 MFC对话框应用程序。如果有朋友有兴趣的话我也可以整理一下贴出来,供大家讨论,欢迎各位行家给予指点一二,小可不胜感激!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值