网络台球游戏的网络编程(vc++)

本文介绍了使用VC++开发网络台球游戏的网络编程和碰撞算法。游戏开始时,玩家可选服务器、客户端或单人模式。网络部分基于Socket实现,包括客户端和服务器的Socket类。碰撞算法主要处理球与球及球桌边缘的碰撞,通过计算调整球的运动状态。
摘要由CSDN通过智能技术生成

网络台球游戏的网络编程

转载请注明出处

本文章的源代码下载地址,请单击此链接

网络台球是一款对战式台球游戏,程序界面如图4.13所示。

 

                    图4.13网络台球

在游戏开始的时候,程序会弹出一个类型选择

框,如果4.14 所示,玩家可以选择作为服务器、客

户机或者是单人练习赛。

                     图4.14游戏类型选择

网络台球的绘制部分采用OpenGL 技术。

OpenGL 技术将会在第5章中介绍,这里只介绍台球

碰撞算法和网络实现部分。

先来看看网络台球的碰撞算法。

4.8.1 刚体运动与碰撞

当玩家击球后,系统调用HitBall 函数。HitBall 函数定义如下:

void CBilliardsPlayView::HitBall()

{

if (!m_bAnimate)

{

m_nEnter = 100;

CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();

CBilliardsPlayView*pView=(CBilliardsPlayView*)(pFrame->

m_wndSplitter).GetPane(0,1);

CBilliardsDoc *pDoc = (CBilliardsDoc*)pView->GetDocument();

if (pDoc->m_bPlayer!=IDLE)

{

m_nEnter = -1;

if (m_bCanHit)

pDoc->SendVelocity(m_fVelocity[0]);

}

m_bAnimate = TRUE;

SetTimer(ANIMATE_TIMER,5,NULL);

}

}

HitBall 函数里,需要设置一个所有球都已经静止的标志m_bAnimate。如果不是单人练习赛,

则要将这个击球动作发送到网络的另一端。最后要设置一个动画定时器。

定时器消息响应函数如下:

void CBilliardsPlayView::OnTimer(UINT nIDEvent)

{

CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();

CBilliardsPlayView*pView=(CBilliardsPlayView*)(pFrame->m_wndSplitter).

GetPane(0,1);

if (nIDEvent == ANIMATE_TIMER){

DrawScene();

pView->GetDlgItem(IDC_BUTTON_SHOOT)->EnableWindow(m_bCanHit&&!m_bAnimate);

}

CView::OnTimer(nIDEvent);

}

在定时器消息响应函数中调用了函数DrawScene,结构如下:

Void DrawScene()

4.14 游戏类型选择

第4 章网络游戏开发241

{

…………//省略

if (m_bAnimate)

{

if (Calculate())

{

KillTimer(ANIMATE_TIMER);

m_bAnimate = FALSE;

…………//省略

…………

}

}

…………//省略

}

不难看出Calculate 函数就是计算球函数。当Calculate函数返回1时,表明当前桌面的球都静止

了,所以需要删除定时器,重置球静止标志;当Calculate函数返回0时,说明还有球在运动。

Calculate 函数中使用的bool数组m_bVisible是球落袋的标志。Calculate函数定义如下:

int CBilliardsPlayView::Calculate()

{

CMainFrame *pView=(CMainFrame*)(AfxGetMainWnd());

float x1,z1,x2,z2,x3,z3;

float tmpf,minf;

BOOL mark[NUM_BALL][NUM_BALL];

int i,j;

int k;

x1 = TABLE_LENGTH - BAR_WIDTH;

z1 = TABLE_WIDTH - BAR_WIDTH;

x2 = 0.0;

z2 = TABLE_WIDTH;

for (i=0;i<NUM_BALL;i++)

网络多人对战台球(服务器完整版)使用自己论坛的虚拟币 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 网络台球(服务器+完整文件版) 原作者是谁不清楚了,反正不是我,我只是整理了一下,顺便把台球页面改了改以适应不同的皮肤而已。 测试地址:http://www.flagnet.net/bbs/(内蒙古大学旗帜网站) 测试帐号:注册名:dv 密码:123456 另外本站是内蒙古大学学生自己建立的网站,如果你不打算光临,请节约我们的资源不要注册了,当然,如果你经常来的话我会很欢迎你的:) 程序下载地址:http://bak.flagnet.net/cx/zzdv7.0/tq.rar ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 插件安装方法详解: 一、将服务器端目录下的文件放到任意目录(无须论坛所在目录)用记事本打开jh.sml文件,修改里面的“旗帜”字样为你自己论坛的名称,打开控制面板==》》管理工具==》》数据源 (ODBC),在ODBC数据源中设置一个名为MData的Access型系统DSN数据源(名称一定要是MData,否则你就要手动修改jh.sml),数据库指向你的论坛数据库。 二、将压缩包中的tq.mdb中的user表导入你的论坛数据库中,将tq目录和z_tq.asp,z_tq_config.asp两文件都放在你论坛的根目录下。修改z_tq.asp里的“192.168.1.234”为你自己的IP,修改z_tq.asp中“旗帜”字样为你自己论坛的名称。 三、运行:此处分两种处理情况,推荐使用第二种方式(即作为Sevice在后台自动运行) (1)直接执行展开目录下的jh.bat即可(此方式使得服务器管理起来不太方便,不能注销没,但使用起来简单) (2)作为Sevice在后台自动运行(可以注销服务器,但方法较繁,看仔细了^_^),方法如下:   首先,确定你的系统是WINNT/2K/XP中的一种,如果你用的是win98,那么抱歉,你无法使用我们介绍的这种方法。   1、service文件夹中的内容是微软公司提供的设置WINNT/2K服务的工具。在解压到一个目录后你可以看到两个文件,分别是Instsrv.exe, Srvany.exe。   2、用CMD进入DOS命令行方式,进入解压的目录,运行 instsrv taiqiu x:***xsrvany.exe,注意,上例中taiqiu代表要安装的服务的名称,x:***x代表srvany.exe所在硬盘的目录。例如将压缩包中的文件解压到g:service,那么就应该在g:service目录下执行instsrv taiqiu g:servicesrvany.exe。   3、用REGEDIT命令进入注册表编辑器,找到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices键,应该可以看到刚才建立的服务taiqiu。   4、右键点击服务名taiqiu,点选New,Key(中文版中为新建,项),输入Parameters,这样一个新键被建立,右键点Parameters,点选New, String value(中文版中为新建,字符串值),输入Application。完成后会看到右边窗口中创立了一个名为Application的主键,双击它,输入jh.bat的位置。   5、按和上面同样办法创建AppDirectory和AppParameters两个主键,AppDirectory的键值为taiqiu所在的目录,AppParameters的键值则是运行taiqiu的参数(不用设值),然后关闭注册表编辑器。   6、从控制面板-->管理工具-->服务中找到添加的叫taiqiu的服务,双击修改其属性,将Log ON(中文版中为登录)选项卡中的Log on as(中文版中为登录身份)选项改为Local System account(中文版中为本地系统账户),然后点击OK退出。   7、到此为止,taiqiu的后台服务就基本上配置好了让它自动运行就可以运行服务来看一看是否成功了,用右键点击taiqiu,选择Start(中文版中为运行),然后稍等一会儿,等taiqiu读取完以后,就可以正常使用了。在第一次运行的时候,可以在Log On选项卡中,注意不要选中Allow service to interact
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值