#include <windows.h> /* Windows的頭文件 */ #include <gl/gl.h> /* OpenGL32庫的頭文件 */ #include <gl/glu.h> /* GLu32庫的頭文件 */ /* #include <gl/glaux.h> // GLaux庫的頭文件 */ #include <gl/glut.h> /* Glut庫頭文件 */ #include <time.h> #include <iostream> using namespace std; int aa[20][20]; int xx = 0; int yy = 0; int screenWidth = 640; int screenHeight = 480; int cc = 0; /* 全局變量 */ int winWidth( 500 ), winHeight( 500 ); #define MAX_CHAR 128 void Initialization() { glClearColor( 1.0f, 1.0f, 1.0f, 1.0f ); /* 設(shè)置背景色為白色 */ } void OnReshape( int w, int h ) { winWidth = w; winHeight = h; glViewport( 0, 0, w, h ); /* 設(shè)置視區(qū)大小 */ glMatrixMode( GL_PROJECTION ); /* 投影模式 */ glLoadIdentity(); /* 載入單位矩陣以初始化當(dāng)前矩陣 */ gluOrtho2D( 0, w, 0, h ); /* 將當(dāng)前繪圖區(qū)域設(shè)置為二維正交投影 */ glMatrixMode( GL_MODELVIEW ); /* 模型視圖模式 */ glLoadIdentity(); /* 初始化當(dāng)前矩陣 */ } void drawString( const char* str ) /* 屏幕顯示字體 */ { static int isFirstCall = 1; static GLuint lists; if ( isFirstCall ) { isFirstCall = 0; /* 申請MAX_CHAR個連續(xù)的顯示列表編號 */ lists = glGenLists( MAX_CHAR ); /* 把每個字符的繪制命令都裝到對應(yīng)的顯示列表中 */ wglUseFontBitmaps( wglGetCurrentDC(), 0, MAX_CHAR, lists ); } /* 調(diào)用每個字符對應(yīng)的顯示列表,繪制每個字符 */ for (; *str != '\0'; ++str ) { glCallList( lists + *str ); } } void OnDisplay() { glClear( GL_COLOR_BUFFER_BIT ); glColor3f( 0.0f, 0.0f, 0.0f ); /* 設(shè)置字體顏色 */ glRasterPos2i( 0, winHeight - 15 ); /* 起始位置 */ drawString( " Hello,OpenGL." ); /* 輸出的字符串 */ glutSwapBuffers(); /* 交換前后緩存區(qū) */ } void myInit() { glClearColor( 1.0, 1.0, 1.0, 0.0 ); /* 設(shè)置背景顏色為亮白 */ glColor3f( 0.0f, 0.0f, 0.0f ); /* 設(shè)置繪圖顏色為黑色 */ glPointSize( 4.0 ); /* 設(shè)置點的大小為4*4像素 */ glMatrixMode( GL_PROJECTION ); /* 設(shè)置合適的矩陣 */ glLoadIdentity(); gluOrtho2D( 0.0, screenWidth, 0.0, screenHeight ); } void myMouse2( int button, int state, int x, int y ) { if ( state == GLUT_DOWN ) { if ( button == GLUT_RIGHT_BUTTON ) { glClearColor( 1.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT ); glFlush(); } } return; } void drawDot( int x, int y ) { xx = (x - 30) / 20; yy = y / 20; glBegin( GL_POINTS ); glVertex2i( x, y ); /* 畫一些點 */ if ( 30 < x && x < 430 && 0 < y && y < 400 ) cc++; /* aa[yy][xx] == 0; 思路1 */ cout << cc << endl; if ( cc >= 4 ) { glVertex2i( 450, 450 ); /* 思路3 */ myMouse2( GLUT_RIGHT_BUTTON, GLUT_DOWN, 300, 400 ); } glEnd(); } void myMouse( int button, int state, int x, int y ) { if ( state == GLUT_DOWN ) { if ( button == GLUT_LEFT_BUTTON ) { drawDot( x, screenHeight - y ); glFlush(); }else if ( button == GLUT_RIGHT_BUTTON ) { glClearColor( 1.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT ); glFlush(); } } return; } void myDisplay() { glClear( GL_COLOR_BUFFER_BIT ); /* 清屏 */ glBegin( GL_POINTS ); /* 畫一些點 */ for ( int i = 0; i < 20; i++ ) { for ( int j = 0; j < 20; j++ ) { if ( aa[i][j] == 1 ) glVertex2i( i * 20 + 33, j * 20 + 5 ); } } glEnd(); GLfloat curSizeLine = 2; glLineWidth( curSizeLine ); glBegin( GL_LINES ); for ( int i = 0; i <= 400; ) { glVertex3f( 30, 0.0 + i, 0.0f ); glVertex3f( 430, 0.0 + i, 0.0f ); glVertex3f( 30.0 + i, 0, 0.0f ); glVertex3f( 30.0 + i, 400, 0.0f ); i += 20; } glEnd(); glFlush(); /* 送所有輸出到顯示設(shè)備 */ } void funrand() { int s = 4; int x = 0; int y = 0; srand( time( 0 ) ); while ( s-- ) { x = rand() % 20; y = rand() % 20; aa[x][y] = 1; } } int check() { for ( int i = 0; i < 20; i++ ) { for ( int j = 0; j < 20; j++ ) { if ( aa[i][j] == 1 ) return(1); } } return(0); } void main( int argc, char **argv ) { funrand(); glutInit( &argc, argv ); /* 初始化工具包 */ glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); /* 設(shè)置顯示模式 */ glutInitWindowSize( 640, 480 ); /* 設(shè)置窗口大小 */ glutInitWindowPosition( 100, 150 ); /* 設(shè)置窗口在屏幕上的位置 */ glutCreateWindow( "大家來找茬,找找點" ); /* 打開屏幕窗口 //注冊回調(diào)函數(shù) */ Initialization(); glutDisplayFunc( myDisplay ); glutMouseFunc( myMouse ); myInit(); glutReshapeFunc( OnReshape ); /* 重繪函數(shù) 打印提示信息好難 */ glutMainLoop(); /* 進入循環(huán) */ } /**************** * * 實現(xiàn)鼠標(biāo)監(jiān)聽 * 運行效果為面板上加點 **BUG1 打點越界 *有的點能返回1 有的點確不能 **模糊判斷 ****************/
本文名稱:opengl第一個小游戲
標(biāo)題鏈接:http://jinyejixie.com/article34/gdpgse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信公眾號、企業(yè)網(wǎng)站制作、虛擬主機、App開發(fā)、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)