1.随机生成一张地图,黑方块为禁区,白方块为活动区

2.随机在活动区找两个块,红方块为起点,蓝方块为终点。

3.生成该地图。

4.上CODE.

//alex.shoal@gmail.com
//latest update:2012-06-19
//sourse code location:..\CB_CODE\GL_TREE
#include <windows.h>
#include <time.h>
#include <gl/gl.h>
#define N 50
#define WIDTH 800
#define UNIT 2.0f/N
int MAP[N][N];
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
void DisableOpenGL(HWND, HDC, HGLRC);
void draw_rectfill()
{glColor4f(0.0, 0.0, 0.0, 0.5);// 绘制矩形glRectf(-0.2, -0.2, 0.2, 0.2);glEnd();}void init_field()
{for (int i=0; i<N; i++)for (int j=0; j<N; j++)MAP[i][j]=0;
}
void set_block()
{srand(time(NULL));for(int i=0; i<800; i++){int x=rand()%N;int y=rand()%N;MAP[x][y]=1;}}void set_positon()
{int num=0;srand(time(NULL));while (num<2){int i=rand()%N;int j=rand()%N;if(MAP[i][j]==0){MAP[i][j]=2+num++; // MAP[][]==2,MEANS THIS IS A START POSITION.}}}
void draw_PickPOS()
{glColor4f(0.0, 0.0, 0.0, 0.5);// 绘制矩形for(int i=0; i<N; i++)for (int j=0; j<N; j++){if(MAP[i][j]==2){   glColor4f(1.0, 0.0, 0.0, 0.5);// 绘制矩形GLfloat x1=i*UNIT-1.0f;GLfloat y1=j*UNIT-1.0f;GLfloat x2=x1+UNIT;GLfloat y2=y1+UNIT;glRectf(x1, y1, x2, y2);}else if(MAP[i][j]==3){glColor4f(0.0, 0.0, 1.0, 0.5);// 绘制矩形}GLfloat x1=i*UNIT-1.0f;GLfloat y1=j*UNIT-1.0f;GLfloat x2=x1+UNIT;GLfloat y2=y1+UNIT;glRectf(x1, y1, x2, y2);}}glEnd();
}
void draw_grid()
{glColor3f(0.0, 0.0, 0.0);// 绘制矩形glBegin(GL_LINES);  //mode为GL_LINE_LOOPfor (int i=0; i<N; i++){GLfloat x=i*UNIT-1.0f;glVertex2f(x, -1.0f);glVertex2f(x,1.0f);}for (int j=0; j<N; j++){GLfloat y= j*UNIT-1.0f;glVertex2f(-1.0f, y);glVertex2f(1.0f,y);}glEnd();}
void draw_block()
{glColor4f(0.0, 0.0, 0.0, 0.5);// 绘制矩形for(int i=0; i<N; i++)for (int j=0; j<N; j++){if(MAP[i][j]==1){GLfloat x1=i*UNIT-1.0f;GLfloat y1=j*UNIT-1.0f;GLfloat x2=x1+UNIT;GLfloat y2=y1+UNIT;glRectf(x1, y1, x2, y2);}}glEnd();
}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{WNDCLASSEX wcex;HWND hwnd;HDC hDC;HGLRC hRC;MSG msg;BOOL bQuit = FALSE;/* register window class */wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_OWNDC;wcex.lpfnWndProc = WindowProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);wcex.lpszMenuName = NULL;wcex.lpszClassName = "GLSample";wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;if (!RegisterClassEx(&wcex))return 0;/* create main window */hwnd = CreateWindowEx(0,"GLSample","OpenGL Sample",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WIDTH,WIDTH,NULL,NULL,hInstance,NULL);ShowWindow(hwnd, nCmdShow);/* enable OpenGL for the window */EnableOpenGL(hwnd, &hDC, &hRC);set_block();set_positon();/* program main loop */while (!bQuit){/* check for messages */if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){/* handle or dispatch messages */if (msg.message == WM_QUIT){bQuit = TRUE;}else{TranslateMessage(&msg);DispatchMessage(&msg);}}else{/* OpenGL animation code goes here */glClearColor(1.0f, 1.0f, 1.0f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);GLfloat curSizeLine=1;glLineWidth(curSizeLine);glPushMatrix();//glRotatef(theta, 0.0f, 0.0f, 1.0f);draw_grid();draw_block();draw_PickPOS();glPopMatrix();SwapBuffers(hDC);// theta += 1.0f;Sleep (1);}}/* shutdown OpenGL */DisableOpenGL(hwnd, hDC, hRC);/* destroy the window explicitly */DestroyWindow(hwnd);return msg.wParam;
}LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg){case WM_CLOSE:PostQuitMessage(0);break;case WM_DESTROY:return 0;case WM_KEYDOWN:{switch (wParam){case VK_ESCAPE:PostQuitMessage(0);break;}}break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
{PIXELFORMATDESCRIPTOR pfd;int iFormat;/* get the device context (DC) */*hDC = GetDC(hwnd);/* set the pixel format for the DC */ZeroMemory(&pfd, sizeof(pfd));pfd.nSize = sizeof(pfd);pfd.nVersion = 1;pfd.dwFlags = PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;pfd.iPixelType = PFD_TYPE_RGBA;pfd.cColorBits = 24;pfd.cDepthBits = 16;pfd.iLayerType = PFD_MAIN_PLANE;iFormat = ChoosePixelFormat(*hDC, &pfd);SetPixelFormat(*hDC, iFormat, &pfd);/* create and enable the render context (RC) */*hRC = wglCreateContext(*hDC);wglMakeCurrent(*hDC, *hRC);
}void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
{wglMakeCurrent(NULL, NULL);wglDeleteContext(hRC);ReleaseDC(hwnd, hDC);
}

5.结果
结果1.


结果2


6.寻找从红方块至蓝方块的最佳路径(先到这吧,有空再说)
												

OpenGL制作简易地图(一)相关推荐

  1. OpenGL制作简易地图(二)

    1.设置一个活动的block,从红方块出发,随机寻找兰方块,直到找到位置才停止. 2. 部分代码 #include "tree.h" #include "global.h ...

  2. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  3. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第5章,第5.5节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  4. 利用Unity3D制作简易2D计算器

    利用Unity3D制作简易2D计算器 标签(空格分隔): uiniy3D 1. 操作流程 在unity3DD中创建一个新项目 注意选择是2D的(因为默认3D) 在Assets框右键新建C#脚本 在新建 ...

  5. html range关联文本框,HTML5gt;meter标签与input(type=range)标签结合制作简易范围指示器...

    HTML5>meter标签与input(type=range)标签结合制作简易范围指示器 发布时间:2020-03-26 15:41 很多时候我们能看到这样的表示范围的优化工具,能给人带来很好的 ...

  6. 导数,微积分,牛顿运动学制作创意地图

    导数,微积分,牛顿运动学制作创意地图 转载于:https://www.cnblogs.com/liuys635/p/11180988.html

  7. 中高德地图只显示某一城市_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!...

    在数据可视化中,地图可视化是高频应用的一种.我们在一些新闻报道和商业杂志上,会经常看到运用地图来分析展示商业现象,这样的利用地图来反映和分析数据的形式叫数据地图. 数据地图可以最直观的表达出数据之间的 ...

  8. SwiftUI优秀文章经典案例制作简易的新闻列表Demo

    SwiftUI制作简易的新闻列表Demo import SwiftUIstruct HomeView: View {@StateObject var newsViewModelVM = NewsVie ...

  9. python作中国地图背景气泡图_exce表格中怎么制作中国地图背景数据气泡图

    exce表格中怎么制作中国地图背景数据气泡图 exce表格中怎么制作中国地图背景数据气泡图?excel表格中想要在中国地图上显示气泡来看看地区分布情况,该怎么设置中国地图气泡图表呢?下面我们就来看看详 ...

  10. python注册系统_Python制作简易注册登录系统

    Python制作简易注册登录系统 这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python 是一种面向对象.解释型计算机程 ...

最新文章

  1. qt练习7 定时爆炸小游戏
  2. mean,std,var
  3. mysql 回滚段 表空间_oracle回滚段和回滚表空间
  4. 团队作业6-项目总结
  5. A value-added tax (VAT) IN UK
  6. 汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)
  7. Key_handle的学习
  8. 安装 jupyter notebook
  9. iOS 应用状态详解
  10. UE4官方文档UI学习:1.UMG UI设计器快速入门
  11. 互联网运营和传统运营,到底有什么区别
  12. [技术讨论]关于前几天发布的京东bug上的问题分析
  13. 常用Dos命令及打开方式
  14. 经典论文-SqueezeNet论文及实践
  15. MySQL 日志管理、备份与恢复
  16. Win10无法访问共享文件,错误代码0x80004005
  17. android 系统安装教程视频,PC也能用安卓 X86系统装安卓视频教程
  18. TJUPT 无法与服务器建立连接问题的解决方法
  19. linux下内存如何释放,如何释放linux的内存
  20. latex 标题chapter section里的英文和数字不加粗

热门文章

  1. 学生用计算机方着怎么计,科学计算器使用
  2. Windows 7版本IE10浏览器11月中旬推出
  3. JavaWeb - 国家语言代码表
  4. 下载哔哩哔哩代码php,哔哩哔哩电脑客户端 v1.4.4 官方最新版
  5. 信度spss怎么做_怎么用spss处理信度和效度?
  6. 脑肿瘤分割论文打卡2:E1D3 U-Net for Brain Tumor Segmentation
  7. 一文带你读懂 Java Agent 内存马
  8. 惠普台式计算机怎么拆外壳,hp台式电脑cpu风扇怎么拆图解
  9. 小程序image组件自适应宽高比
  10. oracle lookup函数,LOOKUP函数用法全解(上)——LOOKUP函数的5种用法