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

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

?? running.cpp

?? 一個簡單的游戲設計...好好玩的
?? CPP
字號:
#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "define.h"
#include "running.h"

RUNNING::RUNNING(void)
{
	int i;
	bool b;
	float aspect = (float) WIDTH/HEIGHT;

	FORWARD = BACKWARD = false;

	//ball
	B.NumOfBall = 20;
	B.bX = new int[B.NumOfBall];
	B.bZ = new int[B.NumOfBall];
	B.IsHited = new bool[B.NumOfBall];
	B.bR = 1.0f;

	//Ramdom to find all Position
	i = 0;
	while ( i < B.NumOfBall ) 
	{
		b = true;
		B.bX[i] = -G.GetWorldWidth() / 2 + ( abs(rand()) % (G.GetWorldWidth() - 5)) + 5;
		B.bZ[i] = -G.GetWorldLength() / 2 + ( abs(rand()) % (G.GetWorldLength() - 5)) + 5;
		B.IsHited[i] = false; 

		for ( int j = 0 ; j < T.NumOfTree && b ; j++ ) 
			if ( abs(B.bX[i] - T.x[j]) < 2 || abs(B.bZ[i] - T.z[j]) < 2 ) b = false;  

		for ( int j = 0 ; ( j < i ) && b ; j++ ) 
			if ( abs(B.bX[i] - B.bX[j]) < 2 || abs(B.bZ[i] - B.bZ[j]) < 2 ) b = false; 

		if (b) i++;
	}

	//The View MODE
	MODE = MODE1;

	//OPEN GL
	GLfloat fNoLight[] = { 0.0f, 0.0f, 0.0f, 1.0f};
	GLfloat fAmbientLight[] = {0.25f , 0.25f , 0.25f , 1.0f};
	GLfloat fDiffuseLight[] = {0.775f , 0.775f , 0.775f , 1.0f};
	GLfloat fSpecularLight[] = {1.0f , 1.0f , 1.0f , 1.0f};

	glClearColor(0.0, 0.0, 0.0, 0.0);
	glShadeModel(GL_SMOOTH);

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
	glMaterialfv(GL_FRONT,GL_SPECULAR,fSpecularLight);
	glMateriali(GL_FRONT,GL_SHININESS,128);

	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, fNoLight);
    glLightfv(GL_LIGHT0, GL_AMBIENT, fAmbientLight);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, fDiffuseLight);
	glLightfv(GL_LIGHT0, GL_SPECULAR, fSpecularLight);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);

	//Sphere
	SphereObj = gluNewQuadric();
	gluQuadricDrawStyle(SphereObj,GLU_FILL);
	gluQuadricOrientation(SphereObj,GLU_OUTSIDE);

	//the light 
	lRot = 0.0f;

	//cut the back face
	glFrontFace(GL_CW);
    glEnable(GL_CULL_FACE);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(15.0, aspect, 10.0, 1000.0);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

RUNNING::~RUNNING(void)
{
	if ( B.bX ) delete [] B.bX;
	if ( B.bZ ) delete [] B.bZ;
	if ( B.IsHited ) delete [] B.IsHited;
	if ( SphereObj ) gluDeleteQuadric(SphereObj);
}

void RUNNING::KeyBoard(K_EVENT kEvent)
{

	if ( kEvent.Key == '1' && kEvent.STATE  == ::K_EVENT.KEY ) 

		MODE = MODE1;

	else if ( kEvent.Key == '2' && kEvent.STATE  == ::K_EVENT.KEY ) 
		
		MODE = MODE2;

	else if ( kEvent.Key == GLUT_KEY_LEFT && kEvent.STATE  == ::K_EVENT.SPECIAL ) { 

			xTran += 10.0f; 
			Display();

	} else if ( kEvent.Key == GLUT_KEY_RIGHT && kEvent.STATE  == ::K_EVENT.SPECIAL ) { 

			xTran -= 10.0f; 
			Display();

	} else if ( kEvent.Key == GLUT_KEY_UP && kEvent.STATE  == ::K_EVENT.SPECIAL ) { 

			zTran += 10.0f; 
			Display();

	} else if ( kEvent.Key == GLUT_KEY_DOWN && kEvent.STATE  == ::K_EVENT.SPECIAL ) { 

			zTran -= 10.0f; 
			Display();

	}

}

void RUNNING::Mouse(M_EVENT mEvent)
{
	if ( mEvent.MouseButton == GLUT_LEFT_BUTTON && mEvent.MouseState == GLUT_DOWN && mEvent.STATE == ::M_EVENT.MOUSE ) {
		FORWARD = true;	
		BACKWARD = false;
	} else if ( mEvent.MouseButton == GLUT_LEFT_BUTTON && mEvent.MouseState == GLUT_UP && mEvent.STATE == ::M_EVENT.MOUSE ) {
		FORWARD = false; 
		BACKWARD = false;
	} else if ( mEvent.MouseButton == GLUT_RIGHT_BUTTON && mEvent.MouseState == GLUT_DOWN && mEvent.STATE == ::M_EVENT.MOUSE ) {
		FORWARD = false;	
		BACKWARD = true;	
	} else if ( mEvent.MouseButton == GLUT_RIGHT_BUTTON && mEvent.MouseState == GLUT_UP && mEvent.STATE == ::M_EVENT.MOUSE ) {
		FORWARD = false; 
		BACKWARD = false;
	}

	if ( ( FORWARD || BACKWARD ) && (beforeMEvent.MouseX != mEvent.MouseX ) ) {

		GLTMatrix M1,M2,PM;
		GLfloat tF[3];
		float Rot = (beforeMEvent.MouseX - mEvent.MouseX);
			  Rot = (float)((const int) Rot % 360);
		float d = sqrt(C.vUp[1] * C.vUp[1] + C.vUp[2] * C.vUp[2]);
		float _x = acos(C.vUp[2] / d);
		float _y = acos(d);

		if ( BACKWARD ) Rot *= -1.0f;

		gltRotationMatrix(_x,1.0f,0.0f,0.0f,M1);
		gltRotationMatrix(_y,0.0f,1.0f,0.0f,M2);
		gltMultiplyMatrix(M1,M2,PM);
		gltRotationMatrix(gltDegToRad(Rot),0.0f,0.0f,1.0f,M1);
		gltMultiplyMatrix(PM,M1,M2);
		gltRotationMatrix(-_y,0.0f,1.0f,0.0f,M1);
		gltMultiplyMatrix(M2,M1,PM);
		gltRotationMatrix(-_x,1.0f,0.0f,0.0f,M1);
		gltMultiplyMatrix(PM,M1,M2); // the final rotation is in the M2

		tF[0] = M2[0] * C.vForward[0] + M2[1] * C.vForward[1] + M2[2] * C.vForward[2]; 
		tF[1] = M2[4] * C.vForward[0] + M2[5] * C.vForward[1] + M2[6] * C.vForward[2];
		tF[2] = M2[8] * C.vForward[0] + M2[9] * C.vForward[1] + M2[10] * C.vForward[2];

		C.vForward[0] = tF[0]; 
		C.vForward[1] = tF[1];
		C.vForward[2] = tF[2];

	}

	if ( beforeMEvent.MouseButton == GLUT_MIDDLE_BUTTON && beforeMEvent.MouseState == GLUT_DOWN && mEvent.STATE == ::M_EVENT.MOTION ) { 

		if ( beforeMEvent.MouseY != mEvent.MouseY || beforeMEvent.MouseX != mEvent.MouseX ) {
			yTran -= (beforeMEvent.MouseY - mEvent.MouseY) / 5.0f; 
			zTran -= (beforeMEvent.MouseY - mEvent.MouseY) / 1.0f;
			beforeMEvent = mEvent;
			beforeMEvent.MouseButton = GLUT_MIDDLE_BUTTON;
			beforeMEvent.MouseState = GLUT_DOWN;
			Display();
		}

	} else beforeMEvent = mEvent;
}

void RUNNING::GameTimer(int n)
{
	float fLength;
	float CarMaxSize = abs(( C.CAR.GetMaxWidthVertex() - C.CAR.GetMinWidthVertex() )) > abs(( C.CAR.GetMaxLengthVertex() - C.CAR.GetMinLengthVertex() ))
				     ? abs(( C.CAR.GetMaxWidthVertex() - C.CAR.GetMinWidthVertex() )) : abs(( C.CAR.GetMaxLengthVertex() - C.CAR.GetMinLengthVertex() ));
	//the Sun
	lRot += 1.0f;
	if ( lRot > 360.0f ) lRot = 0.0f;
	
	//the Car
	if ( FORWARD && C.Speed <= 6.0f ) C.Speed += 0.1;
	if ( BACKWARD && C.Speed >= -2.0f ) C.Speed -= 0.25;
	if ( C.Speed > 0 ) C.Speed -= 0.05;
	if ( C.Speed < 0 ) C.Speed += 0.05;
	C.vLocation[0] -= C.Speed * C.vForward[0];
	C.vLocation[2] -= C.Speed * C.vForward[2];
	if ( C.vLocation[0] < -G.GetWorldWidth() / 2  + CarMaxSize - 1) { C.vLocation[0]  = -G.GetWorldWidth() / 2 + CarMaxSize - 1; C.Speed = - C.Speed / 2.0f; }
	if ( C.vLocation[2] < -G.GetWorldLength() / 2 + CarMaxSize - 1) { C.vLocation[2] = -G.GetWorldLength() / 2 + CarMaxSize - 1; C.Speed = - C.Speed / 2.0f;  }
	if ( C.vLocation[0] > G.GetWorldWidth() / 2  - CarMaxSize ) { C.vLocation[0]   =  G.GetWorldWidth() / 2 - CarMaxSize; C.Speed = - C.Speed / 2.0f; }
	if ( C.vLocation[2] > G.GetWorldLength() / 2 - CarMaxSize ) { C.vLocation[2]  =  G.GetWorldLength() / 2 - CarMaxSize; C.Speed = - C.Speed / 2.0f; }
	C.vLocation[1] = G.GetPositionHeight(C.vLocation[0],C.vLocation[2]) + abs(C.CAR.GetMinHeightVertex());
	if ( abs(C.Speed) < 0.01 ) C.Speed = 0;

	//the Normal
	GLfloat vP1[3],vP2[3],vP3[3],vN[3],vX[3];
	vP1[0] = C.vLocation[0];
	vP1[2] = C.vLocation[2];
	vP1[1] = G.GetPositionHeight(vP1[0],vP1[2]);

	vP2[0] = C.vLocation[0] + 1;
	vP2[2] = C.vLocation[2] ;
	vP2[1] = G.GetPositionHeight(vP2[0],vP2[2]);

	vP3[0] = C.vLocation[0] ;
	vP3[2] = C.vLocation[2] + 1;
	vP3[1] = G.GetPositionHeight(vP3[0],vP3[2]);

	//Get the New Normal
	G.GetNormalVector(vP2,vP1,vP3,vN);

	//Find vX = vForward x vUp
	vX[0] =  C.vUp[1] * C.vForward[2] - C.vForward[1] * C.vUp[2];
	vX[1] = -C.vUp[0] * C.vForward[2] + C.vForward[0] * C.vUp[2];
	vX[2] =  C.vUp[0] * C.vForward[1] - C.vForward[0] * C.vUp[1];

	//Normalize vX
	fLength = 1.0f / sqrt(vX[0] * vX[0] + vX[1] * vX[1] + vX[2] * vX[2]);

	vX[0] *= fLength;
	vX[1] *= fLength;
	vX[2] *= fLength;

	//New vForward = vX x New Normal
	C.vForward[0] =  vX[1] * vN[2] - vN[1] * vX[2];
	C.vForward[1] = -vX[0] * vN[2] + vN[0] * vX[2];
	C.vForward[2] =  vX[0] * vN[1] - vN[0] * vX[1];

	//Normailize
	fLength = 1.0f / sqrt(C.vForward[0] * C.vForward[0] + C.vForward[1] * C.vForward[1] + C.vForward[2] * C.vForward[2]);

	C.vForward[0] *= fLength;
	C.vForward[1] *= fLength;
	C.vForward[2] *= fLength;

	//Update New Normal
	C.vUp[0] = vN[0]; 
	C.vUp[1] = vN[1];
	C.vUp[2] = vN[2];

	Display();

}

void RUNNING::Display()
{
	double PI = 3.14159265358979323846;
	double C_ = PI / 180.0f;
	double MAX;
	float ColorRate;

	MAX = G.GetWorldWidth() > G.GetWorldLength() ? G.GetWorldWidth() : G.GetWorldLength();
	MAX = MAX > G.GetWorldHeight() ? MAX : G.GetWorldHeight();
	MAX = MAX;

	GLfloat fLightPos0[4];
	GLfloat CarMatrix[16];
	GLfloat fSpecularLight[4];
	ColorRate = 1 - abs(lRot - 180.0f) / 180.0f;
	fLightPos0[0] = -cos(C_ * lRot + PI / 2.0f);
	fLightPos0[1] = -sin(C_ * lRot + PI / 2.0f);
	fLightPos0[2] = 0;
	fLightPos0[3] = 0;
	fSpecularLight[0] = ColorRate;
	fSpecularLight[1] = ColorRate;
	fSpecularLight[2] = ColorRate;
	fSpecularLight[3] = 1;

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	if ( MODE == MODE1 )
		gluLookAt( C.vLocation[0] + C.vLocation[1] * tan( C_ * 45 )  , 20 + C.vLocation[1] , 60 + C.vLocation[2] + C.vLocation[1] * tan( C_ * 60 )   , C.vLocation[0] , C.vLocation[1] , C.vLocation[2] , 0, 1, 0);
	else {
		gluLookAt( C.vLocation[0] + 8 * C.vForward[0] , C.vLocation[1] + 8 * C.vForward[1] , C.vLocation[2] + 8 * C.vForward[2]  , C.vLocation[0] ,  C.vLocation[1] , C.vLocation[2] , C.vUp[0] , C.vUp[1] , C.vUp[2] );      
		glTranslatef(0.0f, -2.0f , 0.0f);
	}

	glLightfv(GL_LIGHT0, GL_POSITION, fLightPos0);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, fSpecularLight);

	glPushMatrix();

		glTranslatef(xTran, 0.0f , 0.0f);
		glTranslatef(0.0f, yTran , 0.0f);
		glTranslatef(0.0f, 0.0f , zTran);
		glRotatef(xRot, 1.0f, 0.0f, 0.0f);
		glRotatef(yRot, 0.0f, 1.0f, 0.0f);

		glDisable(GL_LIGHTING);
		//Draw the SUN
		glPushMatrix();
			glTranslatef( MAX / 1.2f * cos(C_ * lRot - PI / 2.0f) , MAX / 1.2f * sin(C_ * lRot - PI / 2.0f) , 0.0f);
			glColor3f(1.0, 1.0, 0.0);
			gluSphere(SphereObj,2,30,10);
		glPopMatrix();

		//Draw the SKY
		glPushMatrix();
			glTranslatef(0.0, -MAX / 3.0f ,0.0);
			glColor3f( ColorRate , ColorRate ,  ColorRate );
			glFrontFace(GL_CCW);
			glRotatef(180,1,0,0);
			S.Draw();
			glFrontFace(GL_CW);
		glPopMatrix();
		glEnable(GL_LIGHTING);

		//Draw the Tree & Ground
		glCallList(FieldList);
		
		//Draw the Ball
		for(int i = 0 ; i < B.NumOfBall ; i++) {
			glPushMatrix();
				glTranslatef(B.bX[i] , G.GetPositionHeight(B.bX[i] , B.bZ[i]) + B.bR + 0.1f , B.bZ[i]);
				glRotatef(T.Rot[i], 0.0f, 1.0f, 0.0f);
				glColor3f(1.0,0.0,0.0);
				gluSphere(SphereObj,B.bR,30,10);
			glPopMatrix();
		}

		// Draw the Car
		glColor3f(1.0,1.0,1.0);
		GetMatrix(&C,CarMatrix);
		glMultMatrixf(CarMatrix);
		if ( MODE == MODE1 ) {
			glRotatef(-90, 1.0f, 0.0f, 0.0f);
			C.CAR.Draw();
		}

	glPopMatrix();
	glutSwapBuffers();

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线观| 久久久久久免费网| 欧美一级xxx| 国产精品久久久久久久久久免费看| 亚洲激情图片qvod| 青青草97国产精品免费观看无弹窗版| 国产电影一区二区三区| 欧美肥妇free| 亚洲精品菠萝久久久久久久| 国产伦理精品不卡| 欧美精品乱码久久久久久按摩| 国产精品欧美综合在线| 另类中文字幕网| 欧美日韩在线不卡| 亚洲天堂a在线| 粉嫩aⅴ一区二区三区四区| 日韩欧美国产小视频| 亚洲国产成人精品视频| 成人午夜私人影院| 久久这里都是精品| 美国十次综合导航| 欧美久久高跟鞋激| 亚洲自拍偷拍九九九| 成人自拍视频在线观看| 久久免费看少妇高潮| 日本最新不卡在线| 欧美三区在线视频| 亚洲影院久久精品| 日本乱码高清不卡字幕| 自拍偷自拍亚洲精品播放| 国产成人亚洲综合a∨猫咪| 欧美成人精精品一区二区频| 日韩黄色免费网站| 91精品在线观看入口| 丝袜美腿亚洲一区二区图片| 欧美日本一区二区三区四区| 亚洲资源中文字幕| 欧美日韩综合不卡| 亚洲午夜免费视频| 欧美手机在线视频| 亚洲超丰满肉感bbw| 欧美亚洲日本一区| 日日摸夜夜添夜夜添精品视频| 欧美三级乱人伦电影| 亚洲第一成人在线| 91麻豆精品国产91久久久更新时间| 婷婷成人激情在线网| 欧美另类高清zo欧美| 日韩精品免费专区| 日韩美女一区二区三区四区| 精品一区二区三区不卡| 国产婷婷色一区二区三区四区| 国产成人精品免费| 亚洲综合一区二区三区| 欧美人狂配大交3d怪物一区| 热久久一区二区| 精品国产乱码久久久久久老虎| 国产在线精品不卡| 国产亚洲美州欧州综合国| 成人黄色在线视频| 亚洲美女视频一区| 欧美精品1区2区3区| 精品一区免费av| 亚洲国产成人私人影院tom| 色综合久久六月婷婷中文字幕| 亚洲成人综合网站| 精品久久久三级丝袜| 成人网男人的天堂| 亚洲成人资源在线| 久久久久久久久久电影| 91麻豆成人久久精品二区三区| 三级久久三级久久久| 国产欧美日韩精品一区| 在线观看www91| 韩国三级在线一区| 亚洲日本韩国一区| 欧美tk—视频vk| 91原创在线视频| 久久 天天综合| 一区二区三区毛片| 精品国产乱子伦一区| 在线视频一区二区三| 国产一区二区在线看| 中文字幕亚洲区| 日韩丝袜美女视频| 99国产一区二区三精品乱码| 久久激五月天综合精品| 亚洲三级电影全部在线观看高清| 日韩一级在线观看| 在线亚洲欧美专区二区| 国内精品国产成人国产三级粉色| 一卡二卡欧美日韩| 国产日韩精品一区二区浪潮av| 制服丝袜国产精品| 色8久久人人97超碰香蕉987| 色婷婷综合久色| 国产麻豆午夜三级精品| 五月综合激情网| 亚洲综合男人的天堂| 国产精品污www在线观看| 欧美成人aa大片| 欧美日韩视频专区在线播放| 99久久综合色| 高清在线成人网| 国产一区二区三区免费播放| 午夜欧美大尺度福利影院在线看| 亚洲图片激情小说| 中文字幕精品三区| xvideos.蜜桃一区二区| 日韩一级黄色片| 欧美久久久久久蜜桃| 欧美日韩一区二区在线观看| 色综合中文字幕| 91小视频免费看| 91免费看`日韩一区二区| 丁香激情综合国产| 国产成人丝袜美腿| 国产美女精品人人做人人爽| 经典一区二区三区| 久久国内精品视频| 美女尤物国产一区| 免播放器亚洲一区| 久久99国产精品久久99果冻传媒| 麻豆久久久久久| 激情图片小说一区| 毛片基地黄久久久久久天堂| 久久成人羞羞网站| 国内精品免费**视频| 国产很黄免费观看久久| 国产99久久久国产精品潘金网站| 国产激情视频一区二区在线观看| 国产91精品露脸国语对白| 国产精品一区二区免费不卡| 欧美精品久久99久久在免费线| 欧美中文字幕亚洲一区二区va在线| 色94色欧美sute亚洲13| 欧美精品日韩精品| 精品美女在线观看| 日本一区二区电影| 亚洲精品水蜜桃| 天天色综合天天| 国产一区视频导航| 不卡的av网站| 欧美视频中文字幕| 欧美电视剧免费观看| 国产午夜一区二区三区| 亚洲女同一区二区| 日av在线不卡| bt欧美亚洲午夜电影天堂| 欧美亚洲自拍偷拍| 精品国产1区2区3区| 国产精品久久久久久久久果冻传媒| 亚洲最色的网站| 国产美女一区二区三区| 99久久精品情趣| 91精品国产综合久久久久久漫画 | 欧美午夜精品久久久久久孕妇 | 欧美日韩国产高清一区二区| 欧美成人vr18sexvr| 亚洲视频图片小说| 开心九九激情九九欧美日韩精美视频电影 | 国产精品入口麻豆原神| 亚洲一区二区在线观看视频| 久久99精品国产.久久久久| www.亚洲免费av| 日韩一卡二卡三卡| 一区二区三区四区精品在线视频| 久草中文综合在线| 欧美吻胸吃奶大尺度电影 | 国产日本亚洲高清| 亚洲一级二级三级在线免费观看| 国产一区视频网站| 538在线一区二区精品国产| 中文字幕亚洲一区二区av在线| 狠狠色狠狠色综合系列| 欧美午夜宅男影院| 国产精品水嫩水嫩| 国产在线精品不卡| 欧美老女人在线| 亚洲精品一二三区| av不卡免费在线观看| 欧美va在线播放| 日韩精品福利网| 欧美系列在线观看| 亚洲码国产岛国毛片在线| 国产69精品一区二区亚洲孕妇| 欧美一级淫片007| 香蕉乱码成人久久天堂爱免费| 色综合视频一区二区三区高清| 久久一区二区视频| 免费成人美女在线观看.| 欧美日韩另类一区| 亚洲另类中文字| 色先锋资源久久综合| 国产精品激情偷乱一区二区∴| 国产精品99久久久久久久女警 | 欧美日韩日日骚| 一区二区三区高清不卡| 91网站最新地址| 亚洲欧洲精品一区二区三区不卡 |