資源簡介
用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++版本)
評論
共有 條評論