opengl实现推箱子游戏(13页).doc
《opengl实现推箱子游戏(13页).doc》由会员分享,可在线阅读,更多相关《opengl实现推箱子游戏(13页).doc(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-opengl实现推箱子游戏-第 13 页共分为4个.h文件和5个.cpp文件1、 map.h,map.cpp2、 texture.h,texture.cpp3、 textview.h,textview.cpp#include #include #include #include #include #include #include #include #include #pragma comment(linker,/subsystem:Windows /entry:mainCRTStartup)Texture texture; / 文理加载类Map map; / 地图加载类KeyListene
2、r keylistener; /键盘监听事件类TextView textview;int* image;int *mp;int window; /窗口int is_pass = 0; / 是否过关标志int *pass = &is_pass;int level = 1; / 关卡int *lv = &level;int pre_lv = 1;/颜色的RGB值int black3 = 0 , 0 , 0;int white3 = 255 , 255 , 255;int orange3 = 255, 128, 0;/窗口大小变化时调用的函数 void ChangeSize(GLsizei w, G
3、Lsizei h) if(h = 0) h = 1; glViewport(0, 0, w, h); /定义视口大小,宽高一致 int width = 550; int height = 550; glMatrixMode(GL_PROJECTION); /重置坐标系统,使投影变换复位 glLoadIdentity(); /将当前的用户坐标系的原点移到了屏幕中心 GLfloat aspect; if(w h)aspect = (GLfloat) w / h; glOrtho(0, width * aspect, 0, height, 0, width); void display_text()
4、glColor3ub(orange0,orange1,orange2);glRasterPos2i(250, 570); /起始位置 (推箱子); /输出的字符串 glRasterPos2i(400, 570); char c10 = 第;char d5 ;sprintf(d, %d关, level);strcat(c, d); (c); glRasterPos2i(120, 80); (1、ESC键退出游戏); glRasterPos2i(120, 60); (2、BackSpace后退); glRasterPos2i(120, 40); (3、PageUp、PageDown切换关卡); g
5、lRasterPos2i(120, 20); (4、键盘上、下、左、右键控制方向); /画长方形void draw_rect(int leftX, int leftY)glBegin(GL_POLYGON); glColor3ub(black0,black1,black2); glVertex2d(leftX,leftY); /左下角 glVertex2d(leftX+100,leftY); /右下角 glVertex2d(leftX+100,leftY+100); /右上角 glVertex2d(leftX,leftY+100); /左上角 glEnd();/结束画线void drawmap
6、()glColor3ub(white0,white1,white2); /清理颜色,为黑色,(也可认为是背景颜色) glEnable(GL_TEXTURE_2D); for (int i = 50; i 500; i += 30)for (int j = 100; j 550; j += 30)int y = (i - 50) / 30;int x =14 - (j - 100) / 30;int pos = mpxy;if(pos = 6)(x, y);texture(imagepos, i, j);display_text();if(pre_lv != level)pre_lv = lev
7、el;draw_rect(400, 570);/glutSwapBuffers();glFlush();if(is_pass)MessageBox(NULL, 恭喜过关, 提示, 0);is_pass = 0;level +;map(level);(); / 保留原地图void load_map_and_picture()mp = new int*15;for(int i = 0; i 15; i+)mpi = new int15;for(int j = 0; j 15; j+)mpij = 0;image = new int10;for(int i = 0; i 10; i+)imagei
8、= 0;/ 加载地图(mp);map(level); /键盘相应事件map(mp);level(lv);window(window);flag(pass);/加载图片image(image);texture();int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(550, 600); /设置窗口大小glutInitWindowPosition(100, 100); / 设置初始窗口的位置window = glutCre
9、ateWindow(推箱子);glutDisplayFunc(&drawmap);load_map_and_picture();glutIdleFunc(&drawmap); / 对键盘事件的响应glutSpecialFunc(); glutKeyboardFunc();/参数为一个函数,当窗口大小改变时会被调用 glutReshapeFunc(ChangeSize);glutMainLoop();2、keylistener.h#include #include #include #include class KeyListenerpublic:KeyListener();KeyListene
10、r();static void SpecialKeys(GLint key, GLint x, GLint y);/键盘的上下左右键static void keyPressed(unsigned char key, int x, int y);/键盘响应事件static void get_man_location(int x, int y);static void get_window(int wnd);static void get_map(int *map);static void move(int dir); /移动一步static bool is_pass(); /判断是否过关stat
11、ic void get_pass_flag(int *ispass);static void get_level(int *lv);static void stay_origin_map();static int window;static int dir_x4 ;static int dir_y4 ;static int direction; /当前方向static int manX, manY; /人所处的位置 static int *mp;static int map1515;static int* level;static int* pass;#include #include #in
12、clude #include #include #define ESCAPE 27#define BACKSPACE 8#define UP 0#define DOWN 1#define LEFT 2#define RIGHT 3int KeyListener:window = 0;/上下左右int KeyListener:dir_x4 = -1, 1, 0, 0;int KeyListener:dir_y4 = 0, 0, -1, 1;int KeyListener:direction = 1; /当前方向int KeyListener:manX = 0;int KeyListener:ma
13、nY = 0;int *KeyListener:mp = NULL;int KeyListener:map1515 = 0;int *KeyListener:level = NULL;int *KeyListener:pass = NULL;Map MAP;std:stack s;KeyListener:KeyListener()KeyListener:KeyListener()void KeyListener:keyPressed(unsigned char key, int x, int y)switch(key)case : break;case ESCAPE:glutDestroyWi
14、ndow(window); exit(0); break;case BACKSPACE: /后退一步if() = 1 )break;int cur_dir = (); (); /当前坐标的方向/当前坐标int mx = (); ();int my = (); ();int cur_picture = (); (); /当前坐标cur_dir方向的图片int next_picture = (); (); /前一个坐标以前图片int pre_dir = ();int dx = dir_xcur_dir;int dy = dir_ycur_dir;mpmxmy = cur_picture;mpmx
15、+ dxmy + dy = next_picture;mpmx - dxmy - dy = pre_dir + 5;manX = mx - dx;manY = my - dy;break;default:break;/键盘的上下左右键void KeyListener:SpecialKeys(GLint key, GLint x, GLint y) switch(key)case GLUT_KEY_UP: /向上移动direction = UP;move(direction);break;case GLUT_KEY_DOWN: /向下移动direction = DOWN;move(directi
16、on);break;case GLUT_KEY_LEFT: /向左移动direction = LEFT;move(direction);break;case GLUT_KEY_RIGHT: /向右移动direction = RIGHT;move(direction);break;case GLUT_KEY_PAGE_UP: /下一关(*level) +;if(*level) 13)(*level) -;break;/ 加载地图(mp);map(*level); stay_origin_map();break;case GLUT_KEY_PAGE_DOWN: /上一关(*level) -;if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- opengl 实现 箱子 游戏 13
限制150内