易语言3D迷宫源代码
1..版本 2
.程序集 启动窗口窗口程序集
.程序集变量 窗口, 窗口
.程序集变量 关于信息, 文本型
.子程序 __启动窗口_创建完毕
图片框_背景.移动 (0, 0, _启动窗口.取用户区宽度 (), _启动窗口.取用户区高度 ())
.子程序 读取进度
连续赋值 (真, 图片框_进度条.可视, 图形按钮_开始游戏.禁止, 图形按钮_退出游戏.禁止, 图片框_进度条.播放动画)
时钟_显示进度条.时钟周期 = 1500
变量初始化 ()
.子程序 _时钟_显示进度条_周期事件
连续赋值 (假, 图片框_进度条.可视, 图形按钮_开始游戏.禁止, 图形按钮_退出游戏.禁止, 图片框_进度条.播放动画)
时钟_显示进度条.时钟周期 = 0
载入 (窗口, _启动窗口, 真)
.子程序 _图形按钮_开始游戏_被单击
窗口 = 窗口_游戏画面
读取进度 ()
.子程序 _图形按钮_退出游戏_被单击
销毁 ()
.子程序 _按钮1_被单击
_图形按钮_开始游戏_被单击 ()
2.
.版本 2
.支持库 OPenGL
.程序集 框架程序集
.程序集变量 着色描述表号, 整数型
.程序集变量 设备句柄, 整数型, , , OPenGL组件的设备句柄
.程序集变量 全屏显示, 逻辑型
.程序集变量 光源开关, 逻辑型
.程序集变量 雾开关, 逻辑型
.程序集变量 地图开关, 逻辑型
.程序集变量 玩家, 观察者
.程序集变量 键盘状态, 逻辑型, , "256"
.程序集变量 地图中心, 双精度小数型, , "2"
.程序集变量 迷宫, 字节型, , "0"
.程序集变量 鼠标超出, 整数型, , "2"
.程序集变量 鼠标位置, 整数型, , "2"
.程序集变量 鼠标移动响应速度, 整数型, , , 移动的快慢
.程序集变量 计算中, 逻辑型
.子程序 建立OPenGL组件, , , 建立可供显示OPenGL的设备场景,不使用的时候必须撤消
.参数 窗口句柄
.局部变量 像素格式, 像素格式
.局部变量 像素格式号, 整数型
设备句柄 = 取任意设备句柄 (窗口句柄)
像素格式.大小 = 40
像素格式.版本 = 1
像素格式.标志 = 位或 (#GL_画入窗口的像素格式, #GL_双缓存像素格式, #GL_支持OPENGL像素格式)
像素格式.色彩深度 = 24
像素格式.cDepthBits = 32
像素格式号 = 选择像素格式 (设备句柄, 像素格式)
置像素格式 (设备句柄, 像素格式号, 像素格式)
着色描述表号 = 创建着色描述表 (设备句柄)
置当前着色描述表 (设备句柄, 着色描述表号)
框架初始化 ()
.子程序 撤消OPenGL组件, , , 撤消已经建立的OPenGL设备场景
.参数 窗口句柄
.局部变量 循环变量, 整数型
循环变量 = 1
.判断循环首 (是否存在列表 (循环变量))
删除列表列 (循环变量, 1)
循环变量 = 循环变量 + 1
.判断循环尾 ()
' 删除所有已经创建的显示列表
置当前着色描述表 (设备句柄, 0)
删除着色描述表 (着色描述表号)
释放设备句柄 (窗口句柄, 设备句柄)
.子程序 框架初始化, , , 所有的OpenGL初始化都在这里
清除颜色缓存 (0, 0, 0, 0)' 在这里修改你的背景颜色
设置明暗模式 (#GL_平坦)
清除深度缓存 (1)
启用功能 (#GL_深度测试)
深度测试 (#GL_小于)
设置画面质量 (#GL_透视修正质量, #GL_最佳)
' ==========显示==========
坐标缩放 (0.1, 0.1, 0.1)
' ==========资源==========
创建纹理 ()
' ==========实体数据==========
' 设置材质 (#正面, #漫反射光, { 1, 1, 1, 1 })' xz
' 设置材质 (#正面, #镜面光, { 1, 1, 1, 1 })' xz
定义光源 ({ 0.7, 0.7, 0.7, 1 }, { 0.9, 0.8, 0.4, 1 }, { 0, #眼高, 0, 0 }, #GL_一号光源)' xz
设置光照模式 (#GL_双面光模式, 1)' xz
定义光源 ({ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 0, #眼高, 0, 0 }, #GL_二号光源)
定义雾 (#GL_线性, { 0.4, 0.4, 0.4, 1 }, 0.005, 1, 2)
创建地板列表 ()
画天空盒 (2, 1, 2)
画门 ()
定义迷宫数据 (#地板长, #地板宽, 迷宫)
创建墙壁列表 (迷宫)
画地图 (迷宫, 3, 地图中心 , 地图中心 )
画准星 (0.002)
画游戏标题文字 (0.02, 0.01)
画指南针 (0.01)
画箭头 (0.5, -0.5, #地板长 - 0.5, 0.5 - #地板长, #墙壁高 × 3, 0.1, 0.05)
.子程序 绘图, , , 修改
清除缓存 (位或 (#GL_颜色缓存位, #GL_深度缓存位))
矩阵复位 ()
.如果真 (取反 (光源开关))
停用功能 (#GL_一号光源)
.如果真结束
停用功能 (#GL_光照)
停用功能 (#GL_二维纹理)
调用列表 (#准星列表号)
.如果真 (地图开关)
矩阵入栈 ()
坐标平移 (地图中心 , 地图中心 , #最近距离 × -1)
调用列表 (#地图列表号)
显示位置 (玩家.位置.x, -玩家.位置.z, 地图中心 , 地图中心 )
矩阵出栈 ()
.如果真结束
坐标旋转 (玩家.绕x, 1, 0, 0)
坐标旋转 (玩家.绕y, 0, 1, 0)
坐标平移 (-玩家.位置.x, -玩家.位置.y - 玩家.移动跳跃频率 × 求正弦 (玩家.移动跳跃相位), -玩家.位置.z)
调用列表 (#箭头列表号)
设置材质 (#GL_正面, #GL_环境光, { 0.7, 0.7, 0.7, 1 })
.如果真 (光源开关)
启用功能 (#GL_一号光源)
.如果真结束
.如果真 (雾开关)
启用功能 (#GL_雾)
.如果真结束
启用功能 (#GL_光照)
启用功能 (#GL_二维纹理)
调用列表 (#门列表号)
' 调用列表 (#天空列表号)' xz
调用列表 (#地板列表号)
调用列表 (#墙壁列表号)
调用列表 (#准星列表号)
停用功能 (#GL_一号光源)
停用功能 (#GL_雾)
启用功能 (#GL_二号光源)
调用列表 (#天空列表号)' xz
设置材质 (#GL_正面, #GL_环境光, { 1, 1, 1, 1 })
矩阵入栈 ()
矩阵复位 ()
坐标平移 (-0.04, 0.03, #最近距离 × -1)
调用列表 (#文字列表号)
坐标平移 (0.02, 0, 0)
坐标旋转 (玩家.绕y, 0, 0, 1)
调用列表 (#指南针列表号)
矩阵出栈 ()
停用功能 (#GL_二号光源)
交换缓存 (设备句柄)
.子程序 尺寸被改变, , , 修改可视范围
.参数 左边
.参数 底边
.参数 宽度
.参数 高度
设置视口 (左边, 底边, 宽度, 高度)
选择矩阵模式 (#GL_投影矩阵)
矩阵复位 ()
创建对称透视投影 (45, 宽度 ÷ 高度, 0.1, 100)
选择矩阵模式 (#GL_观察矩阵)
矩阵复位 ()
.子程序 变量初始化
置随机数种子 ()
' ==========显示变量==========
全屏显示 = 真
光源开关 = 真
地图开关 = 假
' ==========操作变量==========
玩家.位置.x = 0.5
玩家.位置.y = #眼高
玩家.位置.z = -0.5
玩家.移动速度 = 0.1
玩家.绕x = 0
玩家.绕y = 0
玩家.移动跳跃频率 = 0.005
玩家.移动跳跃相位 = 0
玩家.频率叠加值 = 1
地图中心 = 0
地图中心 = 0
' ==========记录鼠标==========
鼠标超出 = { 0, 0 }
鼠标移动响应速度 = 10
.子程序 键盘操作, , , 记录键盘的状态
.参数 键代码, 整数型
.参数 功能键状态, 整数型
.参数 键状态, 逻辑型
.局部变量 临时, 双精度小数型, , "2"
.判断开始 (键代码 = 27 且 键状态)' Esc键
窗口_游戏画面.销毁 ()
.判断 (键代码 = 113 且 键状态 = 假)' 全屏
全屏显示 = 取反 (全屏显示)
输出调试文本 (“全屏显示:” + 到文本 (全屏显示))
.如果 (全屏显示)
窗口_游戏画面.移动 (0, 0, 取屏幕宽度 (), 取屏幕高度 ())
.否则
窗口_游戏画面.移动 (0, 0, 800, 600)
.如果结束
窗口_游戏画面.位置 = 1
.判断 (键代码 = 87)' 向前移动
键盘状态 = 键状态
.判断 (键代码 = 83)' 向后移动
键盘状态 = 键状态
.判断 (键代码 = 65)' 向左移动
键盘状态 = 键状态
.判断 (键代码 = 68)' 向右移动
键盘状态 = 键状态
.判断 (键代码 = 76 且 键状态)' 光开关
光源开关 = 取反 (光源开关)
输出调试文本 (“光源开关:” + 到文本 (光源开关))
绘图 ()
.判断 (键代码 = 37 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 > -0.03)
地图中心 = 地图中心 - 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 39 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 < 0.03)
地图中心 = 地图中心 + 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 40 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 > -0.02)
地图中心 = 地图中心 - 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 38 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 < 0.02)
地图中心 = 地图中心 + 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 70 且 键状态)' 雾开关
雾开关 = 取反 (雾开关)
绘图 ()
.判断 (键代码 = 77 且 键状态)
地图开关 = 取反 (地图开关)
输出调试文本 (“地图开关:” + 到文本 (地图开关))
.判断 (键代码 = 32 且 键状态 = 假)
.如果真 (取整 (玩家.位置.x) = #地板长 - 1 且 取整 (取绝对值 (玩家.位置.z)) = #地板宽 - 1)' 走到出口
临时 = 取绝对值 (玩家.绕y) % 360
.如果真 (临时 < 20 或 临时 > 340)
' 在此处添加通关事件的处理代码
信息框 (“已经通关啦!”, 0, “恭喜!”)
窗口_游戏画面.销毁 ()
.如果真结束
.如果真结束
.默认
.判断结束
.子程序 鼠标操作, , , 记录鼠标的状态
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
鼠标位置 = 横向位置
鼠标位置 = 纵向位置
.子程序 可否继续移动, 逻辑型, , 防止超出可移动范围的界限
.参数 横, 双精度小数型
.参数 纵, 双精度小数型
.局部变量 横整, 整数型
.局部变量 纵整, 整数型
.局部变量 横临时, 小数型
.局部变量 纵临时, 小数型
' 是否在地图边界内
横整 = 取整 (横) + 1
纵整 = 取整 (纵) + 1
横临时 = 横整 - 横
纵临时 = 纵整 - 纵
.判断开始 (横 ≤ #碰撞距离)
返回 (假)
.判断 (横 ≥ #地板宽 - #碰撞距离)
返回 (假)
.判断 (纵 ≤ #碰撞距离)
返回 (假)
.判断 (纵 ≥ #地板长 - #碰撞距离)
返回 (假)
.判断 (横临时 ≤ #碰撞距离 且 纵临时 ≤ #碰撞距离)' 左下角
返回 (假)
.判断 (1 - 横临时 ≤ #碰撞距离 且 纵临时 ≤ #碰撞距离)' 右下角
返回 (假)
.判断 (1 - 横临时 ≤ #碰撞距离 且 1 - 纵临时 ≤ #碰撞距离)' 右上角
返回 (假)
.判断 (横临时 ≤ #碰撞距离 且 1 - 纵临时 ≤ #碰撞距离)' 左上角
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 1 - 横临时 ≤ #碰撞距离)' 左
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 横临时 ≤ #碰撞距离)' 右
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 1 - 纵临时 ≤ #碰撞距离)' 下
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 纵临时 ≤ #碰撞距离)' 上
返回 (假)
.默认
.判断结束
返回 (真)
.子程序 计算视点, , , 判断玩家的当前位置,也可以增加游戏过程的触发事件
.局部变量 临时, 双精度小数型, , "2"
.局部变量 显示中心, 双精度小数型, , "2"
.局部变量 频率叠加, 逻辑型
.如果真 (计算中 = 假)
计算中 = 真
显示中心 = 窗口_游戏画面.宽度 ÷ 2
显示中心 = 窗口_游戏画面.高度 ÷ 2
.如果真 (取绝对值 (鼠标位置 - 显示中心 ) > 0)
玩家.绕x = (鼠标位置 - 显示中心 ) ÷
2..版本 2
.支持库 OPenGL
.程序集 框架程序集
.程序集变量 着色描述表号, 整数型
.程序集变量 设备句柄, 整数型, , , OPenGL组件的设备句柄
.程序集变量 全屏显示, 逻辑型
.程序集变量 光源开关, 逻辑型
.程序集变量 雾开关, 逻辑型
.程序集变量 地图开关, 逻辑型
.程序集变量 玩家, 观察者
.程序集变量 键盘状态, 逻辑型, , "256"
.程序集变量 地图中心, 双精度小数型, , "2"
.程序集变量 迷宫, 字节型, , "0"
.程序集变量 鼠标超出, 整数型, , "2"
.程序集变量 鼠标位置, 整数型, , "2"
.程序集变量 鼠标移动响应速度, 整数型, , , 移动的快慢
.程序集变量 计算中, 逻辑型
.子程序 建立OPenGL组件, , , 建立可供显示OPenGL的设备场景,不使用的时候必须撤消
.参数 窗口句柄
.局部变量 像素格式, 像素格式
.局部变量 像素格式号, 整数型
设备句柄 = 取任意设备句柄 (窗口句柄)
像素格式.大小 = 40
像素格式.版本 = 1
像素格式.标志 = 位或 (#GL_画入窗口的像素格式, #GL_双缓存像素格式, #GL_支持OPENGL像素格式)
像素格式.色彩深度 = 24
像素格式.cDepthBits = 32
像素格式号 = 选择像素格式 (设备句柄, 像素格式)
置像素格式 (设备句柄, 像素格式号, 像素格式)
着色描述表号 = 创建着色描述表 (设备句柄)
置当前着色描述表 (设备句柄, 着色描述表号)
框架初始化 ()
.子程序 撤消OPenGL组件, , , 撤消已经建立的OPenGL设备场景
.参数 窗口句柄
.局部变量 循环变量, 整数型
循环变量 = 1
.判断循环首 (是否存在列表 (循环变量))
删除列表列 (循环变量, 1)
循环变量 = 循环变量 + 1
.判断循环尾 ()
' 删除所有已经创建的显示列表
置当前着色描述表 (设备句柄, 0)
删除着色描述表 (着色描述表号)
释放设备句柄 (窗口句柄, 设备句柄)
.子程序 框架初始化, , , 所有的OpenGL初始化都在这里
清除颜色缓存 (0, 0, 0, 0)' 在这里修改你的背景颜色
设置明暗模式 (#GL_平坦)
清除深度缓存 (1)
启用功能 (#GL_深度测试)
深度测试 (#GL_小于)
设置画面质量 (#GL_透视修正质量, #GL_最佳)
' ==========显示==========
坐标缩放 (0.1, 0.1, 0.1)
' ==========资源==========
创建纹理 ()
' ==========实体数据==========
' 设置材质 (#正面, #漫反射光, { 1, 1, 1, 1 })' xz
' 设置材质 (#正面, #镜面光, { 1, 1, 1, 1 })' xz
定义光源 ({ 0.7, 0.7, 0.7, 1 }, { 0.9, 0.8, 0.4, 1 }, { 0, #眼高, 0, 0 }, #GL_一号光源)' xz
设置光照模式 (#GL_双面光模式, 1)' xz
定义光源 ({ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 0, #眼高, 0, 0 }, #GL_二号光源)
定义雾 (#GL_线性, { 0.4, 0.4, 0.4, 1 }, 0.005, 1, 2)
创建地板列表 ()
画天空盒 (2, 1, 2)
画门 ()
定义迷宫数据 (#地板长, #地板宽, 迷宫)
创建墙壁列表 (迷宫)
画地图 (迷宫, 3, 地图中心 , 地图中心 )
画准星 (0.002)
画游戏标题文字 (0.02, 0.01)
画指南针 (0.01)
画箭头 (0.5, -0.5, #地板长 - 0.5, 0.5 - #地板长, #墙壁高 × 3, 0.1, 0.05)
.子程序 绘图, , , 修改
清除缓存 (位或 (#GL_颜色缓存位, #GL_深度缓存位))
矩阵复位 ()
.如果真 (取反 (光源开关))
停用功能 (#GL_一号光源)
.如果真结束
停用功能 (#GL_光照)
停用功能 (#GL_二维纹理)
调用列表 (#准星列表号)
.如果真 (地图开关)
矩阵入栈 ()
坐标平移 (地图中心 , 地图中心 , #最近距离 × -1)
调用列表 (#地图列表号)
显示位置 (玩家.位置.x, -玩家.位置.z, 地图中心 , 地图中心 )
矩阵出栈 ()
.如果真结束
坐标旋转 (玩家.绕x, 1, 0, 0)
坐标旋转 (玩家.绕y, 0, 1, 0)
坐标平移 (-玩家.位置.x, -玩家.位置.y - 玩家.移动跳跃频率 × 求正弦 (玩家.移动跳跃相位), -玩家.位置.z)
调用列表 (#箭头列表号)
设置材质 (#GL_正面, #GL_环境光, { 0.7, 0.7, 0.7, 1 })
.如果真 (光源开关)
启用功能 (#GL_一号光源)
.如果真结束
.如果真 (雾开关)
启用功能 (#GL_雾)
.如果真结束
启用功能 (#GL_光照)
启用功能 (#GL_二维纹理)
调用列表 (#门列表号)
' 调用列表 (#天空列表号)' xz
调用列表 (#地板列表号)
调用列表 (#墙壁列表号)
调用列表 (#准星列表号)
停用功能 (#GL_一号光源)
停用功能 (#GL_雾)
启用功能 (#GL_二号光源)
调用列表 (#天空列表号)' xz
设置材质 (#GL_正面, #GL_环境光, { 1, 1, 1, 1 })
矩阵入栈 ()
矩阵复位 ()
坐标平移 (-0.04, 0.03, #最近距离 × -1)
调用列表 (#文字列表号)
坐标平移 (0.02, 0, 0)
坐标旋转 (玩家.绕y, 0, 0, 1)
调用列表 (#指南针列表号)
矩阵出栈 ()
停用功能 (#GL_二号光源)
交换缓存 (设备句柄)
.子程序 尺寸被改变, , , 修改可视范围
.参数 左边
.参数 底边
.参数 宽度
.参数 高度
设置视口 (左边, 底边, 宽度, 高度)
选择矩阵模式 (#GL_投影矩阵)
矩阵复位 ()
创建对称透视投影 (45, 宽度 ÷ 高度, 0.1, 100)
选择矩阵模式 (#GL_观察矩阵)
矩阵复位 ()
.子程序 变量初始化
置随机数种子 ()
' ==========显示变量==========
全屏显示 = 真
光源开关 = 真
地图开关 = 假
' ==========操作变量==========
玩家.位置.x = 0.5
玩家.位置.y = #眼高
玩家.位置.z = -0.5
玩家.移动速度 = 0.1
玩家.绕x = 0
玩家.绕y = 0
玩家.移动跳跃频率 = 0.005
玩家.移动跳跃相位 = 0
玩家.频率叠加值 = 1
地图中心 = 0
地图中心 = 0
' ==========记录鼠标==========
鼠标超出 = { 0, 0 }
鼠标移动响应速度 = 10
.子程序 键盘操作, , , 记录键盘的状态
.参数 键代码, 整数型
.参数 功能键状态, 整数型
.参数 键状态, 逻辑型
.局部变量 临时, 双精度小数型, , "2"
.判断开始 (键代码 = 27 且 键状态)' Esc键
窗口_游戏画面.销毁 ()
.判断 (键代码 = 113 且 键状态 = 假)' 全屏
全屏显示 = 取反 (全屏显示)
输出调试文本 (“全屏显示:” + 到文本 (全屏显示))
.如果 (全屏显示)
窗口_游戏画面.移动 (0, 0, 取屏幕宽度 (), 取屏幕高度 ())
.否则
窗口_游戏画面.移动 (0, 0, 800, 600)
.如果结束
窗口_游戏画面.位置 = 1
.判断 (键代码 = 87)' 向前移动
键盘状态 = 键状态
.判断 (键代码 = 83)' 向后移动
键盘状态 = 键状态
.判断 (键代码 = 65)' 向左移动
键盘状态 = 键状态
.判断 (键代码 = 68)' 向右移动
键盘状态 = 键状态
.判断 (键代码 = 76 且 键状态)' 光开关
光源开关 = 取反 (光源开关)
输出调试文本 (“光源开关:” + 到文本 (光源开关))
绘图 ()
.判断 (键代码 = 37 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 > -0.03)
地图中心 = 地图中心 - 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 39 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 < 0.03)
地图中心 = 地图中心 + 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 40 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 > -0.02)
地图中心 = 地图中心 - 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 38 且 键状态 且 地图开关)' 地图中心坐标
.如果真 (地图中心 < 0.02)
地图中心 = 地图中心 + 0.01
.如果真结束
绘图 ()
.判断 (键代码 = 70 且 键状态)' 雾开关
雾开关 = 取反 (雾开关)
绘图 ()
.判断 (键代码 = 77 且 键状态)
地图开关 = 取反 (地图开关)
输出调试文本 (“地图开关:” + 到文本 (地图开关))
.判断 (键代码 = 32 且 键状态 = 假)
.如果真 (取整 (玩家.位置.x) = #地板长 - 1 且 取整 (取绝对值 (玩家.位置.z)) = #地板宽 - 1)' 走到出口
临时 = 取绝对值 (玩家.绕y) % 360
.如果真 (临时 < 20 或 临时 > 340)
' 在此处添加通关事件的处理代码
信息框 (“已经通关啦!”, 0, “恭喜!”)
窗口_游戏画面.销毁 ()
.如果真结束
.如果真结束
.默认
.判断结束
.子程序 鼠标操作, , , 记录鼠标的状态
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
鼠标位置 = 横向位置
鼠标位置 = 纵向位置
.子程序 可否继续移动, 逻辑型, , 防止超出可移动范围的界限
.参数 横, 双精度小数型
.参数 纵, 双精度小数型
.局部变量 横整, 整数型
.局部变量 纵整, 整数型
.局部变量 横临时, 小数型
.局部变量 纵临时, 小数型
' 是否在地图边界内
横整 = 取整 (横) + 1
纵整 = 取整 (纵) + 1
横临时 = 横整 - 横
纵临时 = 纵整 - 纵
.判断开始 (横 ≤ #碰撞距离)
返回 (假)
.判断 (横 ≥ #地板宽 - #碰撞距离)
返回 (假)
.判断 (纵 ≤ #碰撞距离)
返回 (假)
.判断 (纵 ≥ #地板长 - #碰撞距离)
返回 (假)
.判断 (横临时 ≤ #碰撞距离 且 纵临时 ≤ #碰撞距离)' 左下角
返回 (假)
.判断 (1 - 横临时 ≤ #碰撞距离 且 纵临时 ≤ #碰撞距离)' 右下角
返回 (假)
.判断 (1 - 横临时 ≤ #碰撞距离 且 1 - 纵临时 ≤ #碰撞距离)' 右上角
返回 (假)
.判断 (横临时 ≤ #碰撞距离 且 1 - 纵临时 ≤ #碰撞距离)' 左上角
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 1 - 横临时 ≤ #碰撞距离)' 左
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 横临时 ≤ #碰撞距离)' 右
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 1 - 纵临时 ≤ #碰撞距离)' 下
返回 (假)
.判断 (迷宫 [横整] [纵整] = 0 且 纵临时 ≤ #碰撞距离)' 上
返回 (假)
.默认
.判断结束
返回 (真)
.子程序 计算视点, , , 判断玩家的当前位置,也可以增加游戏过程的触发事件
.局部变量 临时, 双精度小数型, , "2"
.局部变量 显示中心, 双精度小数型, , "2"
.局部变量 频率叠加, 逻辑型
.如果真 (计算中 = 假)
计算中 = 真
显示中心 = 窗口_游戏画面.宽度 ÷ 2
显示中心 = 窗口_游戏画面.高度 ÷ 2
.如果真 (取绝对值 (鼠标位置 - 显示中心 ) > 0)
玩家.绕x = (鼠标位置 - 显示中心 ) ÷ 鼠标移动响应速度
玩家.绕x = 玩家.绕x + 鼠标超出 × #鼠标左边界 ÷ 鼠标移动响应速度
.如果真结束
.如果真 (取绝对值 (鼠标位置 - 显示中心 ) > 0)
玩家.绕y = (鼠标位置 - 显示中心 ) ÷ 鼠标移动响应速度
玩家.绕y = 玩家.绕y + 鼠标超出 × #鼠标左边界 ÷ 鼠标移动响应速度
.如果真结束
.判断开始 (鼠标位置 < 显示中心 - #鼠标左边界)
' 左移
置鼠标位置 (窗口_游戏画面.左边 + 窗口_游戏画面.左边 + 显示中心 , 鼠标位置 )
鼠标超出 = 鼠标超出 - 1
.判断 (鼠标位置 > 显示中心 + #鼠标右边界)
置鼠标位置 (窗口_游戏画面.左边 + 窗口_游戏画面.左边 + 显示中心 , 鼠标位置 )
' 右移
鼠标超出 = 鼠标超出 + 1
.默认
.判断结束
.如果真 .版本 2
.支持库 OPenGL
.程序集 画图程序集
.程序集变量 实际比例, 双精度小数型
.程序集变量 长, 整数型
.程序集变量 宽, 整数型
.子程序 创建地板列表
开始创建列表 (#地板列表号, #GL_编译列表)
画地板 (#地板宽, #地板长, 10, 10)
停止创建列表 ()
.子程序 创建墙壁列表
.参数 迷宫, 字节型, 数组
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.局部变量 循环变量3, 整数型
.局部变量 墙面宽度, 小数型
长 = 取数组下标 (迷宫, 1)
宽 = 取数组下标 (迷宫, 2)
墙面宽度 = 1 - #柱子宽度一半 × 2
开始创建列表 (#墙壁列表号, #GL_编译列表)
绑定纹理号 (#GL_二维纹理, #墙壁图片纹理号)
画墙壁柱子 ()
.变量循环首 (1, 长, 1, 循环变量1)
.变量循环首 (1, 宽, 1, 循环变量2)
矩阵入栈 ()
坐标平移 (循环变量1 - 1, 0, 1 - 循环变量2)
坐标平移 (#柱子宽度一半 ÷ 2, 0, #柱子宽度一半 × -1)
.计次循环首 (4, 循环变量3)
.如果真 (迷宫 [循环变量1] [循环变量2] [循环变量3] = 0)
画一面墙壁 (墙面宽度, #墙壁高, 0, 0, 墙面宽度 ÷ #柱子宽度一半, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
.如果真结束
坐标平移 (#柱子宽度一半 ÷ 2 + 墙面宽度, 0, #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
.计次循环尾 ()
矩阵出栈 ()
.变量循环尾 ()
.变量循环尾 ()
停止创建列表 ()
.子程序 画墙壁柱子
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.计次循环首 (长 + 1, 循环变量1)
.计次循环首 (宽 + 1, 循环变量2)
矩阵入栈 ()
坐标平移 (循环变量1 - 1, 0, 1 - 循环变量2)
坐标平移 (#柱子宽度一半, 0, #柱子宽度一半)
' 柱子墙壁的中心
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0.5, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0.5, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
矩阵出栈 ()
.计次循环尾 ()
.计次循环尾 ()
.子程序 画地板
.参数 地板宽, 双精度小数型
.参数 地板长, 双精度小数型
.参数 横向地砖数量, 整数型
.参数 纵向地砖数量, 整数型
绑定纹理号 (#GL_二维纹理, #地板列表号)
开始画 (#GL_四边形)
设置法向量 (0, 地板长, 0)' xz
设置颜色 (1, 1, 1, 0)
' 左下角
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
' 右下角
设置纹理映射坐标 (横向地砖数量, 0)
设置点 (地板宽, 0, 0)
' 右上角
设置纹理映射坐标 (横向地砖数量, 纵向地砖数量)
设置点 (地板宽, 0, -地板长)
' 左上角
设置纹理映射坐标 (0, 纵向地砖数量)
设置点 (0, 0, -地板长)
停止画 ()
.子程序 画一面墙壁
.参数 墙壁宽, 双精度小数型
.参数 墙壁高, 双精度小数型
.参数 纹理起始横坐标, 双精度小数型
.参数 纹理起始纵坐标, 双精度小数型
.参数 横向墙纸数量, 整数型
.参数 纵向墙纸数量, 整数型
开始画 (#GL_四边形)
设置法向量 (墙壁高, 0, 0)' xz
设置颜色 (1, 1, 1, 1)
' 左下角
设置纹理映射坐标 (纹理起始横坐标, 纹理起始纵坐标)
设置点 (0, 0, 0)
' 右下角
设置纹理映射坐标 (横向墙纸数量 + 纹理起始横坐标, 纹理起始纵坐标)
设置点 (0, 0, -墙壁宽)
' 右上角
设置纹理映射坐标 (横向墙纸数量 + 纹理起始横坐标, 纵向墙纸数量 + 纹理起始纵坐标)
设置点 (0, 墙壁高, -墙壁宽)
' 左上角
设置纹理映射坐标 (纹理起始横坐标, 纵向墙纸数量 + 纹理起始纵坐标)
设置点 (0, 墙壁高, 0)
停止画 ()
.子程序 定义光源
.参数 环境光, 小数型, 数组
.参数 漫射光, 小数型, 数组
.参数 光源位置, 小数型, 数组
.参数 光源号
设置光源参数 (光源号, #GL_环境光, 环境光)
设置光源参数 (光源号, #GL_漫反射光, 漫射光)
设置光源参数 (光源号, #GL_光源位置, 光源位置)
设置光源参数 (#GL_零号光源, #GL_镜面光, { 1, 1, 1, 1 })' xz
启用功能 (光源号)
.子程序 定义雾
.参数 模式, 整数型
.参数 颜色, 小数型, 数组
.参数 密度, 小数型
.参数 开始, 小数型
.参数 结束, 小数型
设置雾 (#GL_雾模式, 模式)
设置雾 (#GL_雾颜色, 颜色)
设置雾 (#GL_雾密度, 密度)
设置雾 (#GL_雾起点, 开始)
设置雾 (#GL_雾终点, 结束)
.子程序 画准星
.参数 半径, 双精度小数型
.局部变量 循环变量, 整数型
开始创建列表 (#准星列表号, #GL_编译列表)
矩阵入栈 ()
开始画 (#GL_线段)
设置颜色 (1, 1, 1, 0)
设置点 (-半径, 0, #最近距离 × -1)
设置点 (半径, 0, #最近距离 × -1)
设置点 (0, -半径, #最近距离 × -1)
设置点 (0, 半径, #最近距离 × -1)
停止画 ()
半径 = 半径 ÷ 2
开始画 (#GL_闭合线段)
设置颜色 (1, 1, 1, 0)
.变量循环首 (0, 350, 10, 循环变量)
设置点 (半径 × 求余弦 (循环变量 × #pi ÷ 180), 半径 × 求正弦 (循环变量 × #pi ÷ 180), #最近距离 × -1)
.变量循环尾 ()
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 画箭头
.参数 入口横坐标, 小数型
.参数 入口纵坐标, 小数型
.参数 出口横坐标, 小数型
.参数 出口纵坐标, 小数型
.参数 其始高度, 小数型
.参数 大小, 小数型
.参数 厚度, 小数型
.局部变量 箭头1, 双精度小数型, , "0"
.局部变量 箭头2, 双精度小数型, , "0"
.局部变量 循环变量
重定义数组 (箭头1, 假, 7, 6)
箭头1 = 0
箭头1 = 其始高度
箭头1 = 0.24
箭头1 = 0.93
箭头1 = 0.6
箭头1 = 0 + 大小
箭头1 = 其始高度 + 大小
箭头1 = 0.22
箭头1 = 0.66
箭头1 = 0.57
箭头1 = 0 + 大小 ÷ 2
箭头1 = 其始高度 + 大小
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 + 大小 ÷ 2
箭头1 = 其始高度 + 大小 × 3
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小 ÷ 2
箭头1 = 其始高度 + 大小 × 3
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小 ÷ 2
箭头1 = 其始高度 + 大小
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小
箭头1 = 其始高度 + 大小
箭头1 = 0.22
箭头1 = 0.66
箭头1 = 0.57
连续赋值 (0 + 厚度 ÷ 2, 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 )
箭头2 = 箭头1
箭头2 = 0.85
箭头2 = 0.55
箭头2 = 0.57
箭头2 = 0.63
箭头2 = 0.5
箭头2 = 0.53
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.63
箭头2 = 0.5
箭头2 = 0.53
开始创建列表 (#箭头列表号, #GL_编译列表)
矩阵入栈 ()
坐标平移 (入口横坐标, 0, 入口纵坐标)
多边形拉伸 (#GL_凸多边形, 箭头1, 厚度)
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (出口横坐标, 0, 出口纵坐标)
多边形拉伸 (#GL_凸多边形, 箭头2, 厚度)
矩阵出栈 ()
停止创建列表 ()
.子程序 多边形拉伸
.参数 形状类型, 整数型
.参数 多边形点, 双精度小数型, 数组
.参数 厚度, 双精度小数型
.局部变量 顶点数, 整数型
.局部变量 循环变量, 整数型
.局部变量 是否有颜色, 逻辑型
顶点数 = 取数组下标 (多边形点, 1)
是否有颜色 = 取数组下标 (多边形点, 2) > 3
设置正面 (#GL_顺时针)
开始画 (形状类型)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] - 厚度)
.计次循环尾 ()
停止画 ()
设置正面 (#GL_逆时针)
开始画 (形状类型)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] )
.计次循环尾 ()
停止画 ()
开始画 (#GL_连续四边形)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] )
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] - 厚度)
.计次循环尾 ()
设置点 (多边形点 , 多边形点 , 多边形点 )
设置点 (多边形点 , 多边形点 , 多边形点 - 厚度)
停止画 ()
.子程序 画地图
.参数 迷宫, 字节型, 数组
.参数 缩放比例, 字节型, , 1-10
.参数 中心横坐标, 小数型
.参数 中心纵坐标, 小数型
.局部变量 x, 小数型, , "3"
.局部变量 y, 小数型, , "3"
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.局部变量 循环变量3, 整数型
.局部变量 迷宫单元格, 字节型, , "8"
.局部变量 墙面宽度, 小数型
.局部变量 大小, 双精度小数型
开始创建列表 (#地图列表号, #GL_编译列表)
实际比例 = 0.1 ÷ 缩放比例
开始画 (#GL_闭合线段)
设置颜色 (1, 1, 1, 0)
设置点 (-实际比例 ÷ 2, -实际比例 ÷ 2, 0)
设置点 (实际比例 ÷ 2, -(实际比例 ÷ 2), 0)
设置点 (实际比例 ÷ 2, 实际比例 ÷ 2, 0)
设置点 (-(实际比例 ÷ 2), 实际比例 ÷ 2, 0)
停止画 ()
墙面宽度 = (1 - #柱子宽度一半 × 2) × 0.1 ÷ 缩放比例
开始画 (#GL_线段)
.变量循环首 (1, 长, 1, 循环变量1)
.变量循环首 (1, 宽, 1, 循环变量2)
x = (循环变量1 - 长 ÷ 2 - 1) × 实际比例 ÷ 长
x = (循环变量1 - 长 ÷ 2 - 1) × 实际比例 ÷ 长
x = (循环变量1 - 长 ÷ 2) × 实际比例 ÷ 长
y = (循环变量2 - 宽 ÷ 2) × 实际比例 ÷ 宽
y = (循环变量2 - 宽 ÷ 2 - 1) × 实际比例 ÷ 宽
y = (循环变量2 - 宽 ÷ 2 - 1) × 实际比例 ÷ 宽
.计次循环首 (2, 循环变量3)
.如果真 (迷宫 [循环变量1] [循环变量2] [循环变量3] = 0)
设置点 (x [循环变量3], y [循环变量3], 0)
设置点 (x [循环变量3 + 1], y [循环变量3 + 1], 0)
.如果真结束
.计次循环尾 ()
.变量循环尾 ()
.变量循环尾 ()
停止画 ()
大小 = 实际比例 ÷ 长 ÷ 2
矩阵入栈 ()
坐标平移 (大小 - 实际比例 ÷ 2, 大小 - 实际比例 ÷ 2, 0)
开始画 (#GL_凸多边形)
设置颜色 (0.24, 0.93, 0.6, 0)
设置点 (0, -大小, 0)
设置点 (-大小, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 2, 0)
设置点 (大小, -大小 × 2, 0)
停止画 ()
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (实际比例 ÷ 2 - 大小, 实际比例 ÷ 2 + 大小 × 3, 0)
开始画 (#GL_凸多边形)
设置颜色 (0.85, 0.55, 0.57, 0)
设置点 (0, -大小, 0)
设置点 (-大小, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 2, 0)
设置点 (大小, -大小 × 2, 0)
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 显示位置
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 地图横坐标, 双精度小数型
.参数 地图纵坐标, 双精度小数型
.局部变量 大小, 双精度小数型
大小 = 实际比例 ÷ 长 ÷ 2
矩阵入栈 ()
坐标平移 ((横向位置 - 长 ÷ 2) × 实际比例 ÷ 长, (纵向位置 - 宽 ÷ 2) × 实际比例 ÷ 宽, 0)' 左下角
坐标平移 (大小, 大小, 0)
开始画 (#GL_四边形)
设置颜色 (1, 0, 0, 0)
设置点 (0, 大小, 0)
设置点 (-大小, 0, 0)
设置点 (0, -大小, 0)
设置点 (大小, 0, 0)
停止画 ()
矩阵出栈 ()
.子程序 画天空盒
.参数 横向纹理数量, 整数型
.参数 竖向纹理数量, 整数型
.参数 纵向纹理数量, 整数型
.局部变量 点, 小数型, , "8,3"
连续赋值 (-1, 点 , 点 , 点 , 点 )' x1,x2,x5,x6
连续赋值 (#地板长 + 1, 点 , 点 , 点 , 点 )' x3,x4,x7,x8
连续赋值 (1, 点 , 点 , 点 , 点 )' z1,z4,z5,z8
连续赋值 (-1 - #地板宽, 点 , 点 , 点 , 点 )' z2,z3,z6,z7
连续赋值 (#地板长 ÷ 横向纹理数量 × 竖向纹理数量, 点 , 点 , 点 , 点 )' y1,y2,y3,y4
开始创建列表 (#天空列表号, #GL_编译列表)
绑定纹理号 (#GL_二维纹理, #天空图片纹理号)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 上面
' 开始画 (#四边形)' xz多余
' 设置纹理映射坐标 (0, 纵向纹理数量)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (0, 0)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (竖向纹理数量, 0)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)' xz
' 设置点 (点 , 点 , 点 )' xz
' 停止画 ()' xz
' ' 上面' xz
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 左面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 竖向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 竖向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 前面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 右面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 竖向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 竖向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 后面
停止创建列表 ()
.子程序 画指南针
.参数 大小, 双精度小数型
大小 = 大小 ÷ 2
开始创建列表 (#指南针列表号, #GL_编译列表)
启用功能 (#GL_二维纹理)
启用功能 (#GL_混合测试)
停用功能 (#GL_深度测试)
混合测试 (#GL_目标值颜色比例, 0)' 去除部分
绑定纹理号 (#GL_二维纹理, #指南针蒙板图片纹理号)
设置颜色 (0, 0, 0, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-大小, -大小, 0)
设置纹理映射坐标 (1, 0)
设置点 (大小, -大小, 0)
设置纹理映射坐标 (1, 1)
设置点 (大小, 大小, 0)
设置纹理映射坐标 (0, 1)
设置点 (-大小, 大小, 0)
停止画 ()
混合测试 (1, 1)' 保留部分
绑定纹理号 (#GL_二维纹理, #指南针图片纹理号)
设置颜色 (1, 1, 1, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-大小, -大小, 0)
设置纹理映射坐标 (1, 0)
设置点 (大小, -大小, 0)
设置纹理映射坐标 (1, 1)
设置点 (大小, 大小, 0)
设置纹理映射坐标 (0, 1)
设置点 (-大小, 大小, 0)
停止画 ()
停用功能 (#GL_混合测试)
启用功能 (#GL_深度测试)
停止创建列表 ()
.子程序 画游戏标题文字
.参数 宽度, 双精度小数型
.参数 高度, 双精度小数型
宽度 = 宽度 ÷ 2
高度 = 高度 ÷ 2
开始创建列表 (#文字列表号, #GL_编译列表)
启用功能 (#GL_二维纹理)
启用功能 (#GL_混合测试)
停用功能 (#GL_深度测试)
混合测试 (#GL_目标值颜色比例, 0)' 去除部分
绑定纹理号 (#GL_二维纹理, #文字蒙板纹理号)
设置颜色 (0, 0, 0, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-宽度, -高度, 0)
设置纹理映射坐标 (1, 0)
设置点 (宽度, -高度, 0)
设置纹理映射坐标 (1, 1)
设置点 (宽度, 高度, 0)
设置纹理映射坐标 (0, 1)
设置点 (-宽度, 高度, 0)
停止画 ()
混合测试 (1, 1)' 保留部分
绑定纹理号 (#GL_二维纹理, #文字纹理号)
设置颜色 (1, 1, 1, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-宽度, -高度, 0)
设置纹理映射坐标 (1, 0)
设置点 (宽度, -高度, 0)
设置纹理映射坐标 (1, 1)
设置点 (宽度, 高度, 0)
设置纹理映射坐标 (0, 1)
设置点 (-宽度, 高度, 0)
停止画 ()
停用功能 (#GL_混合测试)
启用功能 (#GL_深度测试)
停止创建列表 ()
.子程序 画门
开始创建列表 (#门列表号, #GL_编译列表)
矩阵入栈 ()
坐标平移 (0.625, 0, -(#柱子宽度一半 ÷ 2) - 0.001)
绑定纹理号 (#GL_二维纹理, #门纹理号)
开始画 (#GL_四边形)
设置法向量 (0, 0, -1 × #墙壁高)' xz
设置纹理映射坐标 (0, 1)
设置点 (0, #墙壁高, 0)
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
设置纹理映射坐标 (1, 0)
设置点 (-0.25, 0, 0)
设置纹理映射坐标 (1, 1)
设置点 (-0.25, #墙壁高, 0)
停止画 ()
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (#地板长 - 0.625, 0, #柱子宽度一半 ÷ 2 - #地板宽 + 0.001)
绑定纹理号 (#GL_二维纹理, #门纹理号)
开始画 (#GL_四边形)
设置法向量 (0, 0, #墙壁高)' xz
设置纹理映射坐标 (0, 1)
设置点 (0, #墙壁高, 0)
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
设置纹理映射坐标 (1, 0)
设置点 (0.25, 0, 0)
设置纹理映射坐标 (1, 1)
设置点 (0.25, #墙壁高, 0)
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 绑定纹理图片
.参数 文件名, 文本型
.参数 图片, 字节集
.参数 纹理号
.局部变量 文件号
文件号 = 打开文件 (文件名, #重写, )
写出字节集 (文件号, 图片)
关闭文件 (文件号)
.如果 (文件号 ≠ 0)
绑定纹理号 (#GL_二维纹理, 纹理号)
载入位图数据 (文件名)
纹理控制 (#GL_二维纹理, #GL_放大纹理滤波, #GL_线性)
纹理控制 (#GL_二维纹理, #GL_缩小纹理滤波, #GL_线性滤镜)
.否则
信息框 (“创建纹理失败!”, 0, “错误”)
.如果结束
.子程序 创建纹理
.局部变量 文件名, 文本型
文件名 = 取运行目录 () + #临时文件名' 指定临时文件名称
绑定纹理图片 (文件名, #地板, #地板图片纹理号)
绑定纹理图片 (文件名, #墙壁, #墙壁图片纹理号)
绑定纹理图片 (文件名, #天空, #天空图片纹理号)
绑定纹理图片 (文件名, #指南针, #指南针图片纹理号)
绑定纹理图片 (文件名, #指南针蒙板, #指南针蒙板图片纹理号)
绑定纹理图片 (文件名, #文字, #文字纹理号)
绑定纹理图片 (文件名, #文字蒙板, #文字蒙板纹理号)
绑定纹理图片 (文件名, #门, #门纹理号)
' 结束删除临时文件
.如果真 (取反 (删除文件 (文件名)))
信息框 (“删除临时纹理文件失败!”, 0, “错误”)
.如果真结束
.版本 2
.支持库 OPenGL
.程序集 画图程序集
.程序集变量 实际比例, 双精度小数型
.程序集变量 长, 整数型
.程序集变量 宽, 整数型
.子程序 创建地板列表
开始创建列表 (#地板列表号, #GL_编译列表)
画地板 (#地板宽, #地板长, 10, 10)
停止创建列表 ()
.子程序 创建墙壁列表
.参数 迷宫, 字节型, 数组
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.局部变量 循环变量3, 整数型
.局部变量 墙面宽度, 小数型
长 = 取数组下标 (迷宫, 1)
宽 = 取数组下标 (迷宫, 2)
墙面宽度 = 1 - #柱子宽度一半 × 2
开始创建列表 (#墙壁列表号, #GL_编译列表)
绑定纹理号 (#GL_二维纹理, #墙壁图片纹理号)
画墙壁柱子 ()
.变量循环首 (1, 长, 1, 循环变量1)
.变量循环首 (1, 宽, 1, 循环变量2)
矩阵入栈 ()
坐标平移 (循环变量1 - 1, 0, 1 - 循环变量2)
坐标平移 (#柱子宽度一半 ÷ 2, 0, #柱子宽度一半 × -1)
.计次循环首 (4, 循环变量3)
.如果真 (迷宫 [循环变量1] [循环变量2] [循环变量3] = 0)
画一面墙壁 (墙面宽度, #墙壁高, 0, 0, 墙面宽度 ÷ #柱子宽度一半, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
.如果真结束
坐标平移 (#柱子宽度一半 ÷ 2 + 墙面宽度, 0, #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
.计次循环尾 ()
矩阵出栈 ()
.变量循环尾 ()
.变量循环尾 ()
停止创建列表 ()
.子程序 画墙壁柱子
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.计次循环首 (长 + 1, 循环变量1)
.计次循环首 (宽 + 1, 循环变量2)
矩阵入栈 ()
坐标平移 (循环变量1 - 1, 0, 1 - 循环变量2)
坐标平移 (#柱子宽度一半, 0, #柱子宽度一半)
' 柱子墙壁的中心
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0.5, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
画一面墙壁 (#柱子宽度一半 × 2, #墙壁高, 0.5, 0, 2, #墙壁高 ÷ #柱子宽度一半 ÷ 2)
坐标旋转 (90, 0, 1, 0)
坐标平移 (#柱子宽度一半 × 2, 0, 0)
矩阵出栈 ()
.计次循环尾 ()
.计次循环尾 ()
.子程序 画地板
.参数 地板宽, 双精度小数型
.参数 地板长, 双精度小数型
.参数 横向地砖数量, 整数型
.参数 纵向地砖数量, 整数型
绑定纹理号 (#GL_二维纹理, #地板列表号)
开始画 (#GL_四边形)
设置法向量 (0, 地板长, 0)' xz
设置颜色 (1, 1, 1, 0)
' 左下角
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
' 右下角
设置纹理映射坐标 (横向地砖数量, 0)
设置点 (地板宽, 0, 0)
' 右上角
设置纹理映射坐标 (横向地砖数量, 纵向地砖数量)
设置点 (地板宽, 0, -地板长)
' 左上角
设置纹理映射坐标 (0, 纵向地砖数量)
设置点 (0, 0, -地板长)
停止画 ()
.子程序 画一面墙壁
.参数 墙壁宽, 双精度小数型
.参数 墙壁高, 双精度小数型
.参数 纹理起始横坐标, 双精度小数型
.参数 纹理起始纵坐标, 双精度小数型
.参数 横向墙纸数量, 整数型
.参数 纵向墙纸数量, 整数型
开始画 (#GL_四边形)
设置法向量 (墙壁高, 0, 0)' xz
设置颜色 (1, 1, 1, 1)
' 左下角
设置纹理映射坐标 (纹理起始横坐标, 纹理起始纵坐标)
设置点 (0, 0, 0)
' 右下角
设置纹理映射坐标 (横向墙纸数量 + 纹理起始横坐标, 纹理起始纵坐标)
设置点 (0, 0, -墙壁宽)
' 右上角
设置纹理映射坐标 (横向墙纸数量 + 纹理起始横坐标, 纵向墙纸数量 + 纹理起始纵坐标)
设置点 (0, 墙壁高, -墙壁宽)
' 左上角
设置纹理映射坐标 (纹理起始横坐标, 纵向墙纸数量 + 纹理起始纵坐标)
设置点 (0, 墙壁高, 0)
停止画 ()
.子程序 定义光源
.参数 环境光, 小数型, 数组
.参数 漫射光, 小数型, 数组
.参数 光源位置, 小数型, 数组
.参数 光源号
设置光源参数 (光源号, #GL_环境光, 环境光)
设置光源参数 (光源号, #GL_漫反射光, 漫射光)
设置光源参数 (光源号, #GL_光源位置, 光源位置)
设置光源参数 (#GL_零号光源, #GL_镜面光, { 1, 1, 1, 1 })' xz
启用功能 (光源号)
.子程序 定义雾
.参数 模式, 整数型
.参数 颜色, 小数型, 数组
.参数 密度, 小数型
.参数 开始, 小数型
.参数 结束, 小数型
设置雾 (#GL_雾模式, 模式)
设置雾 (#GL_雾颜色, 颜色)
设置雾 (#GL_雾密度, 密度)
设置雾 (#GL_雾起点, 开始)
设置雾 (#GL_雾终点, 结束)
.子程序 画准星
.参数 半径, 双精度小数型
.局部变量 循环变量, 整数型
开始创建列表 (#准星列表号, #GL_编译列表)
矩阵入栈 ()
开始画 (#GL_线段)
设置颜色 (1, 1, 1, 0)
设置点 (-半径, 0, #最近距离 × -1)
设置点 (半径, 0, #最近距离 × -1)
设置点 (0, -半径, #最近距离 × -1)
设置点 (0, 半径, #最近距离 × -1)
停止画 ()
半径 = 半径 ÷ 2
开始画 (#GL_闭合线段)
设置颜色 (1, 1, 1, 0)
.变量循环首 (0, 350, 10, 循环变量)
设置点 (半径 × 求余弦 (循环变量 × #pi ÷ 180), 半径 × 求正弦 (循环变量 × #pi ÷ 180), #最近距离 × -1)
.变量循环尾 ()
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 画箭头
.参数 入口横坐标, 小数型
.参数 入口纵坐标, 小数型
.参数 出口横坐标, 小数型
.参数 出口纵坐标, 小数型
.参数 其始高度, 小数型
.参数 大小, 小数型
.参数 厚度, 小数型
.局部变量 箭头1, 双精度小数型, , "0"
.局部变量 箭头2, 双精度小数型, , "0"
.局部变量 循环变量
重定义数组 (箭头1, 假, 7, 6)
箭头1 = 0
箭头1 = 其始高度
箭头1 = 0.24
箭头1 = 0.93
箭头1 = 0.6
箭头1 = 0 + 大小
箭头1 = 其始高度 + 大小
箭头1 = 0.22
箭头1 = 0.66
箭头1 = 0.57
箭头1 = 0 + 大小 ÷ 2
箭头1 = 其始高度 + 大小
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 + 大小 ÷ 2
箭头1 = 其始高度 + 大小 × 3
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小 ÷ 2
箭头1 = 其始高度 + 大小 × 3
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小 ÷ 2
箭头1 = 其始高度 + 大小
箭头1 = 0.17
箭头1 = 0.49
箭头1 = 0.43
箭头1 = 0 - 大小
箭头1 = 其始高度 + 大小
箭头1 = 0.22
箭头1 = 0.66
箭头1 = 0.57
连续赋值 (0 + 厚度 ÷ 2, 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 , 箭头1 )
箭头2 = 箭头1
箭头2 = 0.85
箭头2 = 0.55
箭头2 = 0.57
箭头2 = 0.63
箭头2 = 0.5
箭头2 = 0.53
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.75
箭头2 = 0.41
箭头2 = 0.38
箭头2 = 0.63
箭头2 = 0.5
箭头2 = 0.53
开始创建列表 (#箭头列表号, #GL_编译列表)
矩阵入栈 ()
坐标平移 (入口横坐标, 0, 入口纵坐标)
多边形拉伸 (#GL_凸多边形, 箭头1, 厚度)
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (出口横坐标, 0, 出口纵坐标)
多边形拉伸 (#GL_凸多边形, 箭头2, 厚度)
矩阵出栈 ()
停止创建列表 ()
.子程序 多边形拉伸
.参数 形状类型, 整数型
.参数 多边形点, 双精度小数型, 数组
.参数 厚度, 双精度小数型
.局部变量 顶点数, 整数型
.局部变量 循环变量, 整数型
.局部变量 是否有颜色, 逻辑型
顶点数 = 取数组下标 (多边形点, 1)
是否有颜色 = 取数组下标 (多边形点, 2) > 3
设置正面 (#GL_顺时针)
开始画 (形状类型)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] - 厚度)
.计次循环尾 ()
停止画 ()
设置正面 (#GL_逆时针)
开始画 (形状类型)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] )
.计次循环尾 ()
停止画 ()
开始画 (#GL_连续四边形)
.计次循环首 (顶点数, 循环变量)
.如果真 (是否有颜色)
设置颜色 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] , 0)
.如果真结束
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] )
设置点 (多边形点 [循环变量] , 多边形点 [循环变量] , 多边形点 [循环变量] - 厚度)
.计次循环尾 ()
设置点 (多边形点 , 多边形点 , 多边形点 )
设置点 (多边形点 , 多边形点 , 多边形点 - 厚度)
停止画 ()
.子程序 画地图
.参数 迷宫, 字节型, 数组
.参数 缩放比例, 字节型, , 1-10
.参数 中心横坐标, 小数型
.参数 中心纵坐标, 小数型
.局部变量 x, 小数型, , "3"
.局部变量 y, 小数型, , "3"
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.局部变量 循环变量3, 整数型
.局部变量 迷宫单元格, 字节型, , "8"
.局部变量 墙面宽度, 小数型
.局部变量 大小, 双精度小数型
开始创建列表 (#地图列表号, #GL_编译列表)
实际比例 = 0.1 ÷ 缩放比例
开始画 (#GL_闭合线段)
设置颜色 (1, 1, 1, 0)
设置点 (-实际比例 ÷ 2, -实际比例 ÷ 2, 0)
设置点 (实际比例 ÷ 2, -(实际比例 ÷ 2), 0)
设置点 (实际比例 ÷ 2, 实际比例 ÷ 2, 0)
设置点 (-(实际比例 ÷ 2), 实际比例 ÷ 2, 0)
停止画 ()
墙面宽度 = (1 - #柱子宽度一半 × 2) × 0.1 ÷ 缩放比例
开始画 (#GL_线段)
.变量循环首 (1, 长, 1, 循环变量1)
.变量循环首 (1, 宽, 1, 循环变量2)
x = (循环变量1 - 长 ÷ 2 - 1) × 实际比例 ÷ 长
x = (循环变量1 - 长 ÷ 2 - 1) × 实际比例 ÷ 长
x = (循环变量1 - 长 ÷ 2) × 实际比例 ÷ 长
y = (循环变量2 - 宽 ÷ 2) × 实际比例 ÷ 宽
y = (循环变量2 - 宽 ÷ 2 - 1) × 实际比例 ÷ 宽
y = (循环变量2 - 宽 ÷ 2 - 1) × 实际比例 ÷ 宽
.计次循环首 (2, 循环变量3)
.如果真 (迷宫 [循环变量1] [循环变量2] [循环变量3] = 0)
设置点 (x [循环变量3], y [循环变量3], 0)
设置点 (x [循环变量3 + 1], y [循环变量3 + 1], 0)
.如果真结束
.计次循环尾 ()
.变量循环尾 ()
.变量循环尾 ()
停止画 ()
大小 = 实际比例 ÷ 长 ÷ 2
矩阵入栈 ()
坐标平移 (大小 - 实际比例 ÷ 2, 大小 - 实际比例 ÷ 2, 0)
开始画 (#GL_凸多边形)
设置颜色 (0.24, 0.93, 0.6, 0)
设置点 (0, -大小, 0)
设置点 (-大小, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 2, 0)
设置点 (大小, -大小 × 2, 0)
停止画 ()
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (实际比例 ÷ 2 - 大小, 实际比例 ÷ 2 + 大小 × 3, 0)
开始画 (#GL_凸多边形)
设置颜色 (0.85, 0.55, 0.57, 0)
设置点 (0, -大小, 0)
设置点 (-大小, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 2, 0)
设置点 (-大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 3, 0)
设置点 (大小 ÷ 2, -大小 × 2, 0)
设置点 (大小, -大小 × 2, 0)
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 显示位置
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 地图横坐标, 双精度小数型
.参数 地图纵坐标, 双精度小数型
.局部变量 大小, 双精度小数型
大小 = 实际比例 ÷ 长 ÷ 2
矩阵入栈 ()
坐标平移 ((横向位置 - 长 ÷ 2) × 实际比例 ÷ 长, (纵向位置 - 宽 ÷ 2) × 实际比例 ÷ 宽, 0)' 左下角
坐标平移 (大小, 大小, 0)
开始画 (#GL_四边形)
设置颜色 (1, 0, 0, 0)
设置点 (0, 大小, 0)
设置点 (-大小, 0, 0)
设置点 (0, -大小, 0)
设置点 (大小, 0, 0)
停止画 ()
矩阵出栈 ()
.子程序 画天空盒
.参数 横向纹理数量, 整数型
.参数 竖向纹理数量, 整数型
.参数 纵向纹理数量, 整数型
.局部变量 点, 小数型, , "8,3"
连续赋值 (-1, 点 , 点 , 点 , 点 )' x1,x2,x5,x6
连续赋值 (#地板长 + 1, 点 , 点 , 点 , 点 )' x3,x4,x7,x8
连续赋值 (1, 点 , 点 , 点 , 点 )' z1,z4,z5,z8
连续赋值 (-1 - #地板宽, 点 , 点 , 点 , 点 )' z2,z3,z6,z7
连续赋值 (#地板长 ÷ 横向纹理数量 × 竖向纹理数量, 点 , 点 , 点 , 点 )' y1,y2,y3,y4
开始创建列表 (#天空列表号, #GL_编译列表)
绑定纹理号 (#GL_二维纹理, #天空图片纹理号)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 上面
' 开始画 (#四边形)' xz多余
' 设置纹理映射坐标 (0, 纵向纹理数量)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (0, 0)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (竖向纹理数量, 0)' xz
' 设置点 (点 , 点 , 点 )' xz
' 设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)' xz
' 设置点 (点 , 点 , 点 )' xz
' 停止画 ()' xz
' ' 上面' xz
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 左面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 竖向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 竖向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 前面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 纵向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (竖向纹理数量, 纵向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 右面
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 竖向纹理数量)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (0, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 0)
设置点 (点 , 点 , 点 )
设置纹理映射坐标 (横向纹理数量, 竖向纹理数量)
设置点 (点 , 点 , 点 )
停止画 ()
' 后面
停止创建列表 ()
.子程序 画指南针
.参数 大小, 双精度小数型
大小 = 大小 ÷ 2
开始创建列表 (#指南针列表号, #GL_编译列表)
启用功能 (#GL_二维纹理)
启用功能 (#GL_混合测试)
停用功能 (#GL_深度测试)
混合测试 (#GL_目标值颜色比例, 0)' 去除部分
绑定纹理号 (#GL_二维纹理, #指南针蒙板图片纹理号)
设置颜色 (0, 0, 0, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-大小, -大小, 0)
设置纹理映射坐标 (1, 0)
设置点 (大小, -大小, 0)
设置纹理映射坐标 (1, 1)
设置点 (大小, 大小, 0)
设置纹理映射坐标 (0, 1)
设置点 (-大小, 大小, 0)
停止画 ()
混合测试 (1, 1)' 保留部分
绑定纹理号 (#GL_二维纹理, #指南针图片纹理号)
设置颜色 (1, 1, 1, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-大小, -大小, 0)
设置纹理映射坐标 (1, 0)
设置点 (大小, -大小, 0)
设置纹理映射坐标 (1, 1)
设置点 (大小, 大小, 0)
设置纹理映射坐标 (0, 1)
设置点 (-大小, 大小, 0)
停止画 ()
停用功能 (#GL_混合测试)
启用功能 (#GL_深度测试)
停止创建列表 ()
.子程序 画游戏标题文字
.参数 宽度, 双精度小数型
.参数 高度, 双精度小数型
宽度 = 宽度 ÷ 2
高度 = 高度 ÷ 2
开始创建列表 (#文字列表号, #GL_编译列表)
启用功能 (#GL_二维纹理)
启用功能 (#GL_混合测试)
停用功能 (#GL_深度测试)
混合测试 (#GL_目标值颜色比例, 0)' 去除部分
绑定纹理号 (#GL_二维纹理, #文字蒙板纹理号)
设置颜色 (0, 0, 0, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-宽度, -高度, 0)
设置纹理映射坐标 (1, 0)
设置点 (宽度, -高度, 0)
设置纹理映射坐标 (1, 1)
设置点 (宽度, 高度, 0)
设置纹理映射坐标 (0, 1)
设置点 (-宽度, 高度, 0)
停止画 ()
混合测试 (1, 1)' 保留部分
绑定纹理号 (#GL_二维纹理, #文字纹理号)
设置颜色 (1, 1, 1, 1)
开始画 (#GL_四边形)
设置纹理映射坐标 (0, 0)
设置点 (-宽度, -高度, 0)
设置纹理映射坐标 (1, 0)
设置点 (宽度, -高度, 0)
设置纹理映射坐标 (1, 1)
设置点 (宽度, 高度, 0)
设置纹理映射坐标 (0, 1)
设置点 (-宽度, 高度, 0)
停止画 ()
停用功能 (#GL_混合测试)
启用功能 (#GL_深度测试)
停止创建列表 ()
.子程序 画门
开始创建列表 (#门列表号, #GL_编译列表)
矩阵入栈 ()
坐标平移 (0.625, 0, -(#柱子宽度一半 ÷ 2) - 0.001)
绑定纹理号 (#GL_二维纹理, #门纹理号)
开始画 (#GL_四边形)
设置法向量 (0, 0, -1 × #墙壁高)' xz
设置纹理映射坐标 (0, 1)
设置点 (0, #墙壁高, 0)
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
设置纹理映射坐标 (1, 0)
设置点 (-0.25, 0, 0)
设置纹理映射坐标 (1, 1)
设置点 (-0.25, #墙壁高, 0)
停止画 ()
矩阵出栈 ()
矩阵入栈 ()
坐标平移 (#地板长 - 0.625, 0, #柱子宽度一半 ÷ 2 - #地板宽 + 0.001)
绑定纹理号 (#GL_二维纹理, #门纹理号)
开始画 (#GL_四边形)
设置法向量 (0, 0, #墙壁高)' xz
设置纹理映射坐标 (0, 1)
设置点 (0, #墙壁高, 0)
设置纹理映射坐标 (0, 0)
设置点 (0, 0, 0)
设置纹理映射坐标 (1, 0)
设置点 (0.25, 0, 0)
设置纹理映射坐标 (1, 1)
设置点 (0.25, #墙壁高, 0)
停止画 ()
矩阵出栈 ()
停止创建列表 ()
.子程序 绑定纹理图片
.参数 文件名, 文本型
.参数 图片, 字节集
.参数 纹理号
.局部变量 文件号
文件号 = 打开文件 (文件名, #重写, )
写出字节集 (文件号, 图片)
关闭文件 (文件号)
.如果 (文件号 ≠ 0)
绑定纹理号 (#GL_二维纹理, 纹理号)
载入位图数据 (文件名)
纹理控制 (#GL_二维纹理, #GL_放大纹理滤波, #GL_线性)
纹理控制 (#GL_二维纹理, #GL_缩小纹理滤波, #GL_线性滤镜)
.否则
信息框 (“创建纹理失败!”, 0, “错误”)
.如果结束
.子程序 创建纹理
.局部变量 文件名, 文本型
文件名 = 取运行目录 () + #临时文件名' 指定临时文件名称
绑定纹理图片 (文件名, #地板, #地板图片纹理号)
绑定纹理图片 (文件名, #墙壁, #墙壁图片纹理号)
绑定纹理图片 (文件名, #天空, #天空图片纹理号)
绑定纹理图片 (文件名, #指南针, #指南针图片纹理号)
绑定纹理图片 (文件名, #指南针蒙板, #指南针蒙板图片纹理号)
绑定纹理图片 (文件名, #文字, #文字纹理号)
绑定纹理图片 (文件名, #文字蒙板, #文字蒙板纹理号)
绑定纹理图片 (文件名, #门, #门纹理号)
' 结束删除临时文件
.如果真 (取反 (删除文件 (文件名)))
信息框 (“删除临时纹理文件失败!”, 0, “错误”)
.如果真结束
页:
[1]