资源简介
用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
- 上一篇:特洛伊木马(C/C++)
- 下一篇:WebBench(c++版本)
相关资源
- 使用OpenGL编写的三维曲线和曲面,V
- openGL四面体、立方体、正N棱柱、齿轮
- 用OpenGL开发的机械臂运动仿真程序
- OPENGL 星空 背景 图像
- mfc+opengl离散点绘制曲面
- 使用opengl的图形学大作业
- 机器人手臂
- OPENGL阴影
- 场景渲染 蓝天 白云模拟程序二
- OpenGL窗口背景绘制
- MFC的对话框中使用OpenGL绘图
- openGL 小汽车
- 基于MFC的华容道小程序.zip
- 画线算法C++的实现-鼠标交互
- 基于MFC OpenGL读取obj文件并以双视图显
- opengl绘制花瓶源码基于glut库
- 七控制点B样条曲线
- 通过MFC和OpenGL实现点云数据的提取和
- Visual C++ 6.0高级编程技术-OpenGL篇 源代
- OpenGL+MFC+点云
- MFC下配置opengl环境具体步骤
- 一个用opengl实现的带有光照和材质效
- opengl实现双三次Bezier曲面
- VC++和OpenGL实现八叉树分割
- OpenGL3D模型场景漫游
- 用Opengl实现日地月模型
- OpenGL+MFC显示三维点云中每一个点的法
- 用openglMFC实现的魔方
- 计算机图形学,实现茶壶旋转,颜色
- opengl的菜单操作
评论
共有 条评论