弹球游戏,文字还有点问题
2012年01月13日
#include
#include
#include
#include
#include
#include
#define PI3.14159
#define MAX_CHAR128
#define ballV1.0
#define cpuV0.2//减速
#define rCamera6
#define Middle-rCamera
#define WHITEglColor3f(1,1,1);
#define GRAYglColor3f(0.5,0.5,0.5);
#define GREENglColor3f(0,1,0);
#define REDglColor3f(1,0,0);
#define PURPLEglColor3f(1,0,1);
#define BLUEglColor3f(0,0,1);
GLfloat light_position[] = { 0.0, 1.0, 0.0, 0.0 };
GLfloat light_specular[]={1.0, 1.0, 1.0, 1.0};
GLfloat light_shininess[] = { 100.0 };
static GLuint lists;
GLUquadricObj *q1,*q2,*q3;
GLintImageWidth,ImageHeight,
WindowWidth=600,WindowHeight=600;
GLuinttexture;
GLubyte *PixelData;
boolmoving=true,
win=false,
lose=false;
GLfloat myX=0,myY=Middle+1,
cpuX=0,cpuY=Middle-1,
ballX=0,ballY=myY-0.25,
ballvX,ballvY,ballAng,
eyeX=0,eyeZ=0,eyeAng=0;
int rand(int low, int high){
return rand()%(high-low)+low;
}
float dst(float x1,float y1, float x2,float y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void readBmp(FILE* pFile){
fseek(pFile, 0x12, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), 1, pFile);
fread(&ImageHeight, sizeof(ImageHeight), 1, pFile);
int PixelLength = ImageWidth * 3;
while( PixelLength % 4 != 0 )
++PixelLength;
PixelLength *= ImageHeight;
PixelData=new GLubyte[PixelLength];
GLubyte* tmp=new GLubyte[PixelLength];
fseek(pFile, 54, SEEK_SET);
fread(tmp, PixelLength, 1, pFile);
for(int i=0;i=30)
eyeAng=30;
else if(eyeAng0.85)
myX=0.85;
if(myXMiddle+1.9)
myY=Middle+1.9;
glutPostRedisplay();
}
void restart(){
moving=true;
win=false;
lose=false;
myX=0;myY=Middle+1;
cpuX=0;cpuY=Middle-1;
ballX=0;ballY=myY-0.25;
ballAng=rand(240,300);
ballvX=ballV*cos(ballAng*PI/180);
ballvY=ballV*sin(ballAng*PI/180);
glutPostRedisplay();
}
void key(unsigned char key,int w,int h){
switch(key){
case VK_RETURN:
restart();
glutPostRedisplay();
break;
default:break;
}
}
void key2(int key,int w,int h){
switch(key){
case GLUT_KEY_LEFT:
adjustAngle(5);
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
adjustAngle(-5);
glutPostRedisplay();
break;
default:break;
}
}
void update(int value){
float up=Middle-1.9,down=Middle+1.9;
if(moving){
//弹球的移动
ballX+=ballvX*0.1;
ballY+=ballvY*0.1;
if(ballX>=-0.4 && ballX=down){//输
moving=false;
win=false;
lose=true;
}
else if(ballX>=-0.4 && ballX=down){//撞到下面
ballY= 2*down-ballY;
ballvY= -ballvY;
ballAng = 360-ballAng;
}
if(ballY=0.9){//撞到右边
ballX= 1.8-ballX;
ballvX= -ballvX;
ballAng= ballAng0)
ballAng = theta;
else
ballAng = theta+360;
}
if((d=dst(ballX,ballY,cpuX,cpuY))0)
ballAng = theta;
else
ballAng = theta+360;
}
//cpu的移动
if(ballY>=cpuY && ballX=cpuY && ballX>cpuX){//向右
cpuX += cpuV*0.1;
if(cpuX> 0.85)
cpuX=0.85;
}
else if(ballY0.85)cpuX=0.85;
if(cpuX
2012年01月13日
#include
#include
#include
#include
#include
#include
#define PI3.14159
#define MAX_CHAR128
#define ballV1.0
#define cpuV0.2//减速
#define rCamera6
#define Middle-rCamera
#define WHITEglColor3f(1,1,1);
#define GRAYglColor3f(0.5,0.5,0.5);
#define GREENglColor3f(0,1,0);
#define REDglColor3f(1,0,0);
#define PURPLEglColor3f(1,0,1);
#define BLUEglColor3f(0,0,1);
GLfloat light_position[] = { 0.0, 1.0, 0.0, 0.0 };
GLfloat light_specular[]={1.0, 1.0, 1.0, 1.0};
GLfloat light_shininess[] = { 100.0 };
static GLuint lists;
GLUquadricObj *q1,*q2,*q3;
GLintImageWidth,ImageHeight,
WindowWidth=600,WindowHeight=600;
GLuinttexture;
GLubyte *PixelData;
boolmoving=true,
win=false,
lose=false;
GLfloat myX=0,myY=Middle+1,
cpuX=0,cpuY=Middle-1,
ballX=0,ballY=myY-0.25,
ballvX,ballvY,ballAng,
eyeX=0,eyeZ=0,eyeAng=0;
int rand(int low, int high){
return rand()%(high-low)+low;
}
float dst(float x1,float y1, float x2,float y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void readBmp(FILE* pFile){
fseek(pFile, 0x12, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), 1, pFile);
fread(&ImageHeight, sizeof(ImageHeight), 1, pFile);
int PixelLength = ImageWidth * 3;
while( PixelLength % 4 != 0 )
++PixelLength;
PixelLength *= ImageHeight;
PixelData=new GLubyte[PixelLength];
GLubyte* tmp=new GLubyte[PixelLength];
fseek(pFile, 54, SEEK_SET);
fread(tmp, PixelLength, 1, pFile);
for(int i=0;i=30)
eyeAng=30;
else if(eyeAng0.85)
myX=0.85;
if(myXMiddle+1.9)
myY=Middle+1.9;
glutPostRedisplay();
}
void restart(){
moving=true;
win=false;
lose=false;
myX=0;myY=Middle+1;
cpuX=0;cpuY=Middle-1;
ballX=0;ballY=myY-0.25;
ballAng=rand(240,300);
ballvX=ballV*cos(ballAng*PI/180);
ballvY=ballV*sin(ballAng*PI/180);
glutPostRedisplay();
}
void key(unsigned char key,int w,int h){
switch(key){
case VK_RETURN:
restart();
glutPostRedisplay();
break;
default:break;
}
}
void key2(int key,int w,int h){
switch(key){
case GLUT_KEY_LEFT:
adjustAngle(5);
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
adjustAngle(-5);
glutPostRedisplay();
break;
default:break;
}
}
void update(int value){
float up=Middle-1.9,down=Middle+1.9;
if(moving){
//弹球的移动
ballX+=ballvX*0.1;
ballY+=ballvY*0.1;
if(ballX>=-0.4 && ballX=down){//输
moving=false;
win=false;
lose=true;
}
else if(ballX>=-0.4 && ballX=down){//撞到下面
ballY= 2*down-ballY;
ballvY= -ballvY;
ballAng = 360-ballAng;
}
if(ballY=0.9){//撞到右边
ballX= 1.8-ballX;
ballvX= -ballvX;
ballAng= ballAng0)
ballAng = theta;
else
ballAng = theta+360;
}
if((d=dst(ballX,ballY,cpuX,cpuY))0)
ballAng = theta;
else
ballAng = theta+360;
}
//cpu的移动
if(ballY>=cpuY && ballX=cpuY && ballX>cpuX){//向右
cpuX += cpuV*0.1;
if(cpuX> 0.85)
cpuX=0.85;
}
else if(ballY0.85)cpuX=0.85;
if(cpuX