• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: C/C++
  • 标签: opengl  

资源简介

用opengl 技术开发的3D五子棋 支持加速旋转 减速旋转 支持线框模式

资源截图

代码片段和文件信息

#include 		// 为了使用c的输出函数
#include 
#include  // 为了使用strlen


GLint chess[15][15];//落子点状态数组 15*15个 0-没有棋子 1-白棋子 -1-黑棋子 初始0
// 以下全局变量用于控制动画的状态和速度
float RotateAngle = 0.0f; // 绕y轴旋转的角度
float Azimuth = 45.0; // 绕x轴旋转的角度,初始45度
GLint winFlag;                  //胜负标志 0--未分胜负 1--白方胜 -1--黑方胜
float AngleStepSize = 3.0f; // 角度变化间隔(3度)
const float AngleStepMax = 10.0f;
const float AngleStepMin = 0.1f;
GLint turn = 1; //决定黑方(-1)还是白方(1)走棋
double aspectRatio;//宽高比
int WireframeOn = 0; // 当等于1时为线框模式


 //棋子  第i行 j列 用球表示
void drawChessman(GLint i GLint j)
{
//PushMatrix和PopMatrix为了防止下面的glTranslatef对后续棋子位置产生影响
glPushMatrix();

if (chess[i][j] > 0)  //白棋
{
glColor3f(1.0 1.0 1.0);

else
{
glColor3f(0.0 0.0 0.0); //黑棋
}

//通过平移变换将棋子从原点移动到i行j列
glTranslatef(-7.0 + j * 1.0 0 -7.0 + i * 1.0);
glutSolidSphere(0.4 10 10);//调用glut库绘制实心球 0.4半径 后俩参数为经纬度 控制多边形数目
glPopMatrix();

}

//棋盘建模
void drawChessBoard()
{
glEnable(GL_POLYGON_OFFSET_FILL);//开启多边形填充时深度偏移
glPolygonOffset(1.0 1.0);//设置偏移公式参数


glColor3f(0.93 0.8 0.22);            //棋盘颜色
//画棋盘
glBegin(GL_QUADS);
glVertex3f(-8.0 0.0 -8.0);
glVertex3f(-8.0 0.0 8.0);
glVertex3f(8.0 0.0 8.0);
glVertex3f(8.0 0.0 -8.0);
glEnd();


glDisable(GL_POLYGON_OFFSET_FILL);  //关闭深度偏移
glColor3f(0.0 0.0 0.0);            //棋盘线为黑色
//绘制棋盘线
glBegin(GL_LINES);      //画直线
for (int i = -7; i <= 7; i++)
{
//垂直方向直线
glVertex3f(i 0.0 7.0);
glVertex3f(i 0.0 -7.0);
//水平方向直线
glVertex3f(-7.0 0.0 i);
glVertex3f(7.0 0.0 i);
}
glEnd();
}


//用以处理“普通”按键事件
void myKeyboardFunc( unsigned char key int x int y )
{
switch ( key ) {
case ‘w‘:
WireframeOn = 1-WireframeOn;
if ( WireframeOn ) {
glPolygonMode ( GL_FRONT_AND_BACK GL_LINE ); // 仅显示线框
}
else {
glPolygonMode ( GL_FRONT_AND_BACK GL_FILL ); // 显示实心多边形
}
glutPostRedisplay();
break;
case ‘R‘:
AngleStepSize *= 1.5;
if (AngleStepSize>AngleStepMax ) {
AngleStepSize = AngleStepMax;
}
break;
case ‘r‘:
AngleStepSize /= 1.5;
if (AngleStepSize AngleStepSize = AngleStepMin;
}
break;
case 27: // Esc 键
exit(1);
}
}

//用于处理“特殊”按键事件
void mySpecialKeyFunc( int key int x int y )
{
switch ( key ) {
case GLUT_KEY_UP:
Azimuth += AngleStepSize;
if ( Azimuth > 80.0f ) {
Azimuth = 80.0f;
}
break;
case GLUT_KEY_DOWN:
Azimuth -= AngleStepSize;
if ( Azimuth < 30.0f ) {
Azimuth = 30.0f;
}
break;
case GLUT_KEY_LEFT:
RotateAngle += AngleStepSize;
if ( RotateAngle > 180.0f ) {
RotateAngle -= 360.0f;
}
break;
case GLUT_KEY_RIGHT:
RotateAngle -= AngleStepSize;
if ( RotateAngle < -180.0f ) {
RotateAngle += 360.0f;
}
break;
}
glutPostRedisplay();

}


//画正方形 拾取时采用 效率比绘制球高

void drawSquare(GLint i GLint j)
{
//PushMatrix和PopMatrix为了防止下面的glTranslatef对后续顶点位置产生影响
gl

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11934  2011-04-06 23:56  朱康67五子棋.cpp

----------- ---------  ---------- -----  ----

                11934                    1


评论

共有 条评论