亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? billiardsplayview.cpp

?? 桌面臺球3D 開發環境VC 庫DIRECTX8.1以上
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
			if (m_nEnter != 100)
			{
				CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
				CBilliardsPlayView *pView = (CBilliardsPlayView *)(pFrame->m_wndSplitter).GetPane(0,1);
				CBilliardsDoc *pDoc = (CBilliardsDoc *)pView->GetDocument();
				CString strTemp;
				if (m_nEnter <= 0)
					m_bCanHit = !m_bCanHit;
				else
				{
					if (m_bCanHit)
					{
						//strTemp = _T("Hehe, 我進球了");
						//pDoc->SendMsg(strTemp);
					}
					if (pDoc->m_bPlayer == SERVER)
					{
						for (j=8; j>0; j--)
							if (m_bVisible[j])
								break;
						if (j<=0)
						{
							//pDoc->WinGame();
						}
						else if (m_bCanHit && !m_bVisible[8])
						{
							//pDoc->LoseGame();
						}
						else
						{
							for (j=8; j<NUM_BALL; j++)
								if (m_bVisible[j])
									break;
							if (j>=NUM_BALL)
							{
							//	pDoc->LoseGame();
							}
							else if (!m_bCanHit && !m_bVisible[8])
							{
							//	pDoc->WinGame();
							}
						}
					}
					else if (pDoc->m_bPlayer == CLIENT)
					{
						for (j=8; j<NUM_BALL; j++)
							if (m_bVisible[j])
								break;
						if (j>=NUM_BALL)
						{
							//pDoc->WinGame();
						}
						else if (m_bCanHit && !m_bVisible[8])
						{
							//pDoc->LoseGame();
						}
						else
						{
							for (j=8; j>0; j--)
								if (m_bVisible[j])
									break;
							if (j<=0)
							{
							//	pDoc->LoseGame();
							}
							else if (!m_bCanHit && !m_bVisible[8])
							{
							//	pDoc->WinGame();
							}
						}
					}

					if (!m_bVisible[0])
						m_bCanHit = !m_bCanHit;
				}

				if (pDoc->m_bPlayer == IDLE)
					m_bCanHit = TRUE;
				else
				{
					if (m_bCanHit)
					{
						//strTemp = _T("1該我擊球");
						//pDoc->m_pClientSocket->Send(strTemp,strTemp.GetLength());
					}
				}
			}

			if (!m_bVisible[0]) //母球落袋后重畫母球
			{
				m_fPosition[0][1]=m_fPosition[0][2]=0.0f;
				m_fPosition[0][0] = - 2.0*TABLE_LENGTH/3.0;
				m_bVisible[0]=TRUE;
			}
			m_fStrength=22.5f;
			m_fDirection[0]=1.0f;
			m_fDirection[2]=0.0f;
			m_fVelocity[0][0]=5.0f;
		}
	}

	DrawPlayground();
	DrawBall();

	if (!m_bAnimate)
	{
		glPushName(1);
		DrawArrow();
		glPopName();
	}

	glMatrixMode(GL_MODELVIEW);
	glPopMatrix();
	
	glFlush();
	SwapBuffers(m_hDc);				//交換緩沖區
}

void CBilliardsPlayView::DrawArrow()
{
	float angle;
	int mode;

	glGetIntegerv(GL_RENDER_MODE , &mode);
	glDisable(GL_LIGHTING);
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();

	glTranslatef(0.0f, TABLE_HEIGHT/2.0+2.0*BALL_RADIUS, 0.0f);
	glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2]);
	glColor3f(0.5f,0.5f,0.0f);
	glLineWidth(1.5);
	if (m_fDirection[0]>=0.0)
		angle = asin(m_fDirection[2])/M_PI*180.0;
	else
		angle = 180.0 - asin(m_fDirection[2])/M_PI*180.0;

	glRotatef(-angle,0.0f,1.0f,0.0f);
	glBegin(GL_LINES);
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(m_fStrength,0.0,0.0);
	glEnd();
	glTranslatef(m_fStrength,0.0f,0.0f);
	glBegin(GL_TRIANGLES);
	glVertex3f(-2.0f, 0.0f, 2.0f);
	glVertex3f(-2.0f, 0.0f, -2.0f);
	glVertex3f(3.0f, 0.0f, 0.0f);
	glEnd();

	glPopMatrix();
	glEnable(GL_LIGHTING);
	glLineWidth(1.0);
}

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++)
		if (m_bVisible[i])
		{
			x3 = fabs(m_fPosition[i][0]);
			z3 = fabs(m_fPosition[i][2]);
			if (((x1-x3)*(x1-x3)+(z1-z3)*(z1-z3)<2.0*BALL_RADIUS*BALL_RADIUS)||
				((x2-x3)*(x2-x3)+(z2-z3)*(z2-z3)<2.0*BALL_RADIUS*BALL_RADIUS))//球進洞了
			{
				m_bVisible[i] = FALSE;
				if(pView->m_bSoundGoal)
					sndPlaySound("res\\goal.wav",SND_ASYNC);
				if (m_nEnter<i)       //?
					m_nEnter = i;
			}
		}

	for (i=0;i<NUM_BALL;i++)
		for (j=0;j<NUM_BALL;j++)
			mark[i][j]=FALSE;

	for (i=0;i<NUM_BALL;i++)
		if (m_bVisible[i])
		{
			if ((m_fPosition[i][0]>TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS)&&(fabs(m_fPosition[i][2])<TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))
			{//右壁
				m_fPosition[i][0]=TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS;
				hitx=INFINITY;
                hitz=INFINITY;
				if (m_fVelocity[i][0]>0.0){
					m_fVelocity[i][0] = -DECR*m_fVelocity[i][0];
					if(pView->m_bSoundCush)
						sndPlaySound("res\\cush.wav",SND_ASYNC);
				}

			}
			else if ((m_fPosition[i][0]<-(TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS))&&(fabs(m_fPosition[i][2])<TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))
			{//左壁
				m_fPosition[i][0]=-(TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS);
				hitx=INFINITY;
                hitz=INFINITY;
				if (m_fVelocity[i][0]<0.0){
					m_fVelocity[i][0] = -DECR*m_fVelocity[i][0];
					if(pView->m_bSoundCush)
						sndPlaySound("res\\cush.wav",SND_ASYNC);
				}
			}
			else if ((m_fPosition[i][2]>TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS)&&(fabs(m_fPosition[i][0])>1.2*BALL_RADIUS))
			{//上壁
				m_fPosition[i][2]=TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS;
				hitx=INFINITY;
                hitz=INFINITY;
				if (m_fVelocity[i][2]>0.0){
					m_fVelocity[i][2] = -DECR*m_fVelocity[i][2];
					if(pView->m_bSoundCush)
						sndPlaySound("res\\cush.wav",SND_ASYNC);
				}
			}
			else if ((m_fPosition[i][2]<-(TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))&&(fabs(m_fPosition[i][0])>1.2*BALL_RADIUS))
			{//下壁
				m_fPosition[i][2]=-(TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS);
				hitx=INFINITY;
                hitz=INFINITY;
				if (m_fVelocity[i][2]<0.0){
					m_fVelocity[i][2] = -DECR*m_fVelocity[i][2];
					if(pView->m_bSoundCush)
						sndPlaySound("res\\cush.wav",SND_ASYNC);
				}
			}
			else//不碰壁
			{
				minf = 8*BALL_RADIUS*BALL_RADIUS;
				for (j=0;j<NUM_BALL;j++)
					if (m_bVisible[j]&&(i!=j)&&!mark[i][j])
					{
						tmpf = (m_fPosition[i][0]-m_fPosition[j][0])*(m_fPosition[i][0]-m_fPosition[j][0])+(m_fPosition[i][2]-m_fPosition[j][2])*(m_fPosition[i][2]-m_fPosition[j][2]);
						//兩球心距離的平方和
                        if (tmpf<minf)
						{
							minf=tmpf;
							k=j;
						}
					}
				    if (minf<=4*BALL_RADIUS*BALL_RADIUS)//兩球心距離的平方和
    				{
					    float line[3];
					    float t1,t2;
					    float vec1[3],vec2[3],vec3[3],vec4[3];
    
					    line[0]=m_fPosition[k][0]-m_fPosition[i][0];    //x坐標差
					    line[1]=0.0f;
					    line[2]=m_fPosition[k][2]-m_fPosition[i][2];    //z坐標差
					    t1 = sqrt(DOTPROD3(line,line));                 //長度
					    if (t1>0.0)
    						VEC3_V_OP_S(line,line,/,t1);                //line[i]=line[i]/t1,成單位向量
    
					    t1=DOTPROD3(m_fVelocity[i],line);               //i號球的速度乘單位向量
					    t2=DOTPROD3(m_fVelocity[k],line);               //k號球的速度乘單位向量
					    VEC3_V_OP_S(vec1,line,*,t1);                    //恢復原line的長度,放入vec1
					    VEC3_V_OP_V(vec1,m_fVelocity[i],-,vec1);        //i號球的x,z方向的分速度-vec1x,z方向分速度
					    VEC3_V_OP_S(vec2,line,*,t2);                    //k號球的速度
					    VEC3_V_OP_V(vec2,m_fVelocity[k],-,vec2);        //
					    if (t1-t2>0.0)
					    {
    						VEC3_V_OP_S(vec3,line,*,t2);
						    VEC3_V_OP_V(m_fVelocity[i],vec1,+,vec3);
						    VEC3_V_OP_S(vec4,line,*,t1);
						    VEC3_V_OP_V(m_fVelocity[k],vec2,+,vec4);
						    mark[i][k]=mark[k][i]=TRUE;
							if(pView->m_bSoundBall)
							sndPlaySound("res\\ball2ball.wav",SND_ASYNC);
					    }
						hitx=INFINITY;
						hitz=INFINITY;
						
				    }
			    }
			
		    	if (fabs(m_fPosition[i][0])>TABLE_LENGTH||fabs(m_fPosition[i][2])>TABLE_WIDTH)
    			{
				    m_bVisible[i]=FALSE;
					if(pView->m_bSoundGoal)
						sndPlaySound("res\\goal.wav",SND_ASYNC);
				    if (m_nEnter<i)
    					m_nEnter = i;
			    }
		    }

	for (i=0;i<NUM_BALL;i++)
		if (m_bVisible[i])
		{
			float t1,s1;
			float vec1[3];

			t1 = sqrt(DOTPROD3(m_fVelocity[i],m_fVelocity[i]));
			if (t1>0.0f)
			{
				VEC3_V_OP_S(vec1,m_fVelocity[i],/,t1);
				s1 = t1+ACCELERATION/2.0;
				t1 = t1+ACCELERATION;
				if (t1<-0.1*ACCELERATION)    //速度小于一定值就停下來
				{
					s1=0.0f;
					t1=0.0f;
				}
				VEC3_V_OP_S(m_fVelocity[i],vec1,*,t1);
				VEC3_V_OP_S(vec1,vec1,*,s1);
                
                if(i==0){
                    if(DOTPROD3(vec1,vec1)>((m_fPosition[i][0]-hitx)*(m_fPosition[i][0]-hitx)+(m_fPosition[i][2]-hitz)*(m_fPosition[i][2]-hitz))){
                        m_fPosition[i][0]=hitx;
                        m_fPosition[i][2]=hitz;
                        hitx=INFINITY;
                        hitz=INFINITY;
                    }
                    else
				        VEC3_V_OP_V(m_fPosition[i],m_fPosition[i],+,vec1);
                }
                else
                    VEC3_V_OP_V(m_fPosition[i],m_fPosition[i],+,vec1);

				x3 = fabs(m_fPosition[i][0]);
				z3 = fabs(m_fPosition[i][2]);
				if (((x1-x3)*(x1-x3)+(z1-z3)*(z1-z3)<BALL_RADIUS*BALL_RADIUS)||
					((x2-x3)*(x2-x3)+(z2-z3)*(z2-z3)<BALL_RADIUS*BALL_RADIUS))
					;
				//以下防止球越界過多
                else if ((m_fPosition[i][0]>TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS)&&(fabs(m_fPosition[i][2])<TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))
				{
					m_fPosition[i][0]=TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS+0.01;
                    
				}
				else if ((m_fPosition[i][0]<-(TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS))&&(fabs(m_fPosition[i][2])<TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))
				{
					m_fPosition[i][0]=-(TABLE_LENGTH-BAR_WIDTH-BALL_RADIUS)-0.01;
                    hitx=INFINITY;
                    hitz=INFINITY;
				}
				else if ((m_fPosition[i][2]>TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS)&&(fabs(m_fPosition[i][0])>1.2*BALL_RADIUS))
				{
					m_fPosition[i][2]=TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS+0.01;
                    hitx=INFINITY;
                    hitz=INFINITY;
				}
				else if ((m_fPosition[i][2]<-(TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS))&&(fabs(m_fPosition[i][0])>1.2*BALL_RADIUS))
				{
					m_fPosition[i][2]=-(TABLE_WIDTH-BAR_WIDTH-BALL_RADIUS)-0.01;
                    hitx=INFINITY;
                    hitz=INFINITY;
				}
				
				for (j=0;j<NUM_BALL;j++)
					if (m_bVisible[j]&&(i!=j))
					{
						tmpf = (m_fPosition[i][0]-m_fPosition[j][0])*(m_fPosition[i][0]-m_fPosition[j][0])+(m_fPosition[i][2]-m_fPosition[j][2])*(m_fPosition[i][2]-m_fPosition[j][2]);
						if (tmpf<4*BALL_RADIUS*BALL_RADIUS)
							
							break;
					}
				if (j<NUM_BALL)     //出現兩球距離小于直徑的情況
				{
					
					VEC3_V_OP_S(vec1,vec1,/,2.0);
					VEC3_V_OP_V(m_fPosition[i],m_fPosition[i],-,vec1); 
					
				}
			}
		}

	for (i=0;i<NUM_BALL;i++)
		if (m_bVisible[i])
			if ((m_fVelocity[i][0]!=0.0)||(m_fVelocity[i][2]!=0.0))
				break;

	if (i<NUM_BALL)
		return 0;
	return 1;
}

void CBilliardsPlayView::MouseSpinGlobal(UINT nFlags, int x, int y, int init)
{
	float centerX, centerY;
	float radius;
	float w, h;  // window

    RECT rect;
    GetClientRect( &rect);
    w =(float)rect.right;
	h =(float)rect.bottom;
    h = (h == 0.0f) ? 1.0f : h;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
**性色生活片久久毛片| 美女视频一区在线观看| 国产精品灌醉下药二区| 亚洲精品中文字幕在线观看| 亚洲免费观看高清| 美美哒免费高清在线观看视频一区二区| 在线影视一区二区三区| 91精品国产综合久久精品app| av成人动漫在线观看| 免费在线观看一区| 成人开心网精品视频| 免费欧美在线视频| 欧美一级专区免费大片| 日本亚洲视频在线| 91美女福利视频| 日韩一区二区三区观看| 久久久久久久久久久久久女国产乱| 亚洲人成网站影音先锋播放| 色悠久久久久综合欧美99| 亚洲精品一区二区三区香蕉| 综合婷婷亚洲小说| 美女视频网站久久| 欧美精品一区二区三区高清aⅴ | 中文字幕中文在线不卡住| 99久久夜色精品国产网站| 欧美色综合久久| 亚洲国产岛国毛片在线| 亚洲香蕉伊在人在线观| 国产不卡在线视频| 欧美tickling网站挠脚心| 亚洲成av人片一区二区三区| 成人毛片视频在线观看| 亚洲桃色在线一区| 欧美日韩三级一区二区| 亚洲美女视频一区| 欧美日韩国产bt| 亚洲一区二区三区不卡国产欧美| 99精品视频在线观看免费| 亚洲激情五月婷婷| 91精品国产综合久久久久久漫画| 美国十次综合导航| 国产精品人成在线观看免费| 国产精品一区二区久久精品爱涩| 欧美另类videos死尸| 亚洲综合色噜噜狠狠| 3d动漫精品啪啪| 国产成人免费在线视频| 国内精品国产三级国产a久久| 精品一区二区三区蜜桃| 欧美欧美欧美欧美首页| 日韩成人精品在线| 久久亚洲影视婷婷| 日韩av电影天堂| 久久精品视频网| 国产精品1区二区.| 亚洲免费观看高清完整版在线| 91精品中文字幕一区二区三区| 国产成人亚洲精品青草天美 | 国产精品九色蝌蚪自拍| 欧美日韩国产一级| 国产精品18久久久久久久久| 一区av在线播放| 亚洲成a人片在线不卡一二三区| 精品精品欲导航| 色综合久久久久| 国产尤物一区二区| 2024国产精品| 91九色02白丝porn| 国产永久精品大片wwwapp | 一区在线观看免费| 欧美一级xxx| 91在线精品一区二区| 理论片日本一区| 精品99一区二区| 欧美做爰猛烈大尺度电影无法无天| 亚洲精品视频观看| 久久亚洲精品国产精品紫薇| 在线观看精品一区| 日韩理论片中文av| 精品不卡在线视频| 欧美日韩亚洲综合在线 | 精品国产一区二区三区久久影院| 91麻豆6部合集magnet| 久久国产精品色婷婷| 亚洲美女免费在线| 亚洲国产精品v| 欧美一级xxx| 欧美视频在线播放| 99久久婷婷国产综合精品| 久久电影网电视剧免费观看| 亚洲国产综合91精品麻豆| 中文字幕一区二区视频| 成人av网站在线| 亚洲欧美日韩国产一区二区三区| 久久女同互慰一区二区三区| 欧美一区二区三区日韩| 日本韩国欧美在线| 成人黄色网址在线观看| 国产在线国偷精品产拍免费yy| 石原莉奈在线亚洲二区| 久久综合99re88久久爱| 欧美一区二区三区播放老司机| 欧美主播一区二区三区美女| 99精品国产视频| 亚洲欧美一区二区三区极速播放| 国产女同性恋一区二区| 欧美性受xxxx黑人xyx性爽| av一本久道久久综合久久鬼色| 精品一区二区免费视频| 日本最新不卡在线| 日韩中文字幕一区二区三区| 亚洲在线观看免费视频| 亚洲精品免费视频| 亚洲女女做受ⅹxx高潮| 久久久国际精品| 69精品人人人人| 欧美日韩精品一区二区天天拍小说| 色婷婷av久久久久久久| 91丨porny丨户外露出| 成人黄色软件下载| 国产成人在线看| 国产一区二区三区免费观看| 精品在线免费观看| 久久国产免费看| 精品在线观看免费| 国产一区二区三区香蕉| 国产一区二区0| 国产精品538一区二区在线| 国模大尺度一区二区三区| 久久国产精品99久久人人澡| 美女在线一区二区| 久草这里只有精品视频| 久久狠狠亚洲综合| 国模娜娜一区二区三区| 国产精品69毛片高清亚洲| 国产成人av资源| 成人va在线观看| 91免费版在线| 国产精品蜜臀在线观看| 亚洲视频免费看| 一区二区三区在线视频观看58| 亚洲综合无码一区二区| 亚洲一区在线电影| 日韩不卡在线观看日韩不卡视频| 日韩电影在线观看电影| 久久精品99久久久| 国产精品一区二区你懂的| 成人综合婷婷国产精品久久蜜臀 | 青青国产91久久久久久| 日本女优在线视频一区二区| 日本不卡123| 久久国产精品色婷婷| 国产精品一区二区久久不卡 | 精品奇米国产一区二区三区| 欧美精品一区视频| 欧美激情综合在线| 亚洲色图欧美在线| 天天综合网 天天综合色| 日本一区二区久久| 亚洲欧洲另类国产综合| 亚洲小少妇裸体bbw| 麻豆视频一区二区| 国产精品一级二级三级| 91丨porny丨国产入口| 欧美三级日韩三级国产三级| 日韩欧美激情四射| 欧美精品久久99| 精品日韩一区二区| 国产精品人成在线观看免费 | 日本不卡一区二区三区| 狠狠狠色丁香婷婷综合激情| 本田岬高潮一区二区三区| 91麻豆国产在线观看| 91麻豆精品国产91久久久久久| 精品国产免费人成电影在线观看四季| 欧美国产亚洲另类动漫| 亚洲风情在线资源站| 国产麻豆91精品| 在线观看国产一区二区| 日韩精品一区二区三区中文精品| 国产精品久久午夜夜伦鲁鲁| 亚洲成年人网站在线观看| 国产精品综合在线视频| 欧美性videosxxxxx| 精品国产凹凸成av人网站| 亚洲区小说区图片区qvod| 日产国产欧美视频一区精品| 成人免费不卡视频| 7878成人国产在线观看| 国产精品久久久久一区 | 午夜精品久久久久久久久久| 国产在线视视频有精品| 在线看日本不卡| 国产日产欧美一区| 丝袜亚洲另类丝袜在线| 成人av午夜影院| 欧美一二三区精品| 亚洲欧美成人一区二区三区| 国产一区二区三区最好精华液| 欧美色老头old∨ideo|