VC++ 2008开发网络百家乐街机游戏(下)
2009-02-27 20:03:11 来源:WEB开发网准备工作就绪开始运用函数编码,利用工作者线程读取后台的同步时钟需利用全局函数做消息循环的响应控制,如下:
UINT Play_timer(LPVOID sound)
{
while(1)
{
AfxGetMainWnd()->PostMessageA(WM_READTIMER);
Sleep(1000);
}
return 0;
}
此函数利用无穷循环以秒级单位向用户界面不断发送读时钟的消息,与游戏时钟控制台保持同步显示.此函数的启动在工程的OnInitDialog()函数中编码完成,如下:
……
if(m_PDrawThread)
{
StopDraw=true;
m_PDrawThread->ResumeThread();
::WaitForSingleObject(m_PDrawThread->m_hThread,INFINITE);
delete m_PDrawThread;
}
m_PDrawThread=AfxBeginThread(Play_timer,&m_hWnd,THREAD_PRIORITY_ABOVE_NORMAL,0,CREATE_SUSPENDED);
m_PDrawThread->m_bAutoDelete=false;
StopDraw=false;
m_PDrawThread->ResumeThread();
……
此处编码确保前台客户端游戏启动时能及时发送用户界面读时函数,与时钟控制台同步运行,用户界面读时函数的编码如下:
LRESULT CTH_ROUND_WINDlg::Read_timer(WPARAM wParam,LPARAM lParam)
{
//初始化倒计时等一些基本参数
……
if(int_djs<=11&&bool_hidesfyf)
{
//倒计时达11秒时开始隐藏上局游戏发牌,准备新局的发牌
Hide_sf();
Reset_winfz();
//读取本局游戏路单记录,准备本局游戏发牌
…
Show_aviprev();
string_bjlprec=Return_bjlprec();
Return_bcfp();
bool_hidesfyf=false;
}
//倒计时达6秒,本局游戏开始发牌
if(int_djs<=6&&bool_hide6)
{
Move_play1_prev();//闲家第一张牌
bool_hide6=false;
}
if(int_djs<=5&&bool_hide5)
{
Move_banker1_prev();//庄家第一张牌
bool_hide5=false;
}
if(int_djs<=4&&bool_hide4)
{
Move_play2_prev();//闲家第二张牌
bool_hide4=false;
}
if(int_djs<=3&&bool_hide3)
{
Move_banker2_prev();//庄家第二张牌
bool_hide3=false;
}
if(int_djs<=2&&bool_hide2)
{
Move_play3_prev();//闲家第三张牌,如有则显示,无则不显示
bool_hide2=false;
}
if(int_djs<=1&&bool_hide1)
{
Move_banker3_prev();//庄家第三张牌,如有则显示,无则不显示
bool_hide1=false;
}
if(int_djs==0)
, ; {
m_PDrawThread->SuspendThread();//挂起读时工作者线程
//calculate
……
CString retstravi=Add_bjlprec();//在游戏画面右上角的游戏路单记录中增加本局结果显示
Calculate_grade(retstravi);//根据本局结果结合玩家的游戏下分计算各玩家的输赢状况
//end
……
Move_end();
m_PDrawThread->ResumeThread();//本局游戏结束,恢复读时线程
}
//游戏结束时判断开局
m_sumcc.GetWindowText(string_bjcc);
if(string_bjcc=="180")
{
Show_sumcc();
if(bool_hylpjl)
{
bool_hylpjl=false;
Hide_bjlprec();
Show_bjlprec();
}
}
//游戏开局后隐藏上一轮的游戏记录
m_sumcc.GetWindowText(string_bjcc);
if(string_bjcc=="0")
{
Hide_bjlprec();
Reset_winfz();
}
}
更多精彩
赞助商链接