被“逼”写个程序,于是用易语言写了(半)个扫雷程序——鼠标左键功能尚未实现且界面粗糙~(@^_^@)~,代码先:
.程序集 窗口程序集1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
比较满意的部分是计算非雷的空周围雷的个数,开始是对每个非雷的空计算它的周围有几个雷,后来改成对每个雷周围的空累加雷的个数,效率因此得以成倍提高。
(1)程序中用12*12的二维数组表示雷区,其中第1行、第1列、第12行、第12列并没用来布雷,之所以加上这些虚行虚列,是为了统一后边的处理,避免进行判断,这种用空间换取时间的处理手法在程序设计中很常见;
(2)按下鼠标右键事件的处理过程中,忘记雷的处理了,应判断点击的位置是否是雷,如果是则雷数加1,当雷数等于总雷数时,游戏结束,另外则是在标志/取消标志雷间要进行切换;
(3)按下鼠标左键事件的处理过程的算法描述(懒得去写O(∩_∩)O):
计算鼠标所在位置的行、列下标
调用“扫雷(行, 列)”过程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.程序集 窗口程序集1
.程序集变量 雷区, , , "12,12"
.程序集变量 雷, , , "10,2"
.子程序 __启动窗口_被激活
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 k, 整数型
数组清零 (雷区)
置随机数种子 ()
i = 1
.判断循环首 (i ≤ #本局雷数)
雷 [i] [1] = 取随机数 (2, 11)
雷 [i] [2] = 取随机数 (2, 11)
.如果真 (雷区 [雷 [i] [1]] [雷 [i] [2]] = 0)
雷区 [雷 [i] [1]] [雷 [i] [2]] = 9
i = i + 1
.如果真结束
.判断循环尾 ()
.计次循环首 (10, i)
.计次循环首 (3, j)
.计次循环首 (3, k)
.如果真 ((2 ≠ j 或 2 ≠ k) 且 雷区 [雷 [i] [1] + j - 2] [雷 [i] [2] + k - 2] ≠ 9)
雷区 [雷 [i] [1] + j - 2] [雷 [i] [2] + k - 2] = 雷区 [雷 [i] [1] + j - 2] [雷 [i] [2] + k - 2] + 1
.如果真结束
.计次循环尾 ()
.计次循环尾 ()
.计次循环尾 ()
.计次循环首 (9, i)
画板1.画直线 (0, 40 × i, 400, 40 × i)
.计次循环尾 ()
.计次循环首 (9, i)
画板1.画直线 (40 × i, 0, 40 × i, 400)
.计次循环尾 ()
.计次循环首 (10, i)
.计次循环首 (10, j)
画板1.定位写出 (12 + 40 × (i - 1), 8 + 40 × (j - 1), 雷区 [i + 1] [j + 1])
.计次循环尾 ()
.计次循环尾 ()
.子程序 _画板1_鼠标右键被按下, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
i = 取整 (横向位置 ÷ 40) × 40 + 12
j = 取整 (纵向位置 ÷ 40) × 40 + 8
画板1.文本颜色 = #红色
画板1.定位写出 (i, j, “×”)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
比较满意的部分是计算非雷的空周围雷的个数,开始是对每个非雷的空计算它的周围有几个雷,后来改成对每个雷周围的空累加雷的个数,效率因此得以成倍提高。
(1)程序中用12*12的二维数组表示雷区,其中第1行、第1列、第12行、第12列并没用来布雷,之所以加上这些虚行虚列,是为了统一后边的处理,避免进行判断,这种用空间换取时间的处理手法在程序设计中很常见;
(2)按下鼠标右键事件的处理过程中,忘记雷的处理了,应判断点击的位置是否是雷,如果是则雷数加1,当雷数等于总雷数时,游戏结束,另外则是在标志/取消标志雷间要进行切换;
(3)按下鼠标左键事件的处理过程的算法描述(懒得去写O(∩_∩)O):
计算鼠标所在位置的行、列下标
调用“扫雷(行, 列)”过程
********************
扫雷(行, 列):
如果行≠1,行≠12,列≠1,列≠12
雷[行,列]的值是
9(代表是雷):显示每一个方格的内容(空白、数字或炸雷)
数字:显示该数字
0(代表空白):显示空白
对周围的8个空递归调用扫雷(新行, 新列)
扫雷(行, 列):
如果行≠1,行≠12,列≠1,列≠12
雷[行,列]的值是
9(代表是雷):显示每一个方格的内容(空白、数字或炸雷)
数字:显示该数字
0(代表空白):显示空白
对周围的8个空递归调用扫雷(新行, 新列)