资源简介
用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++版本)
相关资源
- 安卓c语言开发SDL2+opengles
- 交互式计算机图形学 第六版 OpenGL源代
- VC++基于OpenGL模拟的一个3维空间模型
- opengl绘制汽车.cpp
- opengl实现水流效果sph
- opengl源代码,全是精华!
- OpenGL迷宫山东大学图形学实验三
- opengl的立方体消隐算法
- vc++ opengl代码爆炸
- 我见过最漂亮的CS仿真程序openGL和C+
- 广东某工业大学的openGL课程设计
- 使用OpenGL实现多个小球在密闭空间内
- 利用openGL和C++实现光线跟踪绘图的完
- OpenGl C++太阳系小行星运行系统 可切换
- vc++和OpenGL实现三维地形实时动态显示
- C++实现利用OpenGL实现三维绘图
- 太阳、地球、月亮之间的运动图Open
- MFC 单文档 实现opengl 三维旋转 缩放
- OPENGL的烟花程序(代码)
- MFC+OpenGL三维建模与动画显示
- 基于opengl粒子系统实现喷泉的模拟
- 一个基于openGL的太阳系模型,太阳地
- vc6.0+opengl纯色五角星填充
- vc6.0+opengl动态绘制五角星
- NeHe_OpenGL教程完整版 里面有地址可以
- OpenGL简单——实现立方体贴上不同纹
- MFC实现dem的读取与现实
- VC++ OpenGL三维地形漫游
- OpenGL实现三维地形实时动态显示
- VC++中Opengl实现建筑物虚拟漫游
评论
共有 条评论